| | --- |
| | 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)
|
| |
|
| | [](https://www.typescriptlang.org/)
|
| | [](https://reactjs.org/)
|
| | [](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)
|
| |
|
| | 
|
| |
|
| | ## 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!
|
| |
|
| |
|
| |
|