拆解 Claude.ai · Claude Code · Codex · Cursor 的 Agent 架构
2026-05-05 · 技术白皮书
工具调用是模型训练 + API 层转换 + 应用层执行三层协作的结果:
这些能力是通过 Supervised Fine-Tuning (SFT) 和 RLHF 训练出来的。训练数据大致如下:
// 训练样本示例(简化)
System: You have tools: web_search(query), calculator(expr)
Human: 北京今天多少度?
Assistant: [tool_use: web_search("北京 今天 气温")]
Tool Result: 北京今日最高温 28°C,最低 18°C,晴
Assistant: 北京今天最高气温 28°C,最低 18°C,天气晴朗。
模型见过数百万条这样的样本后,学会了一个关键判断:"我不知道答案 → 有可用工具 → 应该调用"。
当你向 Anthropic API 发送带 tools 参数的请求时,API 层做了这些事:
API 层是双向翻译:
tools JSON 转成模型理解的 prompt 文本tool_use response模型只负责"决定调用什么工具"。实际执行工具、管理上下文、控制循环全部是应用层的工作。这就是我们在 server.mjs 中写的 chat() 函数做的事。
几乎所有现代 Agent 都遵循 ReAct(Reasoning + Acting)范式,由 Yao et al. (2022) 提出:
ReAct 在工程上的实现就是一个 while 循环:
async function agentLoop(userMessage) {
const messages = [systemPrompt, userMessage];
for (let round = 0; round < MAX_ROUNDS; round++) {
const response = await callLLM(messages, tools);
if (response.stop_reason === "tool_use") {
// 模型想用工具 → 执行 → 结果追加到 messages
for (const toolCall of response.tool_uses) {
const result = await executeTool(toolCall);
messages.push(assistantMsg, toolResultMsg);
}
continue; // 下一轮 → 模型看到结果后继续推理
}
// 模型直接回答 → 结束循环
return response.text;
}
}
这段代码就是所有 Agent 的核心骨架。Claude.ai、Claude Code、Codex 本质上都是这个循环的不同实现。
| 决策点 | 选项 | 权衡 |
|---|---|---|
| 最大轮数 | 通常 5–20 轮 | 太少限制能力,太多浪费 token 和时间 |
| 流式 vs 非流式 | 流式更好的 UX | 流式需要实时解析 tool_calls,复杂度高 |
| 并行工具调用 | 模型可一次返回多个 tool_use | 并行执行更快,但需要处理依赖关系 |
| 上下文管理 | 累积 / 压缩 / 滑动窗口 | 累积最准确但 token 消耗大 |
| 错误处理 | 重试 / 跳过 / 让模型决定 | 把错误信息返回给模型通常是最好的策略 |
模型自主决定搜索词,可以多次搜索、逐步深入。这比传统的"用户勾选联网"体验更好,因为模型知道什么时候需要搜索、搜什么最有效。
沙盒化的 JavaScript 运行环境。模型写代码 → 服务端在沙盒中执行 → 结果(文本/图表)返回给模型。典型用途:数据分析、数学计算、图表生成。
Claude.ai 最有辨识度的功能。本质是一个结构化输出工具:
create_artifact,指定类型(React 组件/HTML/SVG/Markdown/Mermaid)不是传统意义的工具,而是模型的内部推理过程。通过 API 的 thinking 参数控制。模型在调用工具前先"思考"策略,用户可以看到思考过程。
Claude.ai 的 system prompt 是整个 Agent 行为的蓝图。核心要素:
Claude Code 是一个比 claude.ai 复杂得多的 Agent 系统。它不是简单的聊天+工具,而是一个完整的软件工程 Agent。
Claude Code 提供了一套专为软件工程设计的工具:
| 工具 | 功能 | 设计理由 |
|---|---|---|
Read | 读取文件内容(支持行范围) | 比 cat 更安全,有行号、支持图片/PDF |
Write | 创建/覆写文件 | 完整文件写入,适合新文件 |
Edit | 精确字符串替换 | 只发 diff,token 效率高,避免覆盖整个文件 |
Bash | 执行 shell 命令 | 万能后备,但鼓励用专用工具 |
Glob | 按模式查找文件 | 比 find 更快,按修改时间排序 |
Grep | 搜索文件内容 | 基于 ripgrep,比 grep 更强 |
Agent | 启动子 Agent | 并行执行独立任务,隔离上下文 |
Edit 比 Bash+sed 更安全、更省 token、用户更容易审查。Grep 比 Bash+grep 输出更规范。这种"禁止用 Bash 做能用专用工具做的事"的策略,在 system prompt 中被明确要求。Claude Code 的核心安全设计:每个工具调用都要用户批准(除非配置了自动批准)。
// 权限分级
读文件 → 通常自动批准(低风险)
写/编辑 → 需要用户确认(中风险,显示 diff)
Bash 命令 → 需要用户确认(高风险,显示命令)
git push → 特别警告(不可逆操作)
rm -rf → 强烈警告(破坏性操作)
这是 Agent 设计中的关键权衡:自主性 vs 安全性。完全自主的 Agent 效率高但风险大;完全需要批准的 Agent 安全但效率低。Claude Code 的方案是分级权限 + 可配置的自动批准。
长时间工作的 Agent 会累积大量上下文(代码内容、命令输出、工具结果)。Claude Code 的策略:
Claude Code 可以启动子 Agent 并行工作。每个子 Agent 有独立的上下文窗口和工具集。
// 主 Agent 启动两个子 Agent 并行
Agent({
description: "研究 API 文档",
prompt: "查找所有 REST endpoint..."
})
Agent({
description: "运行测试套件",
prompt: "执行 npm test 并分析失败..."
})
子 Agent 的设计要点:
run_in_background),主 Agent 继续其他工作subagent_type(Explore、Plan 等,各有不同工具集)对于复杂任务,Claude Code 支持"先规划再执行":
Plan 和 Act 可以使用不同的模型(比如 Plan 用快速模型,Act 用强力模型)。
Hook 是 Claude Code 的扩展点,允许用户在 Agent 生命周期的关键节点注入自定义行为:
| Hook | 触发时机 | 用途示例 |
|---|---|---|
| PreToolUse | 工具执行前 | 阻止危险命令、修改参数 |
| PostToolUse | 工具执行后 | 记录日志、触发 CI |
| UserPromptSubmit | 用户提交消息时 | 输入验证、上下文注入 |
| PreCompact | 上下文压缩前 | 保留关键信息 |
| Notification | 系统通知 | 桌面通知、Slack 推送 |
| 维度 | Claude Code | OpenAI Codex | Cursor |
|---|---|---|---|
| 形态 | CLI + IDE 扩展 | 云端 Agent | 整合式 IDE |
| 交互方式 | 终端对话 | Web 面板+PR | IDE 内嵌聊天 |
| 执行环境 | 本地机器 | 云端沙盒容器 | 本地机器 |
| 模型 | Claude (Opus/Sonnet) | codex-1 (o3 衍生) | 多模型(Claude/GPT/自有) |
| 定价 | 按 token | 按任务 | 订阅制 |
| 工具类别 | Claude Code | Codex | Cursor |
|---|---|---|---|
| 文件读取 | Read(行范围+图片+PDF) | 直接文件系统访问 | IDE API + 索引 |
| 文件编辑 | Edit(精确替换) | 直接写入 | Apply 模型(diff) |
| 代码搜索 | Grep+Glob | 标准命令行 | 语义索引 + ripgrep |
| 命令执行 | Bash(需批准) | 完全自由(沙盒内) | Terminal(需批准) |
| 网页搜索 | WebSearch | 不支持 | @web |
| 子任务 | Agent(子 Agent) | 不支持 | 不支持 |
| 扩展性 | MCP 协议 + Hook | 容器环境定制 | MCP 协议 |
Claude Code:"我是你身边的结对编程伙伴。每一步我都征求你的意见,你随时可以纠正我。"
Codex:"把任务交给我,去喝杯咖啡,回来看 PR 就行。"
Cursor:"我住在你的 IDE 里,从自动补全到完整 Agent,无缝切换。"
| 安全策略 | Claude Code | Codex | Cursor |
|---|---|---|---|
| 执行隔离 | 本地(无隔离) | 云端沙盒容器 | 本地(无隔离) |
| 权限控制 | 分级批准 + YOLO 模式 | 沙盒 = 天然隔离 | 工具调用批准 |
| 代码审查 | Diff 实时预览 | PR Review | Diff 预览 |
| 网络访问 | 完全(本地环境) | 受限(白名单) | 完全(本地环境) |
| 回滚能力 | Checkpoint 系统 | Git 分支 | 文件级撤销 |
Codex 的沙盒模型最安全(Agent 在隔离容器中,无法影响生产环境),但也最受限(无法访问本地资源)。Claude Code 和 Cursor 在本地运行,能力最强但风险也最大,通过人工审批来控制风险。
基于以上分析,设计 Agent 时的关键检查清单:
// 最小 Agent 骨架(你已经实现了这个!)
while (round < MAX_ROUNDS) {
response = await llm.call(messages, tools);
if (response.wants_tools) {
results = await execute(response.tool_calls);
messages.append(response, results);
} else {
return response.text;
}
}
你的 claude-lite 已经实现了第 1 级。后续可以按需添加:
| 级别 | 能力 | 实现复杂度 |
|---|---|---|
| 1 ✅ | 基础 Tool Use Loop + Web Search + Artifact | 已完成 |
| 2 | Code Execution(沙盒 JS/Python) | 中 — Node.js vm 模块或 Docker |
| 3 | URL 抓取 + 深度研究 | 低 — fetch + html-to-text |
| 4 | 图片生成(你已有 LuckyAPI gpt-image-2) | 低 |
| 5 | Artifact 版本管理(v1/v2/v3 切换) | 中 — 前端状态管理 |
| 6 | 文件上传分析(PDF/CSV → 结构化数据) | 中 |
| 7 | Extended Thinking 展示 | 低 — 解析 thinking 块 |
| 8 | 多 Agent 协作 | 高 — 需要任务编排系统 |
AI Agent 的核心并不神秘 — 它是一个 while 循环,里面是一个 LLM 调用和一组工具。真正的挑战在于工程细节:上下文管理、错误恢复、安全控制、用户体验。你的 claude-lite 已经走出了最关键的第一步:从"聊天机器人"变成了"Agent"。