跳到正文

架构与内部机制

基于 Anthropic 官方文档和经社区验证的分析,对 Claude Code 内部机制进行技术层面的深度剖析。

阅读时间:完整版约 25 分钟 | 仅 TL;DR 约 5 分钟

最后核实:2026 年 2 月(Claude Code v2.1.34)


来源透明度说明

本文档综合了三类来源:

级别描述置信度示例
Tier 1Anthropic 官方文档100%anthropic.com/engineering/*
Tier 2经核实的逆向工程分析70-90%PromptLayer 分析、code.claude.com 行为观察
Tier 3社区推断40-70%有观察依据但未经官方确认

每项信息均标注置信度。有官方文档时,优先参考官方文档。


TL;DR — 5 条要点

  1. 简单循环:Claude Code 运行的是 while(tool_call) 循环——没有 DAG、没有分类器、没有 RAG。所有决策均由模型自主做出。
  2. 八个核心工具:Bash 工具(万能适配器)、读取工具、编辑工具、写入工具、搜索工具、文件匹配工具、任务工具(子智能体)、TodoWrite。这就是全部工具集。搜索策略演变:早期 Claude Code 版本曾尝试使用 Voyage 嵌入实现语义代码搜索的 RAG。Anthropic 内部基准测试显示,基于 ripgrep 的 agentic 搜索表现更优、运维复杂度更低——无需索引同步,也不存在外部嵌入提供商的安全风险——因此切换至此方案。这一"搜索而非索引"的哲学以简单性和安全性换取了延迟和 Token 成本。社区插件(用于 AST 模式的 ast-grep)和 MCP 服务器(用于符号的 Serena、用于 RAG(检索增强生成)的 grepai)可满足专业化需求。来源Latent Space 播客(2025 年 5 月)、ast-grep 文档
  3. 200K Token(词元)预算:上下文窗口由系统提示、历史记录、工具结果和响应缓冲区共享。容量达到 ~75-92% 时自动压缩。
  4. 子智能体 = 隔离:任务工具派生的子智能体拥有独立的上下文窗口。子智能体不能再派生子子智能体(深度=1)。仅摘要文本返回主上下文。
  5. 设计哲学:"少框架,重模型"——信任 Claude 的推理能力,而非围绕它构建复杂的编排系统。

总体架构图

Claude Code 并非新的 AI 模型,而是一个编排层,它将 Claude(Opus/Sonnet/Haiku)包装为可读取文件、执行 shell 命令、导航代码库、派生子智能体的系统——一切在一个持续循环中运行,直到任务完成。

🖼️ 此处为飞书内嵌白板(需在飞书中查看)

参考 Mohamed Ali Ben Salem 的架构图——更深入的分解见「架构内部图表」。


目录

  • 总体架构图
  1. 主循环
  2. 工具集
  3. 上下文管理内部机制
  4. 子智能体架构
  5. 权限与安全模型
  6. MCP 集成
  7. 高级工具调用模式(API)
  8. 编辑工具:实际工作原理
  9. 会话持久化
  10. 设计哲学:少框架,重模型
  11. Claude Code 与竞品对比
  12. 来源与参考
  13. 附录:尚不明确的内容

1. 主循环

置信度:100%(Tier 1 - 官方)来源Anthropic 工程博客

Claude Code 的核心机制出奇简单:

Plain
┌─────────────────────────────────────────────────────────────┐
│                    CLAUDE CODE MASTER LOOP                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌──────────────┐                                          │
│   │  你的提示词  │                                          │
│   └──────┬───────┘                                          │
│          │                                                  │
│          ▼                                                  │
│   ┌──────────────────────────────────────────────────────┐  │
│   │                                                      │  │
│   │                  CLAUDE 推理                         │  │
│   │        (无分类器,无路由层)                        │  │
│   │                                                      │  │
│   └────────────────────────┬─────────────────────────────┘  │
│                            │                                │
│                            ▼                                │
│                   ┌────────────────┐                        │
│                   │  工具调用?    │                        │
│                   └───────┬────────┘                        │
│                           │                                 │
│              是           │           否                    │
│         ┌─────────────────┴─────────────────┐               │
│         │                                   │               │
│         ▼                                   ▼               │
│  ┌────────────┐                      ┌────────────┐         │
│  │  执行工具  │                      │  文本响应  │         │
│  │            │                      │  (完成)  │         │
│  └─────┬──────┘                      └────────────┘         │
│        │                                                    │
│        ▼                                                    │
│  ┌─────────────┐                                            │
│  │ 将结果返回  │                                            │
│  │  给 Claude  │──────────────────┐                         │
│  └─────────────┘                  │                         │
│                                   │                         │
│                                   ▼                         │
│                          ┌────────────────┐                 │
│                          │    循环继续    │                 │
│                          │  (下一轮次)  │                 │
│                          └────────────────┘                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

这意味着什么

整个架构就是一个简单的 while 循环:

Plain
while (claude_response.has_tool_call):
    result = execute_tool(tool_call)
    claude_response = send_to_claude(result)
return claude_response.text

不存在:

  • 意图分类器
  • 任务路由器
  • RAG(检索增强生成)/嵌入流水线
  • DAG 编排器
  • 规划/执行拆分

模型自行决定何时调用工具、调用哪个工具、以及何时完成。这就是 Anthropic 工程博客中描述的"智能体循环"模式。

为何采用此设计?

  1. 简单性:组件越少,故障点越少
  2. 模型驱动:Claude 的推理能力优于人工编写的启发式规则
  3. 灵活性:无刚性流水线限制 Claude 的能力
  4. 可调试性:出问题时,有清晰的排查路径

智能体循环 API 词汇表

上述主循环图从概念层面展示了流程,而 Anthropic API 通过具体的 stop_reason 值将其暴露出来。每个 API 响应都包含 stop_reason 字段——这是 Claude 发出的"下一步应做什么"信号。理解这三个值对于在 Anthropic SDK 上构建自定义智能体至关重要。

stop_reason含义循环动作
tool_useClaude 希望调用一个或多个工具执行工具,将结果回传,继续循环
end_turnClaude 判断任务已完成退出循环,返回文本响应
max_tokens在完成前已达上下文限制重新考虑上下文策略,可能需要摘要处理

结合这些名称,伪代码变得更加精确:

Python
messages = [{"role": "user", "content": user_prompt}]

while True:
    response = client.messages.create(model=model, messages=messages, tools=tools)

    if response.stop_reason == "end_turn":
        return response.content[0].text  # 完成

    if response.stop_reason == "tool_use":
        # 处理响应中的每个 tool_use 块
        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                result = execute_tool(block.name, block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": result
                })
        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})
        # 循环继续

response.content 中的 tool_use 块包含三个需要操作的字段:id(用于匹配结果)、name(要调用的函数)和 input(参数字典)。回传的结果必须引用 tool_use_id,以便模型将调用和响应关联起来。

fork_session(分叉会话) 是在此循环之上构建的高层概念:它从当前对话创建一个独立分支,两个分支共享分叉点之前的消息历史。两个分支可以同时探索不同的方法或配置,类似于 git branch 但作用于智能体会话。每个分叉独立运行自己的智能体循环——适合在不同工具配置或提示变体下比较响应,而无需从头重新运行完整对话。

用 max_turns 控制循环深度

max_turns 限制编排器退出前的助手/工具迭代次数。没有明确限制时,失控的循环可能耗尽预算或上下文窗口,且事后难以诊断。

各任务类型的实际范围:

任务类型推荐 max_turns
简单检索(单次查找)5
研究或多步骤编码20-30
扩展自主工作流50

达到 max_turns 时,循环以最后写入的状态退出,任务可能未完成。务必检查最终 stop_reason 并实现回退路径:

Python
result = agent.run(task, max_turns=20)
if result.stop_reason == "max_turns":
    # 升级处理或汇总部分进度
    handle_incomplete(result)

按任务类型而非全局设置 max_turns,可防止单个慢任务在多智能体流水线中"饿死"其他任务。一个合理需要 50 轮次的夜间批处理作业,不应继承只需 5 轮次即可完成的快速查询的相同上限。

原生能力审查

使用以下清单验证你是否了解 Claude Code 的全部功能。每项能力在本指南的其他部分均有详细文档。

11 项原生能力

  • [ ] 事件钩子(Hooks) — 由工具执行触发的 Bash/PowerShell 脚本

    • 工具前钩子(PreToolUse)、工具后钩子(PostToolUse)、用户提交钩子(UserPromptSubmit)、通知
    • 参见:第 5 节 Hooks
  • [ ] 技能作用域 Hooks — 特定于技能执行上下文的事件钩子

    • 按技能管理生命周期
    • 参见:《Claude Code:从入门到大师》第 5.11 节
  • [ ] 后台智能体 — 异步任务执行(测试套件、长时操作)

    • 非阻塞智能体派生
    • 参见:第 4.2 节 子智能体架构
  • [ ] 探索子智能体/explore 用于代码库分析

    • 只读代码库探索
    • 参见:第 4.2 节 子智能体
  • [ ] 计划子智能体/plan 用于只读计划模式(计划模式)

    • 安全的架构探索
    • 参见:《Claude Code:从入门到大师》第 2.3 节
  • [ ] 任务工具 — 向专业化智能体进行层级任务委托

    • 并行任务执行,深度=1 的子智能体
    • 参见:第 4.2 节 子智能体架构
  • [ ] 智能体团队 — 多智能体并行协调(实验性,v2.1.32+)

    • 基于 Git 的协调,自主任务认领
    • 参见:《Claude Code:从入门到大师》第 9.20 节
  • [ ] 按任务选择模型 — 动态模型切换,在会话中途按需切换

    • 在任务边界执行 /model opus|sonnet|haiku
    • 参见:第 10 节 成本优化
  • [ ] MCP(模型上下文协议)集成 — 用于工具扩展的 MCP 协议

    • Context7、Sequential、Serena、Playwright 等
    • 参见:第 6 节 MCP 集成
  • [ ] 权限模式 — 对工具执行的细粒度控制

    • 默认、自动接受、计划模式、自定义规则
    • 参见:第 5 节 权限与安全模型
  • [ ] 会话记忆 — 跨会话的持久上下文

    • CLAUDE.md、记忆文件、项目状态
    • 参见:第 8 节 会话持久化

入门提示:如果你还没有探索全部 11 项能力,你很可能错过了提升生产力的机会。重点关注上面未勾选的项目。

来源:综合自 Gur Sannikov 分析


2. 工具集

置信度:100%(Tier 1 - 官方)来源code.claude.com/docs

Claude Code 共有 8 个核心工具:

工具用途关键行为Token 成本
Bash执行 shell 命令万能适配器,功能最强低(命令)+ 可变(输出)
Read读取文件内容最多 2000 行,自动处理截断大文件成本高
Edit修改现有文件基于 diff,要求精确匹配中等
Write创建/覆盖文件若文件已存在必须先读取中等
Grep搜索文件内容基于 ripgrep(正则),替代了 RAG(检索增强生成)/嵌入方案。如需结构化代码搜索(基于 AST),参见 ast-grep 插件。权衡:Grep(快速、简单)vs ast-grep(精确、需配置)vs Serena MCP(语义、符号感知)
Glob按模式查找文件路径匹配,按修改时间排序
Task派生子智能体独立上下文,深度=1 限制高(新上下文)
TodoWrite跟踪进度结构化任务管理

Bash 万能适配器

核心洞见:Bash 工具是 Claude 的瑞士军刀,它可以:

  • 运行任意 CLI 工具(git、npm、docker、curl…)
  • 执行脚本
  • 通过管道链接命令
  • 访问系统状态

模型经过海量 shell 数据训练,在专用工具不够用时,能非常高效地将 Bash 工具用作万能适配器。

工具选择逻辑

Claude 根据任务决定使用哪个工具,没有硬编码的路由规则:

Plain
┌─────────────────────────────────────────────────────┐
│              工具选择(模型驱动)                   │
├─────────────────────────────────────────────────────┤
│                                                     │
│  "读取 auth.ts"           → 读取工具                │
│  "找出所有测试文件"        → 文件匹配工具            │
│  "搜索 TODO"              → 搜索工具                 │
│  "运行 npm test"          → Bash 工具               │
│  "探索代码库"             → 任务工具(子智能体)     │
│  "跟踪我的进度"           → TodoWrite 工具          │
│                                                     │
│  模型在训练时学习这些模式,                         │
│  而非通过显式规则。                                 │
│                                                     │
└─────────────────────────────────────────────────────┘

扩展工具生态系统

除 8 个核心工具外,Claude Code 还可以利用:

MCP 服务器(MCP(模型上下文协议)):

  • Serena:符号感知代码导航 + 会话记忆
  • grepai:语义搜索 + 调用图分析(基于 Ollama)
  • Context7:官方库文档查询
  • Sequential:结构化多步推理
  • Playwright:浏览器自动化和端到端测试
  • claude-code-ultimate-guide:12 个工具——指南搜索、发布跟踪、compare_versions、安全威胁查询(get_threatlist_threats,含 28 个 CVE + 655 个恶意技能)、模板搜索(search_examples)——npx -y claude-code-ultimate-guide-mcp

社区插件

  • ast-grep:基于 AST 的结构化代码搜索(需显式调用)

搜索工具选择矩阵

Claude Code 提供多种代码搜索方式,各有其优势:

搜索需求原生工具MCP/插件替代方案何时升级
精确文本Grep(ripgrep)-永不(最快)
函数名GrepSerena find_symbol多文件重构
按含义搜索-grepai search不知道确切文本
调用图-grepai trace_callers依赖分析
结构化模式-ast-grep大规模迁移(>5 万行)
文件结构-Serena get_symbols_overview需要符号上下文

性能对比

工具速度配置适用场景
Grep(ripgrep)⚡ ~20ms✅ 无需90% 的搜索场景
Serena⚡ ~100ms⚠️ MCP重构、符号
grepai🐢 ~500ms⚠️ Ollama + MCP语义搜索、调用图
ast-grep🕐 ~200ms⚠️ 插件AST 模式、迁移

决策原则:从 Grep(最快)开始,仅在必要时升级到专用工具。

📖 深度阅读:完整的多工具组合工作流,参见「搜索工具精通」。


3. 上下文管理内部机制

置信度:80%(Tier 2 - 部分官方)来源

Claude Code 在固定的上下文窗口内运行(约 200K Token(词元),因模型而异)。

上下文预算分解

Plain
┌─────────────────────────────────────────────────────────────┐
│               上下文预算(约 200K Token(词元))            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌──────────────────────────────────────────────────────┐   │
│  │ 系统提示                              (~5-15K)        │   │
│  │ • 工具定义                                           │   │
│  │ • 安全指令                                           │   │
│  │ • 行为准则                                           │   │
│  │ • 详细分解见下方 ↓                                   │   │
│  ├──────────────────────────────────────────────────────┤   │
│  │ CLAUDE.md 文件                       (~1-10K)        │   │
│  │ • 全局 ~/.claude/CLAUDE.md                           │   │
│  │ • 项目 /CLAUDE.md                                    │   │
│  │ • 本地 /.claude/CLAUDE.md                            │   │
│  ├──────────────────────────────────────────────────────┤   │
│  │ 对话历史                              (可变)        │   │
│  │ • 你的提示词                                         │   │
│  │ • Claude 的响应                                      │   │
│  │ • 工具调用记录                                       │   │
│  ├──────────────────────────────────────────────────────┤   │
│  │ 工具结果                              (可变)        │   │
│  │ • 读取工具读取的文件内容                              │   │
│  │ • Bash 工具的命令输出                                 │   │
│  │ • 搜索工具的搜索结果                                  │   │
│  ├──────────────────────────────────────────────────────┤   │
│  │ 响应保留空间                         (~40-45K)        │   │
│  │ • Claude 的深度思考                                  │   │
│  │ • 生成的代码/文本                                    │   │
│  └──────────────────────────────────────────────────────┘   │
│                                                             │
│  可用 = 总量 - 系统 - 保留 ≈ 140-150K Token(词元)         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

系统提示内容

置信度:100%(Tier 1 - 官方 Anthropic 文档)来源

Claude 系统提示(约 5-15K Token(词元))由 Anthropic 公开发布,作为其透明度承诺的一部分。这些提示定义了:

核心组件

  • 工具定义:Bash 工具、读取工具、编辑工具、写入工具、搜索工具、文件匹配工具、任务工具、TodoWrite
  • 安全指令:内容政策、拒绝模式(参见「安全加固」)
  • 行为准则:任务优先方法、MVP 优先、避免过度工程化
  • 上下文指令:如何收集和使用项目上下文

重要区别

  • Claude.ai/移动端:公开发布的提示词可公开查阅
  • Anthropic API:不同的默认指令,可由开发者配置
  • Claude Code CLI:具有上下文收集行为的 agentic 编码助手

社区分析(供深入理解):

交叉参考:安全影响见第 5 节:权限与安全模型

:Claude Code 系统提示可能与 Claude.ai/移动端版本不同。上述来源涵盖 Claude 系列;Code 专用提示已集成到 CLI 工具行为中。


自动压缩

置信度:75%(Tier 2 - 社区验证,有研究支持)

上下文使用率超过阈值时,Claude Code 会自动摘要旧的对话轮次:

来源报告的阈值备注
VS Code 扩展~75% 使用率(剩余 25%)GitHub #11819(2025 年 11 月)
CLI 版本剩余 1-5%比 VS Code 更保守
PromptLayer 分析92%历史观测
Steve Kinney95%会话管理指南(2025 年 7 月)
用户触发的 /compact随时手动控制

压缩期间发生了什么:

  1. 旧的对话轮次被摘要
  2. 工具结果被压缩
  3. 近期上下文完整保留
  4. 模型收到"上下文已压缩"信号

性能影响(有研究支持):

近期研究和从业者观察证实了自动压缩会导致质量下降

  • 上下文从 1K 增长到 32K Token(词元)时,LLM 在复杂任务上的性能下降 50-70%上下文退化研究,2025 年 7 月)
  • 12 个模型中有 11 个在 32K Token(词元)时跌破其短上下文性能的 50%(NoLiMa 基准测试)
  • 自动压缩通过反复压缩循环会丢失细节并破坏引用Claude 节省 Token 却遗忘一切,2026 年 1 月)
  • 注意力机制在高上下文场景下难以承受检索负担

社区共识:在逻辑断点处手动 /compact > 等待自动压缩触发。

推荐策略(Lorenz,2026):

上下文百分比操作理由
70%警告 - 计划清理提前感知
85%建议手动交接防止自动压缩质量下降
95%强制交接严重质量下降

用户控制:使用 /compact 在逻辑断点处手动触发摘要,或使用会话交接(参见会话交接)在压缩历史上保留意图。

上下文保留策略

策略使用时机方法
子智能体探索性任务使用任务工具进行隔离搜索
手动压缩主动清理/compact 命令
清除会话需要全新开始/clear 命令
精确读取知道需要什么读取特定文件,不读整个目录
CLAUDE.md持久上下文将规范存入记忆文件

会话质量下限

置信度:70%(Tier 2 - 从业者研究、arXiv 研究)

Claude Code 在某些条件下性能会可预测地下降:

条件观察到的阈值症状
对话轮次15-25 轮丢失对早期约束的追踪
Token 累积80-100K Token(词元)忽略会话早期声明的需求
问题范围同时超过 5 个文件变更不一致、文件遗漏

按范围划分的成功率(来自从业者研究):

范围成功率示例
1-3 个文件~85%修复单模块 bug
4-7 个文件~60%跨组件重构特性
8+ 个文件~40%代码库范围的全局改动

缓解策略

  1. 检查点提示:"继续之前,请总结当前需求和约束条件。"
  2. 会话重置:新任务时全新开始(/clear
  3. 收紧范围:将大任务分解为专注的子任务
  4. 使用子智能体:将探索委托给任务工具以保留主上下文

失败触发的上下文漂移

与上下文大小无关的另一种退化模式:重复的工具失败。工具调用失败且 Claude 重试时,错误输出在上下文窗口中积累。堆栈跟踪、重试噪声和错误消息稀释了原始意图——后续尝试会跟随错误叙述而非任务目标。上下文窗口并未满,但信噪比已经下降。

这与压缩漂移不同。压缩解决的是上下文大小问题;失败重注解决的是有限窗口内的上下文质量问题。

模式:每次命令失败时都重新注入核心任务指令,而不仅仅是 /compact 之后。PostToolUse 工具后钩子可以在重试提示中添加原始任务和约束的精简版本:

Bash
# PostToolUse 工具后钩子:失败后重新注入意图
if [[ "$CLAUDE_TOOL_EXIT_CODE" != "0" ]]; then
  echo "提醒:当前任务是:$ORIGINAL_TASK_SUMMARY。如果上述错误不影响进程,请忽略并继续完成目标。"
fi

来源:Nick Tune — 工作流 DSL:领域驱动的 Claude Code 工作流(2026-03-01)


4. 子智能体架构

置信度:100%(Tier 1 - 已记录行为)来源code.claude.com/docs + 系统提示(工具定义中可见)

任务工具派生子智能体,用于并行或隔离工作。

隔离模型

Plain
┌─────────────────────────────────────────────────────────────┐
│                          主智能体                           │
│                                                             │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 上下文:完整对话 + 所有文件读取                        │  │
│  │                                                       │  │
│  │         Task("探索身份认证模式")                      │  │
│  │                        │                              │  │
│  │                        ▼                              │  │
│  │  ┌─────────────────────────────────────────────────┐  │  │
│  │  │             子智能体(已派生)                  │  │  │
│  │  │                                                 │  │  │
│  │  │  • 独立的全新上下文窗口                         │  │  │
│  │  │  • 接收:仅任务描述                             │  │  │
│  │  │  • 可使用:相同工具(除任务工具外)              │  │  │
│  │  │  • 不能派生子子智能体(深度 = 1)               │  │  │
│  │  │  • 返回:仅摘要文本                             │  │  │
│  │  │                                                 │  │  │
│  │  └─────────────────────────────────────────────────┘  │  │
│  │                        │                              │  │
│  │                        ▼                              │  │
│  │         结果:"发现 3 种认证模式:JWT 在..."          │  │
│  │         (只有这段文本进入主上下文)                  │  │
│  │                                                       │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

为何深度 = 1?

将子智能体限制在一个层级可以防止:

  1. 递归爆炸:智能体套娃会消耗无限资源
  2. 上下文污染:每层都会积累上下文
  3. 调试噩梦:追踪多层智能体链非常困难
  4. 不可预测的成本:嵌套智能体 = 不可预测的 Token(词元)消耗

子智能体类型

Claude Code 通过 subagent_type 参数提供专用子智能体类型:

类型用途可用工具
Explore代码库探索所有只读工具
Plan架构规划除编辑工具/写入工具外的所有工具
Bash命令执行仅 Bash 工具
general-purpose复杂多步骤所有工具

何时使用子智能体

使用场景子智能体的优势
搜索大型代码库保持主上下文干净
并行探索同时进行多个搜索
风险性探索错误不污染主上下文
专项分析针对不同任务有不同的"思维模式"

轮辐式编排

生产中最主流的多智能体模式是轮辐式:一个协调者智能体居中,管理 N 个工作智能体,是唯一持有全局视图的实体。

Plain
                    ┌─────────────────────┐
                    │      协调者         │
                    │  (中心 / 编排者)  │
                    │                     │
                    │  • 分解目标         │
                    │  • 传递上下文       │
                    │  • 汇总结果         │
                    │  • 解决冲突         │
                    └──┬──────┬──────┬───┘
                       │      │      │
            ┌──────────┘      │      └──────────┐
            │                 │                 │
     ┌──────▼──────┐  ┌───────▼─────┐  ┌───────▼─────┐
     │   工作者 A  │  │   工作者 B  │  │   工作者 C  │
     │             │  │             │  │             │
     │  特定任务   │  │  特定任务   │  │  特定任务   │
     └─────────────┘  └─────────────┘  └─────────────┘
           │                 │                 │
           └────────────────►│◄────────────────┘
                     (结果仅流向协调者)

关键规则:上下文从不自动继承。 协调者派生工作者 A 分析文件 X 时,工作者 B 对该分析一无所知,除非协调者在任务描述中明确传递。工作者之间的隔离是设计使然——它们只接收任务字符串,不接收任何其他内容。

这是多智能体设计中最常见的错误:假设子智能体共享上下文。它们不共享。

显式上下文传递模式:

Python
# 错误——工作者 B 不知道工作者 A 的发现
task_a = Task("分析 auth.py 并找到会话 token 逻辑")
task_b = Task("找出会话 token 逻辑的所有调用者")  # 不知道在哪里

# 正确——协调者显式传递发现
result_a = run_task("分析 auth.py 并返回处理会话 token 的确切函数名")
task_b = Task(f"在代码库中找出 {result_a} 的所有调用者")  # 显式上下文

协调者的职责:

  1. 分解:将目标拆分为边界清晰的独立子任务
  2. 显式传递上下文:每个工作者的任务描述必须自包含
  3. 汇总:收集所有工作者的文本结果,合并为连贯输出
  4. 决策跨领域问题:只有协调者能做出跨工作者的决策

工作者之间永远不应需要相互通信。如果需要,说明分解方案有误,该任务应属于协调者。


5. 权限与安全模型

置信度:100%(Tier 1 - 官方)来源

Claude Code 采用分层安全模型:

Plain
┌─────────────────────────────────────────────────────────────┐
│                        权限层级                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  第 1 层:交互式提示                                        │
│  ┌────────────────────────────────────────────────────────┐ │
│  │ Claude 想要运行:rm -rf node_modules                   │ │
│  │ [本次允许] [始终允许] [拒绝] [编辑命令]               │ │
│  └────────────────────────────────────────────────────────┘ │
│                          │                                  │
│                          ▼                                  │
│  第 2 层:允许/拒绝规则(settings.json)                    │
│  ┌────────────────────────────────────────────────────────┐ │
│  │ {                                                      │ │
│  │   "permissions": {                                     │ │
│  │     "allow": ["Bash(npm *)", "Read"],              │ │
│  │     "deny": ["Bash(rm -rf *)"]                         │ │
│  │   }                                                    │ │
│  │ }                                                      │ │
│  └────────────────────────────────────────────────────────┘ │
│                          │                                  │
│                          ▼                                  │
│  第 3 层:Hooks(执行前/后)                                │
│  ┌────────────────────────────────────────────────────────┐ │
│  │ 工具前钩子(PreToolUse):执行前验证                   │ │
│  │ 工具后钩子(PostToolUse):执行后审计                  │ │
│  │ PermissionRequest:覆盖权限提示                        │ │
│  └────────────────────────────────────────────────────────┘ │
│                          │                                  │
│                          ▼                                  │
│  第 4 层:沙箱模式(可选隔离)                              │
│  ┌────────────────────────────────────────────────────────┐ │
│  │ 文件系统隔离 + 网络限制                                │ │
│  └────────────────────────────────────────────────────────┘ │
│                                                             │
└─────────────────────────────────────────────────────────────┘

危险模式检测

置信度:80%(Tier 2 - 有观察依据但不完整)

Claude Code 似乎会对某些模式进行额外审查:

模式风险行为
rm -rf破坏性删除始终提示
sudo权限提升始终提示
`curlsh`远程代码执行
chmod 777不安全权限始终提示
git push --force历史破坏始终提示
DROP TABLE数据破坏始终提示

这不是完整的黑名单——模式检测很可能通过模型训练而非显式规则实现。

原生沙箱(v2.1.0+)

置信度:100%(Tier 1 - 官方)来源code.claude.com/docs/en/sandboxing

Claude Code 包含基于 OS 层原语的内置原生沙箱,实现进程级隔离:

Plain
┌──────────────────────────────────────────────────────┐
│               原生沙箱架构                           │
├──────────────────────────────────────────────────────┤
│                                                      │
│  Bash 命令请求                                       │
│       │                                              │
│       ▼                                              │
│  沙箱包装器(Seatbelt/bubblewrap)                   │
│       │                                              │
│       ├─ 文件系统:全部可读,仅 CWD 可写             │
│       ├─ 网络:SOCKS5 代理 + 域名过滤               │
│       ├─ 进程:隔离环境                              │
│       │                                              │
│       ▼                                              │
│  OS 内核强制执行                                     │
│       │                                              │
│       ├─ 允许:边界内的操作                          │
│       ├─ 阻止:在系统调用层面拦截违规               │
│       └─ 通知:违规时向用户发出警报                  │
│                                                      │
└──────────────────────────────────────────────────────┘

OS 原语

平台机制备注
macOSSeatbelt(TrustedBSD MAC)内置,内核级系统调用过滤
Linux/WSL2bubblewrap(命名空间 + seccomp)需要:sudo apt-get install bubblewrap socat
WSL1❌ 不支持bubblewrap 需要不可用的内核特性
Windows⏳ 计划中尚不可用

隔离模型

  1. 文件系统

    • 读取:整台电脑(拒绝路径除外)
    • 写入:仅当前工作目录(可配置)
    • 阻止:CWD 外的修改,凭证目录(~/.ssh~/.aws
  2. 网络

    • 代理:所有连接通过 SOCKS5 代理路由
    • 域名过滤:允许列表/拒绝列表模式
    • 默认阻止:私有 CIDR、localhost 范围
  3. 进程

    • 共享内核:易受内核漏洞攻击(不同于 Docker 微虚拟机)
    • 子进程:继承相同的沙箱限制
    • 逃生出口dangerouslyDisableSandbox 参数,用于不兼容的工具

沙箱模式

  • 自动允许模式:沙箱化的 Bash 命令自动批准(推荐日常开发使用)
  • 常规权限模式:所有命令需要明确批准(高安全性)

安全权衡

方面原生沙箱Docker 沙箱(微虚拟机)
内核隔离❌ 共享内核✅ 每个虚拟机独立内核
配置0 依赖(macOS),2 个包(Linux)Docker Desktop 4.58+
开销极低(~1-3% CPU)中等(~5-10% CPU)
适用场景日常开发、受信任代码不受信任代码、最高安全性

安全限制

⚠️ 域名前置:CDN(Cloudflare、Akamai)可绕过域名过滤⚠️ Unix 套接字:错误配置的 allowUnixSockets 会带来权限提升⚠️ 文件系统:过于宽泛的写权限会使 $PATH 目录面临攻击

使用时机

  • 原生沙箱:日常开发、受信任团队、轻量级配置
  • Docker 沙箱:不受信任代码、内核漏洞防护、需要 Docker-in-Docker

深度阅读:完整技术参考、配置示例和故障排除,参见「原生沙箱指南」。

Hooks 系统

Hooks 允许通过编程方式控制 Claude 的操作:

JSON
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{
          "type": "command",
          "command": "/path/to/validate-command.sh"
        }]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "*",
        "hooks": [{
          "type": "command",
          "command": "/path/to/audit-log.sh"
        }]
      }
    ]
  }
}

Hook 能力:

能力支持方式
阻止执行退出码 2
修改参数返回修改后的 JSON
记录操作在 hook 中写入文件
异步处理在 hook 配置中设置 async: true(v2.1.0+)

Hook JSON 载荷(通过 stdin 传入):

JSON
{
  "session_id": "abc123",
  "transcript_path": "/home/user/.claude/projects/.../transcript.jsonl",
  "cwd": "/path/to/project",
  "permission_mode": "default",
  "hook_event_name": "PreToolUse",
  "tool_name": "Bash",
  "tool_input": {
    "command": "npm install lodash"
  }
}

所有事件均发送的公共字段:session_idtranscript_pathcwdpermission_modehook_event_name。特定事件的字段(如工具前钩子的 tool_name/tool_input)在此基础上追加。

交叉参考:完整示例见主指南第 7 节 - Hooks。


6. MCP 集成

置信度:100%(Tier 1 - 官方)来源code.claude.com/docs/en/mcp

MCP(模型上下文协议)服务器通过附加工具扩展 Claude Code 的能力。

MCP 架构概览

💡 可视化指南:下图展示 MCP 如何在 LLM 和真实系统之间创建安全控制层。LLM 层无法直接访问数据——MCP 服务器在工具与数据库、API 或文件交互之前执行安全策略。

图 1:MCP 架构,展示思考层(LLM)、控制层(MCP 服务器)和执行层(工具)之间的分离。设计参考 Dinesh Kumar 的 LinkedIn 可视化,在 Apache-2.0 许可证下重新创建。

关键安全边界

  • 黄色层(LLM):仅推理——无数据访问权限
  • 橙色层(MCP 服务器):安全控制点(策略、验证、日志)
  • 灰色层(真实系统):受保护的数据——对 AI 不可见

MCP 工作原理(技术细节)

Plain
┌─────────────────────────────────────────────────────────────┐
│                    MCP 集成                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                  CLAUDE CODE                        │    │
│  │                                                     │    │
│  │   原生工具            MCP 工具                      │    │
│  │   ┌─────────┐        ┌─────────────────────────┐    │    │
│  │   │ Bash    │        │ mcp__serena__*          │    │    │
│  │   │ Read    │        │ mcp__context7__*        │    │    │
│  │   │ Edit    │        │ mcp__playwright__*      │    │    │
│  │   │ ...     │        │ mcp__custom__*          │    │    │
│  │   └─────────┘        └───────────┬─────────────┘    │    │
│  │                                  │                  │    │
│  └──────────────────────────────────┼──────────────────┘    │
│                                     │                       │
│                           JSON-RPC 2.0                      │
│                                     │                       │
│                                     ▼                       │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                  MCP 服务器                         │    │
│  │                                                     │    │
│  │   stdio/HTTP 传输                                   │    │
│  │   工具定义(JSON Schema)                           │    │
│  │   工具实现                                          │    │
│  │                                                     │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

MCP 关键事实

方面行为
协议JSON-RPC 2.0,通过 stdio 或 HTTP
工具命名mcp__<服务器>__<工具> 约定
上下文共享仅通过工具参数和返回值
生命周期首次使用时启动服务器,会话期间保持运行
权限与原生工具相同的系统

MCP 不能做什么

限制说明
访问对话历史只能看到工具参数,不能看到完整上下文
跨调用维护状态每次调用都是独立的(除非服务器实现了缓存)
修改 Claude 的系统提示只有工具,不能注入提示词
绕过权限与原生工具相同的安全层

交叉参考:安全考量见第 8.6 节 - MCP 安全。

MCP 扩展:Apps(SEP-1865)

状态:稳定(2026 年 1 月 26 日)规范GitHub 上的 SEP-1865联合作者:OpenAI、Anthropic、MCP-UI 创建者

什么是 MCP Apps?

MCP Apps 是 MCP(模型上下文协议)的第一个官方扩展,允许 MCP 服务器在传统工具响应的同时提供交互式用户界面

解决的问题:传统的纯文本响应在需要探索的工作流中产生摩擦。每次交互(排序、过滤、下钻)都需要一个新的提示周期。MCP Apps 通过直接在对话中渲染交互式 UI 消除了这一"上下文差距"。

技术架构

两个核心原语

  1. 带 UI 元数据的工具

  2. UI 资源ui:// 协议):

    • 服务器端 HTML/JavaScript 包
    • 在宿主的沙箱 iframe 中渲染
    • 通过 postMessage 进行双向 JSON-RPC 通信

通信流程

Plain
┌─────────────────────────────────────────────────────────┐
│                  MCP APPS 架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌──────────────┐         ┌──────────────┐             │
│  │  MCP 客户端  │◄───────►│  MCP 服务器  │             │
│  │(Claude/IDE)│ JSON-RPC│  (你的应用)│             │
│  └──────┬───────┘         └──────────────┘             │
│         │                                               │
│         │ 获取 ui:// 资源                              │
│         ▼                                               │
│  ┌─────────────────────────────────────────┐            │
│  │     沙箱 Iframe(UI 渲染)              │            │
│  │  ┌───────────────────────────────────┐  │            │
│  │  │  来自服务器的 HTML/JS 包           │  │            │
│  │  │  - 交互式仪表盘                   │  │            │
│  │  │  - 带验证的表单                   │  │            │
│  │  │  - 实时数据可视化                 │  │            │
│  │  └───────────────────────────────────┘  │            │
│  │                                          │            │
│  │  postMessage ◄─────► JSON-RPC           │            │
│  └─────────────────────────────────────────┘            │
│                                                         │
└─────────────────────────────────────────────────────────┘

安全模型

多层保护

层级保护措施
Iframe 沙箱受限权限(无直接系统访问)
预声明模板宿主在渲染前审查 HTML/JS
可审计的消息传递所有 UI 到宿主的通信均通过 JSON-RPC 日志
用户同意UI 发起的工具调用可选要求用户确认
内容拦截宿主可在渲染前拒绝可疑资源

交叉参考:更广泛的 MCP 安全考量见第 8.6 节 - MCP 安全。

SDK:@modelcontextprotocol/ext-apps

安装

Bash
npm install @modelcontextprotocol/ext-apps

核心 API(框架无关):

TypeScript
import { App } from '@modelcontextprotocol/ext-apps';

const app = new App();

// 1. 与宿主建立通信
await app.connect();

// 2. 从宿主接收工具结果
app.ontoolresult = (result) => {
  // 用工具执行结果更新 UI
  updateDashboard(result.data);
};

// 3. 从 UI 调用服务器工具
await app.callServerTool('fetch_analytics', {
  timeRange: '7d',
  metrics: ['users', 'revenue']
});

// 4. 异步更新模型上下文
await app.updateModelContext({
  selectedFilters: ['region:EU', 'status:active']
});

// 其他能力:
app.logDebug('用户操作', { filter: 'applied' });
app.openBrowserLink('https://docs.example.com');
app.sendFollowUpMessage('已应用过滤器:EU、Active');

标准通信:所有功能均通过 postMessage 运作(无框架锁定)。

平台支持

平台MCP Apps 支持备注
Claude Desktop✅ 现已可用claude.ai/directory(Pro/Max/Team/Enterprise)
Claude Cowork🔄 即将推出计划集成 agentic 工作流
VS Code✅ Insiders 版本官方博客文章
ChatGPT🔄 推出中2026 年 1 月 26 日当周
Goose✅ 现已可用支持 UI 的开源 CLI
Claude Code CLI❌ 不适用终端纯文本(无法渲染 iframe)

对 Claude Code 用户的意义

直接使用:无(CLI 仅支持文本,无法渲染 iframe)

间接收益

  1. 生态系统理解:MCP Apps 代表 agentic 工作流的未来

  2. MCP 服务器开发:如果你在构建自定义 MCP 服务器,Apps 现在是一个设计选项

  3. 混合工作流

    • 使用 Claude Desktop 配合 Apps 探索数据(仪表盘、可视化)
    • 切换到 Claude Code CLI 进行实现(脚本、自动化)
  4. 配置参考:MCP 服务器可能在元数据中声明 UI 能力

示例实现

官方示例服务器(在 ext-apps 仓库中):

  • threejs-server:3D 可视化和操作
  • map-server:交互式地理数据探索
  • pdf-server:带内联高亮的文档查看
  • system-monitor-server:实时指标仪表盘
  • sheet-music-server:乐谱渲染

生产采用(2026 年 1 月):

工具提供商能力
AsanaAsana项目时间线、任务看板
SlackSalesforce带格式预览的消息起草
FigmaFigmaFigJam 中的流程图、甘特图
AmplitudeAmplitude带交互过滤的分析图表
BoxBox文件搜索、文档预览
CanvaCanva带实时自定义的演示设计
ClayClay公司研究、联系人发现
HexHex带交互查询的数据分析
monday.commonday.com工作管理看板

即将推出:Salesforce(Agentforce 360)

与先前工作的关系

MCP Apps 将以下先驱项目的模式标准化:

  • MCP-UI:MCP 的早期 UI 扩展(社区项目)
  • OpenAI Apps SDK:用于交互式工具的并行工作

两个框架继续获得支持。MCP Apps 提供了一个统一规范(SEP-1865),由两个生态系统的维护者加上 Anthropic 和 OpenAI 联合编写。

迁移路径:对现有 MCP-UI 和 Apps SDK 实现而言非常直接。

何时使用 MCP Apps

MCP 服务器开发者的决策树

Plain
正在构建自定义 MCP 服务器?
├─ 用户需要从 50+ 选项中选择?→ MCP Apps(下拉菜单、多选 UI)
├─ 用户需要可视化数据模式?→ MCP Apps(图表、地图、图形)
├─ 用户需要带条件逻辑的多步骤工作流?→ MCP Apps(向导表单)
├─ 用户需要实时更新?→ MCP Apps(实时仪表盘)
└─ 仅需简单数据检索或操作?→ 传统 MCP 工具(足够了)

权衡:UI 复杂性和实现成本 vs. 用户体验提升。

资源


MCP 工具搜索(懒加载)

置信度:100%(Tier 1 - 官方)来源anthropic.com/engineering/advanced-tool-use

自 v2.1.7(2026 年 1 月)起,Claude Code 使用懒加载加载 MCP 工具定义,而不是预加载所有工具到上下文中。这由 Anthropic 的高级工具调用 API 特性驱动。

解决的问题:

  • MCP 工具定义消耗大量上下文(例如,GitHub MCP 单独就有 93 个工具,约 46K Token(词元))
  • 开发者 Scott Spence 记录了在输入第一个提示词之前就已消耗 66,000+ Token(词元)的情况
  • 这种"上下文污染"限制了 MCP 的实际采用

工具搜索的工作原理:

Plain
┌─────────────────────────────────────────────────────────────┐
│                   MCP 工具搜索流程                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  未使用工具搜索(预先加载):                               │
│  ┌──────────────────────────────────────────────────────┐   │
│  │ 所有 100+ 工具定义预先加载(~55K Token(词元))      │   │
│  └──────────────────────────────────────────────────────┘   │
│                                                             │
│  使用工具搜索(懒加载):                                   │
│  ┌──────────────────────────────────────────────────────┐   │
│  │ 步骤 1:仅加载搜索工具(~500 Token(词元))          │   │
│  │ 步骤 2:Claude 判断所需能力                          │   │
│  │ 步骤 3:工具搜索找到匹配工具(正则/BM25)             │   │
│  │ 步骤 4:仅加载匹配的工具(每个约 600 Token(词元))  │   │
│  │ 步骤 5:正常调用工具                                 │   │
│  └──────────────────────────────────────────────────────┘   │
│                                                             │
│  结果:55K Token(词元)→ ~8.7K Token(词元)(减少 85%)    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

测量到的改善(Anthropic 基准测试):

指标之前之后改善
Token(词元)开销(5 服务器配置)~55K~8.7K减少 85%
Opus 4 工具选择准确率49%74%+25 个百分点
Opus 4.5 工具选择准确率79.5%88.1%+8.6 个百分点
Opus 4.6 自适应思考N/A自动校准动态深度

配置(v2.1.9+):

Bash
# 环境变量
ENABLE_TOOL_SEARCH=auto      # 默认(10% 上下文阈值)
ENABLE_TOOL_SEARCH=auto:5    # 激进(5% 阈值)
ENABLE_TOOL_SEARCH=auto:20   # 保守(20% 阈值)
ENABLE_TOOL_SEARCH=true      # 始终启用
ENABLE_TOOL_SEARCH=false     # 禁用(预先加载)
阈值推荐使用场景
auto:20轻量级配置(5-10 个工具)
auto:10均衡默认(20-50 个工具)
auto:5高级用户(100+ 个工具)

→ 正如 Simon Willison 指出的:"上下文污染是我很少使用 MCP(模型上下文协议)的原因。现在这个问题解决了,没有理由不把几十甚至几百个 MCP 接到 Claude Code 上。" — X/Twitter,2026 年 1 月 14 日


7. 高级工具调用模式(API)

置信度:90%(Tier 1 - 官方 Anthropic 工程)来源Anthropic 工程:高级工具调用 | 程序化工具调用文档

四项 API 层面的特性于 2026 年 2 月 18 日正式发布(随 Opus/Sonnet 4.6 一起)。这些特性适用于在 Anthropic API 或 Agent SDK 上构建智能体的开发者——无法直接在 Claude Code CLI 中使用。

特性解决的问题可用范围
程序化工具调用(PTC)智能体循环在往返中消耗 Token(词元)API + Foundry
动态过滤网页搜索用噪声膨胀上下文API + Foundry
工具搜索工具过多工具定义膨胀上下文API + Foundry
工具调用示例仅凭 Schema 无法表达使用模式API + Foundry

战略分层 — 先解决你最大的瓶颈:

  • 上下文因工具定义膨胀 → 工具搜索工具
  • 中间结果过大 → 程序化工具调用
  • 网页研究返回噪声 → 动态过滤
  • 尽管 Schema 正确仍有参数错误 → 工具调用示例

程序化工具调用(PTC)

范式转变:不再每次工具调用都进行完整的模型往返,而是 Claude 编写 Python 代码在内部编排所有工具调用。只有最终的 stdout 进入上下文窗口。

Plain
传统方式:提示词 → Claude → 工具1 → 响应1 → Claude → 工具2 → 响应2 → Claude → 答案
          (3 个工具 = 3 次推理,上下文中有 3 倍的中间结果)

PTC:      提示词 → Claude → 编写 Python → 代码调用工具1、2、3 → stdout → Claude → 答案
          (3 个工具 = 1 次推理,上下文中只有最终输出)

配置 — 用 allowed_callers 标记可从代码执行沙箱调用的工具:

JSON
{
  "tools": [
    { "type": "code_execution_20250825", "name": "code_execution" },
    {
      "name": "query_database",
      "description": "执行 SQL。以 JSON 格式返回行:id(str)、name(str)、revenue(float)。",
      "input_schema": {
        "type": "object",
        "properties": { "sql": { "type": "string" } },
        "required": ["sql"]
      },
      "allowed_callers": ["code_execution_20250825"]
    }
  ]
}
allowed_callers行为
省略 / ["direct"]仅传统调用
["code_execution_20250825"]仅从 Python 沙箱调用
["direct", "code_execution_20250825"]两种模式——不推荐(会让 Claude 困惑)

模式(均在 1 次推理中完成):

  • 批处理:遍历 N 个项目,汇总,打印摘要
  • 提前终止:一旦满足成功条件即中断
  • 条件工具选择:根据中间结果选择轻量或重量工具
  • 数据过滤:减少 Claude 看到的内容(errors = [l for l in logs if "ERROR" in l]

Token(词元)效率:程序化调用的工具结果从不进入 Claude 的上下文——只有最终 stdout 进入。10 次程序化工具调用 ≈ 10 次直接调用 Token(词元)消耗的 1/10。约 37% 的整体 Token(词元)减少是社区报告数据(Shayan Tabe 的分析),未经 Anthropic 官方确认。

限制:仅限 API 和 Foundry(不支持 Bedrock/Vertex)。不支持 MCP 工具、网页搜索/抓取、strict: true 工具。容器生命周期约 4.5 分钟。不在零数据保留范围内。

网页搜索/抓取的动态过滤

网页搜索和抓取工具会将完整 HTML 倒入上下文——包括导航、广告、模板。动态过滤允许 Claude 编写 Python 预处理并过滤结果,然后再进入其上下文窗口。

配置 — 使用更新版本的工具类型并添加 beta 头:

JSON
{
  "tools": [
    { "type": "web_search_20260209", "name": "web_search" },
    { "type": "web_fetch_20260209", "name": "web_fetch" }
  ]
}

需要的请求头:anthropic-beta: code-execution-web-tools-2026-02-09。使用这些工具类型版本配合 Sonnet 4.6 或 Opus 4.6 时,默认启用过滤。

官方基准测试结果(Anthropic,BrowseComp 数据集):

模型未过滤过滤后改善
Sonnet 4.633.3%46.6%+13.3 pp
Opus 4.645.3%61.6%+16.3 pp

平均输入 Token(词元)减少约 24%。最适合多步骤研究、引用验证和从大型页面提取特定数据点。

工具调用示例

JSON Schema 定义了结构,但无法表达何时应包含可选参数、哪些组合有意义或格式约定。向工具定义添加 input_examples 以展示具体使用模式:

JSON
{
  "name": "create_ticket",
  "input_schema": { ... },
  "input_examples": [
    { "title": "登录页面 500 错误", "priority": "critical", "assignee": "oncall-team", "labels": ["bug", "auth"] },
    { "title": "添加暗色模式", "priority": "low", "labels": ["feature-request"] },
    { "title": "更新 v2 的 API 文档" }
  ]
}

在 Anthropic 基准测试中,复杂参数处理的准确率从 72% 提升至 90%。每个工具使用 1-5 个真实示例,涵盖最小化、部分化和完整规格。

与 Claude Code 的相关性

特性Claude Code CLICLI 用户的操作
工具搜索(MCP 懒加载)自 v2.1.7 起内置为 MCPSearch 自动模式调整 ENABLE_TOOL_SEARCH=auto:N——已记录在上方第 6 节
工具调用示例无法从 CLI 配置与自定义 MCP 服务器作者相关——在工具 Schema 中添加 input_examples
程序化工具调用CLI 中不可用与构建自定义智能体的 Agent SDK 开发者相关
动态过滤CLI 中不可用与进行网页研究流水线的 Agent SDK 用户相关

8. 编辑工具:实际工作原理

置信度:90%(Tier 2 - 通过行为验证)来源

编辑工具比表面看起来更复杂。

编辑算法

Plain
┌─────────────────────────────────────────────────────────────┐
│                     编辑工具流程                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  输入:old_string、new_string、file_path                    │
│                                                             │
│         ┌──────────────────────────────────────┐            │
│         │ 步骤 1:精确匹配                     │            │
│         │ 按字面搜索 old_string                │            │
│         └────────────────┬─────────────────────┘            │
│                          │                                  │
│              找到?  ────┴────  未找到?                    │
│                │                     │                      │
│                ▼                     ▼                      │
│         ┌──────────┐         ┌──────────────────┐           │
│         │  替换    │         │ 步骤 2:模糊      │           │
│         │ (完成) │         │ 匹配              │           │
│         └──────────┘         └────────┬─────────┘           │
│                                       │                     │
│                           找到?  ────┴────  未找到?       │
│                             │                     │         │
│                             ▼                     ▼         │
│                      ┌──────────┐         ┌──────────────┐  │
│                      │  替换    │         │    错误      │  │
│                      │ + 警告   │         │  (不匹配)  │  │
│                      └──────────┘         └──────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

模糊匹配详情

精确匹配失败时,编辑工具会尝试:

  1. 空白规范化:忽略尾随空格,规范化缩进
  2. 行尾规范化:处理 CRLF 与 LF 的差异
  3. 上下文扩展:使用周围行定位正确位置

如果模糊匹配也失败,工具返回错误,要求 Claude 验证 old_string。

编辑验证

应用更改之前,编辑工具会检查:

检查目的
文件存在防止通过编辑工具创建文件
找到 old_string确保正在编辑正确的位置
唯一匹配old_string 必须唯一(或使用 replace_all
内容有变化防止无效编辑

编辑失败时

错误原因Claude 的响应
"old_string not found"内容在上次读取后已更改重新读取文件,再次尝试
"Multiple matches"old_string 不唯一使用更多上下文行
"File not found"路径错误搜索正确路径

9. 会话持久化

置信度:100%(Tier 1 - 官方)来源code.claude.com/docs

会话可跨终端会话恢复。

恢复机制

命令行为
claude --continue / claude -c恢复最近的会话
claude --resume <id> / claude -r <id>通过 ID 恢复特定会话

什么被持久化

持久化不持久化
对话历史实时工具状态
工具调用结果待处理操作
会话 ID文件锁
工作目录上下文环境变量

存储格式

置信度:50%(Tier 3 - 推断)

会话似乎以 JSON/JSONL 文件格式存储在 ~/.claude/ 中,但:

  • 格式未公开记录
  • 不打算作为稳定 API
  • 版本之间可能更改

不要依赖会话文件格式进行外部工具开发。


10. 设计哲学:少框架,重模型

置信度:100%(Tier 1 - 官方)来源:Daniela Amodei(Anthropic 联合创始人兼总裁)- 公开声明

Claude Code 背后的核心哲学:

"用更少做更多。聪明的架构选择、更好的训练效率和专注的问题解决,可以与原始规模竞争。"

实践中意味着什么

传统方式Claude Code 方式
意图分类器 → 路由器 → 专家单一模型决定一切
带嵌入的 RAG(检索增强生成)Grep + 文件匹配(正则搜索)
DAG 任务编排简单 while 循环
工具专用规划器模型驱动的工具选择
复杂状态机对话即状态
提示词工程框架信任模型

为何有效

  1. 模型能力:Claude 4+ 足够强大,可以处理路由决策
  2. 降低延迟:组件越少,响应越快
  3. 调试更简单:出问题时只有一处需要排查
  4. 更好的泛化:没有边缘情况会破坏的硬编码规则

权衡

优势劣势
简单性细粒度控制较少
灵活性难以强制执行严格行为
错误更少模型错误影响全局
快速迭代需要良好的模型质量

社区验证

"原生能力优先"的方法正越来越多地被外部从业者验证。嵌入式工程团队(包括以前的 Cursor 重度用户)在外部编排框架之上选择了 Agent Skills(技能模块)标准,证明了信任 Claude 原生推理而非叠加框架层的可行性。

示例:Gur Sannikov(嵌入式工程)采用了仅使用 Claude Code 原生能力(Hooks(钩子)、Skills(技能模块)、任务工具)的 ADR 驱动工作流,不依赖外部框架——验证了本指南中记录的架构哲学。

这一趋同表明,"少框架,重模型"的方法超出了最初的预期,即使在嵌入式系统开发这样的复杂工程领域也能扩展。


11. Claude Code 与竞品对比

置信度:80%(Tier 2 - 基于 2026 年 3 月经过事实核查的数据)来源:官方文档、Perplexity 研究(2026 年 3 月)、各厂商变更日志

维度Claude CodeGitHub CopilotCursorAmazon Q Developer
架构while(tool) 循环IDE 智能体 + 云编码智能体事件驱动 + 云AWS 集成智能体
执行本地终端本地(智能体模式)+ 云虚拟机本地 + 云云/本地混合
模型Claude(单一提供商)GPT、Claude、Codex(可选)多模型(自适应)Amazon Titan + 其他
上下文~200K Token(词元)全代码库(智能体模式)代码库感知(Composer)可变(AWS 范围)
透明度高(可见推理过程)
定制化CLAUDE.md + Hooks + MCPAGENTS.md、MCP(GA)、自定义智能体MCP Apps、.cursorrulesMCP(原生)、AWS 集成
MCP 支持原生是(GA,自动批准)是(MCP Apps v2.6)是(原生)
定价Pro $20 / Max $100-200Free / Pro $10 / Pro+ $39 / Biz $19/人Free / Pro $20 / Biz $40/人Free / Pro $19/人 / Enterprise

何时选择 Claude Code

场景Claude Code替代方案
深度代码库探索出色良好
终端原生工作流出色有限
自定义自动化(Hooks)出色有限
团队标准化良好(CLAUDE.md)各异
IDE 集成有限(VS Code 扩展)Cursor/Copilot 更好
企业合规通过 Anthropic 企业各异

12. 来源与参考

Tier 1 - Anthropic 官方

来源URL主题
工程博客anthropic.com/engineering/claude-code-best-practices主循环、设计哲学
配置文档code.claude.com/docs/en/setup工具、命令
上下文窗口platform.claude.com/docs/en/build-with-claude/context-windowsToken(词元)限制
Hooks 参考code.claude.com/docs/en/hooksHook 系统
Hooks 指南code.claude.com/docs/en/hooks-guideHook 示例
MCP 文档code.claude.com/docs/en/mcpMCP 集成
沙箱code.claude.com/docs/en/sandboxing安全模型
llms.txt(索引)code.claude.com/docs/llms.txtLLM 优化文档索引,约 65 页
llms-full.txtcode.claude.com/docs/llms-full.txt完整文档(约 98 KB 文本)

Tier 2 - 经验证的分析

来源URL主题
PromptLayer 分析blog.promptlayer.com/claude-code-behind-the-scenes-of-the-master-agent-loop/内部架构
Steve Kinney 课程stevekinney.com/courses/ai-development/claude-code-*权限、会话

Tier 3 - 社区资源

来源主题
GitHub Issues(anthropics/claude-code)边缘案例、bug、功能讨论
Reddit r/ClaudeAI用户体验、变通方案
YouTube 教程可视化演示

13. 附录:尚不明确的内容

关于我们理解中的空白,保持透明:

未知或未确认

主题未知内容当前理解的置信度
精确的压缩阈值是 75%?85%?92%?因模型而异?40%
系统提示内容完整文本未公开,因模型版本而异30%
Token(词元)计算方式确切的分词器、工具 Schema 的开销50%
模型降级Claude Code 在模型失败时是否降级?20%
内部缓存会话之间是否有结果缓存?20%
速率限制逻辑每个工具的速率限制应用方式40%

明确未文档化

这些内容是 Anthropic 有意不记录的:

  • 会话文件格式(内部实现细节)
  • 模型之间的系统提示变化
  • 内部组件名称/架构
  • 每个组件的 Token(词元)使用量分解
  • 确切的权限评估顺序

如何保持更新

  1. 官方变更日志:关注 anthropic.com/changelog
  2. GitHub 发布:github.com/anthropics/claude-code/releases
  3. 社区 Discord:各种以 Claude 为中心的服务器
  4. 本指南:根据经验证的信息定期更新

贡献

发现错误?有经过验证的新信息?欢迎贡献:

  1. 官方事实:引用 Anthropic 来源
  2. 观察结果:描述你如何验证该行为
  3. 纠错:解释什么是错误的以及原因

最后更新:2026 年 2 月Claude Code 版本:v2.1.34文档版本:1.1.0


面向架构师的 Anthropic API 模式

架构师必须了解的三项 API 层面特性:用于成本优化批量处理的 Message Batches API、用于保证结构化输出的 tool_choice,以及严格模式 JSON Schema 强制执行。


Message Batches API

Batches API 在单个 HTTP 请求中提交最多 100 条消息,并在 24 小时窗口内异步处理。费用是同步速率的 50%——质量相同,价格减半,代价是延迟。

使用时机:

使用场景同步 API流式 APIBatch API
交互式聊天
实时分析
批量文档处理是(便宜 50%)
多轮工具循环否(不支持)
夜间分类流水线
大规模数据提取

Batches API 不支持多轮对话或跨轮次的 tool_use 延续。批次中的每个请求都是单次无状态调用。

提交、轮询、获取:

Python
import anthropic
import time

client = anthropic.Anthropic()

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"doc-{i}",
            "params": {
                "model": "claude-opus-4-5",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": f"对此文档进行分类:{doc}"}
                ]
            }
        }
        for i, doc in enumerate(documents)
    ]
)

# 轮询直到完成(processing_status:"in_progress" | "ended")
while batch.processing_status == "in_progress":
    time.sleep(60)
    batch = client.messages.batches.retrieve(batch.id)

# 流式获取结果——每个条目有 custom_id 和结果
for result in client.messages.batches.results(batch.id):
    match result.type:
        case "succeeded":
            output = result.message.content[0].text
            process(result.custom_id, output)
        case "errored":
            log_error(result.custom_id, result.error.error.message)
        case "expired":
            requeue(result.custom_id)

结果在批次结束后保留 29 天,之后自动删除。

大规模错误处理:

单个请求的错误不会使整个批次失败。一个有 100 个请求、其中 3 个失败的批次仍会返回 97 个成功结果。弹性流水线的模式:

  1. 立即处理所有 succeeded 结果。
  2. 收集 errored 的 custom_id,用指数退避重试。
  3. expired 视为软性失败——请求从未运行,因此将其重新排队。

重试经济学:

同步重试单个失败项的成本是批次费率的 2 倍。如果错误率低于 5%,同步重试仍然整体更划算。错误率超过 10% 时,在重试之前先检查提示词。


tool_choice:控制工具触发时机

tool_choice 控制模型是否以及调用哪个工具。四种模式:

行为
{"type": "auto"}模型自行决定;可能调用也可能不调用工具(默认)
{"type": "any"}模型必须至少从提供的列表中调用一个工具
{"type": "tool", "name": "X"}模型必须专门调用工具 X
{"type": "none"}不允许工具调用;模型以文字形式响应

any 和特定工具模式将 stop_reason"end_turn" 更改为 "tool_use"。这足够可靠,可以用作守卫:如果 stop_reason != "tool_use",则模型违反了约束,你可以重试。

通过工具强制结构化输出:

将输出 Schema 定义为工具的 input_schema,然后强制使用它。模型不能以文字形式响应——它必须填充你的 Schema。

Python
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    tools=[{
        "name": "extract_invoice",
        "description": "从发票文档中提取结构化字段",
        "input_schema": {
            "type": "object",
            "properties": {
                "vendor_name": {"type": ["string", "null"]},
                "invoice_date": {
                    "type": ["string", "null"],
                    "description": "ISO 8601 日期"
                },
                "total_amount": {"type": ["number", "null"]},
                "line_items": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "description": {"type": "string"},
                            "amount": {"type": "number"}
                        },
                        "required": ["description", "amount"]
                    }
                }
            },
            "required": ["vendor_name", "invoice_date", "total_amount", "line_items"]
        }
    }],
    tool_choice={"type": "tool", "name": "extract_invoice"},
    messages=[{"role": "user", "content": f"从以下内容提取字段:\n\n{invoice_text}"}]
)

# 结果始终是 tool_use,从不是文字形式
fields = response.content[0].input

这种模式适用于任何需要机器可读输出的提取、分类或分析任务。不需要 beta 请求头。


结构化输出:strict 模式

output-schema-2025-02-19 beta 版启用受约束解码。模型生成的 Token(词元)在构造上不可能违反 JSON Schema。它绝不会产生无效 JSON、绝不会省略必填字段、绝不会使用错误的类型。

激活 strict 模式:

Python
client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    betas=["output-schema-2025-02-19"],
    tools=[{
        "name": "classify_document",
        "description": "将文档分类到一个类别",
        "input_schema": {
            "type": "object",
            "strict": True,
            "properties": {
                "category": {
                    "type": "string",
                    "enum": ["invoice", "contract", "report", "memo", "other"]
                },
                "category_detail": {
                    "type": ["string", "null"],
                    "description": "当类别为 'other' 时必填的自由文本说明"
                },
                "confidence": {"type": "number"},
                "summary": {"type": "string"}
            },
            "required": ["category", "category_detail", "confidence", "summary"]
        }
    }],
    tool_choice={"type": "tool", "name": "classify_document"},
    messages=[{"role": "user", "content": doc_text}]
)

strict: true 保证的内容:

  • 语法上合法的 JSON
  • 所有 required 字段均存在
  • 字段类型与 Schema 完全匹配
  • 没有超出声明范围的额外属性

strict: true 不保证的内容:

  • 语义准确性(confidence 字段对于错误分类可能是 0.99)
  • 真实值(vendor_name 字段会被填充,但如果文档含糊,可能是错的)

对于语义准确性,可将 strict 模式与验证重试循环配合使用。

可空字段防止默认值幻觉:

没有可空设置时,模型必须填充每个必填字段,并会编造一个值而不是留空。可空字段给了模型一个明确的选项:

JSON
"vendor_name": {"type": ["string", "null"]}

当无法找到该字段时,模型返回 null,而不是猜测。

带伴随字段的可扩展枚举:

封闭枚举在输入不符合任何类别时会中断。解决方案:将 "other" 添加为最后一个枚举值,并添加一个伴随详情字段:

JSON
{
    "document_type": {
        "type": "string",
        "enum": ["invoice", "purchase_order", "receipt", "credit_note", "other"]
    },
    "document_type_detail": {
        "type": ["string", "null"],
        "description": "当 document_type 为 'other' 时填充;描述实际的文档类型"
    }
}

这为 95% 的情况保留了枚举的类型安全,同时优雅地捕获了 5% 的例外情况。

detected_pattern 用于误报分析:

在分类流水线中,detected_pattern 字段展示了模型使用的证据。这将不透明的分类转变为可调试的决策:

JSON
{
    "is_complaint": {"type": "boolean"},
    "detected_pattern": {
        "type": ["string", "null"],
        "description": "引用触发分类的具体短语或模式"
    },
    "confidence": {"type": "number"}
}

is_complaint: truedetected_pattern: "your service is terrible" 时,人工审核员可以在几秒内验证分类。当 detected_pattern: nullconfidence: 0.6 时,这是一个信号,应升级为人工审核而非自动处理。


来源:飞书 · AI Spark 知识库 | 原文(最新版):https://lcnniolukk80.feishu.cn/wiki/WCJCwbKAQiRIcKk34sccpqfYncd | 归档:2026-06-04