技术深度解析
`claude-code-from-scratch`的核心是对Claude Code代理循环的简化但忠实的复现。其架构可分解为四个主要模块:
1. 代理循环编排器:一个管理对话轮次的TypeScript类。它将当前对话历史(系统提示+用户消息+先前工具结果)发送给LLM,接收响应,解析任何工具调用,执行它们,并将结果反馈到下一轮。这是经典的ReAct(推理+行动)模式。
2. 工具系统:项目实现了一套核心工具:`Read`、`Write`、`Edit`、`Bash`和`Glob`。每个工具由JSON模式(用于函数调用)、处理函数和一组安全约束定义。`Edit`工具采用基于差异的方法,发送带行号的补丁而非完整文件重写,从而减少token消耗并提高精度。
3. 上下文窗口管理器:任何编程代理的关键组件。项目实现了一个滑动窗口,当token预算超限时丢弃较早的消息。它优先保留系统指令、最近的用户请求以及最后几个工具结果。这是生产环境中使用策略的简化版本,生产环境可能涉及摘要或检索增强生成(RAG)。
4. 沙盒执行:`Bash`工具在子进程中运行命令,带有超时和输出截断。项目包含一个基本安全检查,默认阻止破坏性命令(如`rm -rf /`)。与基于Docker的隔离相比,这是一个最小沙盒,但它阐明了原理。
项目的代码异常简洁。主代理循环不到200行。工具定义每个不到100行。这是刻意的设计选择:可读性优先于健壮性。作者指出,像Claude Code这样的生产系统有数千行额外的代码用于错误处理、重试逻辑、流式传输和多模型支持。
数据表:代理循环复杂度对比
| 组件 | `claude-code-from-scratch` (行数) | 预估Claude Code (行数) | 比例 |
|---|---|---|---|
| 代理循环编排器 | 180 | ~5,000 | 1:28 |
| 工具定义(5个工具) | 450 | ~15,000 | 1:33 |
| 上下文管理 | 120 | ~8,000 | 1:67 |
| 沙盒/执行 | 90 | ~10,000 | 1:111 |
| 错误处理与重试 | 40 | ~12,000 | 1:300 |
| 核心总计 | ~880 | ~50,000 | 1:57 |
数据启示: 该项目在保留核心逻辑的同时实现了57倍的代码量缩减。这表明编程代理的基本思想本身并不复杂,但产品化引入了巨大的额外开销。教育价值在于,开发者能够在不被噪音干扰的情况下看到本质。
对于希望进一步探索的开发者,项目引用了几个关键开源仓库:
- `anthropics/anthropic-cookbook`:包含使用Anthropic API的工具使用和代理模式示例。
- `openai/openai-cookbook`:OpenAI函数调用的类似示例。
- `e2b-dev/agent-protocol`:代理到沙盒通信的标准化接口。
- `plandex-ai/plandex`:一个架构更复杂的开源AI编程代理,适合对比参考。
关键玩家与案例研究
该项目处于AI编程助手市场多个趋势的交汇点。主要商业玩家包括:
- Anthropic (Claude Code):参考实现。Claude Code是一个基于终端的代理,能够读取、编辑和执行代码。它使用专有模型(Claude 3.5 Sonnet)和高度优化的代理循环。Anthropic尚未开源代理代码,使得该项目成为一项有价值的逆向工程实践。
- GitHub Copilot:现已推出代理模式(Copilot Workspace),使用GPT-4和专注于IDE集成的不同架构。其代理循环透明度较低。
- Cursor:一款内置AI功能的IDE,使用VS Code的分支。其代理能力与编辑器紧密集成。
- 开源替代方案:诸如`sweep-ai/sweep`、`plandex-ai/plandex`和`aider-ai/aider`等项目提供不同级别的代理功能。`aider`因其基于地图的代码理解方法而特别引人注目。
数据表:开源编程代理功能对比
| 特性 | `claude-code-from-scratch` | `aider` | `plandex` | `sweep` |
|---|---|---|---|---|
| 语言 | TypeScript/Python | Python | Go | Python |
| 代码行数 | ~4,000 | ~30,000 | ~50,000 | ~20,000 |
| 主要模型 | Claude/GPT(可配置) | GPT-4/Claude | GPT-4 | GPT-4 |
| 工具使用 | 是(5个工具) | 是(git感知) | 是(计划+执行) | 是(PR创建) |
| 上下文管理 | 滑动窗口 | 地图+token预算 | 计划+差异 | 问题解析 |
| 沙盒化 | 子进程(基础) | Git分支 | Docker | GitHub Actions |
| 教育重点 | 首要 | 次要 | 次要 | 次要 |