Email / README.md
lenzcom's picture
Upload folder using huggingface_hub
709049e verified
---
title: Email Classifier Agent
emoji: 🤖
colorFrom: blue
colorTo: indigo
sdk: docker
pinned: false
app_port: 7860
---
> **Read the full interactive version:**
> This repository is part of **AI Agents From Scratch** - a hands-on learning series where we build AI agents *step by step*, explain every design decision, and visualize what’s happening under the hood.
>
> 👉 **https://agentsfromscratch.com**
>
> If you prefer **long-form explanations, diagrams, and conceptual deep dives**, start there - then come back here to explore the code.
# AI Agents From Scratch
Learn to build AI agents locally without frameworks. Understand what happens under the hood before using production frameworks.
## Purpose
This repository teaches you to build AI agents from first principles using **local LLMs** and **node-llama-cpp**. By working through these examples, you'll understand:
- How LLMs work at a fundamental level
- What agents really are (LLM + tools + patterns)
- How different agent architectures function
- Why frameworks make certain design choices
**Philosophy**: Learn by building. Understand deeply, then use frameworks wisely.
## Related Projects
### [AI Product from Scratch](https://github.com/pguso/ai-product-from-scratch)
[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![React](https://img.shields.io/badge/React-20232A?logo=react&logoColor=61DAFB)](https://reactjs.org/)
[![Node.js](https://img.shields.io/badge/Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
Learn AI product development fundamentals with local LLMs. Covers prompt engineering, structured output, multi-step reasoning, API design, and frontend integration through 10 comprehensive lessons with visual diagrams.
### [AI Agents from Scratch in Python](https://github.com/pguso/agents-from-scratch)
![Python](https://img.shields.io/badge/Python-3776AB?logo=python&logoColor=white)
## Next Phase: Build LangChain & LangGraph Concepts From Scratch
> After mastering the fundamentals, the next stage of this project walks you through **re-implementing the core parts of LangChain and LangGraph** in plain JavaScript using local models.
> This is **not** about building a new framework, it’s about understanding *how frameworks work*.
## Phase 1: Agent Fundamentals - From LLMs to ReAct
### Prerequisites
- Node.js 18+
- At least 8GB RAM (16GB recommended)
- Download models and place in `./models/` folder, details in [DOWNLOAD.md](DOWNLOAD.md)
### Installation
```bash
npm install
```
### Run Examples
```bash
node intro/intro.js
node simple-agent/simple-agent.js
node react-agent/react-agent.js
```
## Learning Path
Follow these examples in order to build understanding progressively:
### 1. **Introduction** - Basic LLM Interaction
`intro/` | [Code](examples/01_intro/intro.js) | [Code Explanation](examples/01_intro/CODE.md) | [Concepts](examples/01_intro/CONCEPT.md)
**What you'll learn:**
- Loading and running a local LLM
- Basic prompt/response cycle
**Key concepts**: Model loading, context, inference pipeline, token generation
---
### 2. (Optional) **OpenAI Intro** - Using Proprietary Models
`openai-intro/` | [Code](examples/02_openai-intro/openai-intro.js) | [Code Explanation](examples/02_openai-intro/CODE.md) | [Concepts](examples/02_openai-intro/CONCEPT.md)
**What you'll learn:**
- How to call hosted LLMs (like GPT-4)
- Temperature Control
- Token Usage
**Key concepts**: Inference endpoints, network latency, cost vs control, data privacy, vendor dependence
---
### 3. **Translation** - System Prompts & Specialization
`translation/` | [Code](examples/03_translation/translation.js) | [Code Explanation](examples/03_translation/CODE.md) | [Concepts](examples/03_translation/CONCEPT.md)
**What you'll learn:**
- Using system prompts to specialize agents
- Output format control
- Role-based behavior
- Chat wrappers for different models
**Key concepts**: System prompts, agent specialization, behavioral constraints, prompt engineering
---
### 4. **Think** - Reasoning & Problem Solving
`think/` | [Code](examples/04_think/think.js) | [Code Explanation](examples/04_think/CODE.md) | [Concepts](examples/04_think/CONCEPT.md)
**What you'll learn:**
- Configuring LLMs for logical reasoning
- Complex quantitative problems
- Limitations of pure LLM reasoning
- When to use external tools
**Key concepts**: Reasoning agents, problem decomposition, cognitive tasks, reasoning limitations
---
### 5. **Batch** - Parallel Processing
`batch/` | [Code](examples/05_batch/batch.js) | [Code Explanation](examples/05_batch/CODE.md) | [Concepts](examples/05_batch/CONCEPT.md)
**What you'll learn:**
- Processing multiple requests concurrently
- Context sequences for parallelism
- GPU batch processing
- Performance optimization
**Key concepts**: Parallel execution, sequences, batch size, throughput optimization
---
### 6. **Coding** - Streaming & Response Control
`coding/` | [Code](examples/06_coding/coding.js) | [Code Explanation](examples/06_coding/CODE.md) | [Concepts](examples/06_coding/CONCEPT.md)
**What you'll learn:**
- Real-time streaming responses
- Token limits and budget management
- Progressive output display
- User experience optimization
**Key concepts**: Streaming, token-by-token generation, response control, real-time feedback
---
### 7. **Simple Agent** - Function Calling (Tools)
`simple-agent/` | [Code](examples/07_simple-agent/simple-agent.js) | [Code Explanation](examples/07_simple-agent/CODE.md) | [Concepts](examples/07_simple-agent/CONCEPT.md)
**What you'll learn:**
- Function calling / tool use fundamentals
- Defining tools the LLM can use
- JSON Schema for parameters
- How LLMs decide when to use tools
**Key concepts**: Function calling, tool definitions, agent decision making, action-taking
**This is where text generation becomes agency!**
---
### 8. **Simple Agent with Memory** - Persistent State
`simple-agent-with-memory/` | [Code](examples/08_simple-agent-with-memory/simple-agent-with-memory.js) | [Code Explanation](examples/08_simple-agent-with-memory/CODE.md) | [Concepts](examples/08_simple-agent-with-memory/CONCEPT.md)
**What you'll learn:**
- Persisting information across sessions
- Long-term memory management
- Facts and preferences storage
- Memory retrieval strategies
**Key concepts**: Persistent memory, state management, memory systems, context augmentation
---
### 9. **ReAct Agent** - Reasoning + Acting
`react-agent/` | [Code](examples/09_react-agent/react-agent.js) | [Code Explanation](examples/09_react-agent/CODE.md) | [Concepts](examples/09_react-agent/CONCEPT.md)
**What you'll learn:**
- ReAct pattern (Reason → Act → Observe)
- Iterative problem solving
- Step-by-step tool use
- Self-correction loops
**Key concepts**: ReAct pattern, iterative reasoning, observation-action cycles, multi-step agents
**This is the foundation of modern agent frameworks!**
---
### 10. **AoT Agent** - Atom of Thought Planning
`aot-agent/` | [Code](examples/10_aot-agent/aot-agent.js) | [Code Explanation](examples/10_aot-agent/CODE.md) | [Concepts](examples/10_aot-agent/CONCEPT.md)
**What you'll learn:**
- Atom of Thought methodology
- Atomic planning for multi-step computations
- Dependency management between operations
- Structured JSON output for reasoning plans
- Deterministic execution of plans
**Key concepts**: AoT planning, atomic operations, dependency resolution, plan validation, structured reasoning
---
## Documentation Structure
Each example folder contains:
- **`<name>.js`** - The working code example
- **`CODE.md`** - Step-by-step code explanation
- Line-by-line breakdowns
- What each part does
- How it works
- **`CONCEPT.md`** - High-level concepts
- Why it matters for agents
- Architectural patterns
- Real-world applications
- Simple diagrams
## Core Concepts
### What is an AI Agent?
```
AI Agent = LLM + System Prompt + Tools + Memory + Reasoning Pattern
─┬─ ──────┬────── ──┬── ──┬─── ────────┬────────
│ │ │ │ │
Brain Identity Hands State Strategy
```
### Evolution of Capabilities
```
1. intro → Basic LLM usage
2. translation → Specialized behavior (system prompts)
3. think → Reasoning ability
4. batch → Parallel processing
5. coding → Streaming & control
6. simple-agent → Tool use (function calling)
7. memory-agent → Persistent state
8. react-agent → Strategic reasoning + tool use
```
### Architecture Patterns
**Simple Agent (Steps 1-5)**
```
User → LLM → Response
```
**Tool-Using Agent (Step 6)**
```
User → LLM ⟷ Tools → Response
```
**Memory Agent (Step 7)**
```
User → LLM ⟷ Tools → Response
↕
Memory
```
**ReAct Agent (Step 8)**
```
User → LLM → Think → Act → Observe
↑ ↓ ↓ ↓
└──────┴──────┴──────┘
Iterate until solved
```
## ️ Helper Utilities
### PromptDebugger
`helper/prompt-debugger.js`
Utility for debugging prompts sent to the LLM. Shows exactly what the model sees, including:
- System prompts
- Function definitions
- Conversation history
- Context state
Usage example in `simple-agent/simple-agent.js`
## ️ Project Structure - Fundamentals
```
ai-agents/
├── README.md ← You are here
├─ examples/
├── 01_intro/
│ ├── intro.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 02_openai-intro/
│ ├── openai-intro.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 03_translation/
│ ├── translation.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 04_think/
│ ├── think.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 05_batch/
│ ├── batch.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 06_coding/
│ ├── coding.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 07_simple-agent/
│ ├── simple-agent.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 08_simple-agent-with-memory/
│ ├── simple-agent-with-memory.js
│ ├── memory-manager.js
│ ├── CODE.md
│ └── CONCEPT.md
├── 09_react-agent/
│ ├── react-agent.js
│ ├── CODE.md
│ └── CONCEPT.md
├── helper/
│ └── prompt-debugger.js
├── models/ ← Place your GGUF models here
└── logs/ ← Debug outputs
```
## Phase 2: Building a Production Framework (Tutorial)
After mastering the fundamentals above, **Phase 2** takes you from scratch examples to production-grade framework design. You'll rebuild core concepts from **LangChain** and **LangGraph** to understand how real frameworks work internally.
### What You'll Build
A lightweight but complete agent framework with:
- **Runnable Interface**, The composability pattern that powers everything
- **Message System**, Typed conversation structures (Human, AI, System, Tool)
- **Chains**, Composing multiple operations into pipelines
- **Memory**, Persistent state across conversations
- **Tools**, Function calling and external integrations
- **Agents**, Decision-making loops (ReAct, Tool-calling)
- **Graphs**, State machines for complex workflows (LangGraph concepts)
### Learning Approach
**Tutorial-first**: Step-by-step lessons with exercises
**Implementation-driven**: Build each component yourself
**Framework-compatible**: Learn patterns used in LangChain.js
### Structure Overview
```
tutorial/
├── 01-foundation/ # 1. Core Abstractions
│ ├── 01-runnable/
│ │ ├── lesson.md # Why Runnable matters
│ │ ├── exercises/ # Hands-on practice
│ │ └── solutions/ # Reference implementations
│ ├── 02-messages/ # Structuring conversations
│ ├── 03-llm-wrapper/ # Wrapping node-llama-cpp
│ └── 04-context/ # Configuration & callbacks
│
├── 02-composition/ # 2. Building Chains
│ ├── 01-prompts/ # Template system
│ ├── 02-parsers/ # Structured outputs
│ ├── 03-llm-chain/ # Your first chain
│ ├── 04-piping/ # Composition patterns
│ └── 05-memory/ # Conversation state
│
├── 03-agency/ # 3. Tools & Agents
│ ├── 01-tools/ # Function definitions
│ ├── 02-tool-executor/ # Safe execution
│ ├── 03-simple-agent/ # Basic agent loop
│ ├── 04-react-agent/ # Reasoning + Acting
│ └── 05-structured-agent/ # JSON mode
│
└── 04-graphs/ # 4. State Machines
├── 01-state-basics/ # Nodes & edges
├── 02-channels/ # State management
├── 03-conditional-edges/ # Dynamic routing
├── 04-executor/ # Running workflows
├── 05-checkpointing/ # Persistence
└── 06-agent-graph/ # Agents as graphs
src/
├── core/ # Runnable, Messages, Context
├── llm/ # LlamaCppLLM wrapper
├── prompts/ # Template system
├── chains/ # LLMChain, SequentialChain
├── tools/ # BaseTool, built-in tools
├── agents/ # AgentExecutor, ReActAgent
├── memory/ # BufferMemory, WindowMemory
└── graph/ # StateGraph, CompiledGraph
```
### Why This Matters
**Understanding beats using**: When you know how frameworks work internally, you can:
- Debug issues faster
- Customize behavior confidently
- Make architectural decisions wisely
- Build your own extensions
- Read framework source code fluently
**Learn once, use everywhere**: The patterns you'll learn (Runnable, composition, state machines) apply to:
- LangChain.js - You'll understand their abstractions
- LangGraph.js - You'll grasp state management
- Any agent framework - Same core concepts
- Your own projects - Build custom solutions
### Getting Started with Phase 2
After completing the fundamentals (intro → react-agent), start the tutorial:
[Overview](tutorial/README.md)
```bash
# Start with the foundation
cd tutorial/01-foundation/01-runnable
lesson.md # Read the lesson
node exercises/01-*.js # Complete exercises
node solutions/01-*-solution.js # Check your work
```
Each lesson includes:
- **Conceptual explanation**, Why it matters
- **Code walkthrough**, How to build it
- **Exercises**, Practice implementing
- **Solutions**, Reference code
- **Real-world examples**, Practical usage
**Time commitment**: ~8 weeks, 3-5 hours/week
### What You'll Achieve
By the end, you'll have:
1. Built a working agent framework from scratch
2. Understood how LangChain/LangGraph work internally
3. Mastered composability patterns
4. Created reusable components (tools, chains, agents)
5. Implemented state machines for complex workflows
6. Gained confidence to use or extend any framework
**Then**: Use LangChain.js in production, knowing exactly what happens under the hood.
---
## Key Takeaways
### After Phase 1 (Fundamentals), you'll understand:
1. **LLMs are stateless**: Context must be managed explicitly
2. **System prompts shape behavior**: Same model, different roles
3. **Function calling enables agency**: Tools transform text generators into agents
4. **Memory is essential**: Agents need to remember across sessions
5. **Reasoning patterns matter**: ReAct > simple prompting for complex tasks
6. **Performance matters**: Parallel processing, streaming, token limits
7. **Debugging is crucial**: See exactly what the model receives
### After Phase 2 (Framework Tutorial), you'll master:
1. **The Runnable pattern**: Why everything in frameworks uses one interface
2. **Composition over configuration**: Building complex systems from simple parts
3. **Message-driven architecture**: How frameworks structure conversations
4. **Chain abstraction**: Connecting prompts, LLMs, and parsers seamlessly
5. **Tool orchestration**: Safe execution with timeouts and error handling
6. **Agent execution loops**: The mechanics of decision-making agents
7. **State machines**: Managing complex workflows with graphs
8. **Production patterns**: Error handling, retries, streaming, and debugging
### What frameworks give you:
Now that you understand the fundamentals, frameworks like LangChain, CrewAI, or AutoGPT provide:
- Pre-built reasoning patterns and agent templates
- Extensive tool libraries and integrations
- Production-ready error handling and retries
- Multi-agent orchestration
- Observability and monitoring
- Community extensions and plugins
**You'll use them better because you know what they're doing under the hood.**
## Additional Resources
- **node-llama-cpp**: [GitHub](https://github.com/withcatai/node-llama-cpp)
- **Model Hub**: [Hugging Face](https://huggingface.co/models?library=gguf)
- **GGUF Format**: Quantized models for local inference
## Contributing
This is a learning resource. Feel free to:
- Suggest improvements to documentation
- Add more example patterns
- Fix bugs or unclear explanations
- Share what you built!
## License
Educational resource - use and modify as needed for learning.
---
**Built with ❤️ for people who want to truly understand AI agents**
Start with `intro/` and work your way through. Each example builds on the previous one. Read both CODE.md and CONCEPT.md for full understanding.
Happy learning!