文章核心观点 - Anthropic 的 Claude Code 项目揭示了构建生产级 AI Agent 的关键在于其周围精密的工程系统,而非模型本身[2][3] - 行业普遍关注模型、上下文和外壳三层架构,但 Claude Code 展示了至关重要的第四层——基础设施层,这决定了 Agent 是演示品还是可用的产品[6][7] - 模型能力是商品化的,而 Agent 的性能和可靠性(如在 SWE-bench 上提升 64%)主要由其运行环境(第二、三、四层)决定[5][33][34] 四层架构设计 - 行业普遍认知的 Agent 三层架构为:模型权重(Layer 1)、上下文(Layer 2)、外壳(Layer 3)[5] - Claude Code 揭示了被忽略的第四层:基础设施层(Layer 4),负责多租户、权限控制、资源隔离、状态持久化和分布式协调[6] - 第四层解决了生产环境中的脏活累活,如权限分层、状态跨会话存储、多 Agent 并发写入协调,是将酷炫 Demo 转化为每日可用产品的关键[6][7] 核心循环设计 - Claude Code 的核心循环(query.ts,共 1,729 行)采用 async generator 而非传统的 while 循环,带来了多项生产级优势[8] - 采用 generator 实现了流式输出,让用户能逐字看到模型工作过程,增强了信任和 Agent 的自主执行度[10] - 该设计天然支持取消机制和背压控制,防止内存无限增长导致进程崩溃[10] - 循环内部集成了五阶段错误恢复机制(准备、模型调用、错误恢复、工具执行、继续判断),而非外部包裹 try-catch,使 Agent 能自动处理如提示词过长、输出 token 不足等问题并继续工作[11] 工具并发与执行策略 - Claude Code 内置了 45 个以上的工具,其关键在于按并发行为对工具进行分类,并在工具定义时打好标签[12][14] - 编排层根据标签将工具调用分批执行:只读工具(如 Glob、Grep)最多 10 个并行执行;写操作工具(如 Edit、Write)串行执行,实现了速度与安全性的兼顾[14] - 这种设计使多工具回合速度提升 2-5 倍,在整个会话中可节省分钟级别的时间[14] - 实现了流式工具执行,即在模型流式生成过程中,一旦某个工具调用的输入 JSON 完整就立即开始执行,无需等待整个生成结束,可隐藏 2-5 秒的延迟[16] - 流式执行具备完善的边界处理,如工具失败时的进程控制、失败回退机制,并确保结果按原始顺序输出[16] 提示词与缓存优化 - Claude Code 的系统提示词是一个带缓存元数据的结构化数组,而非简单字符串[18] - 使用 SYSTEM_PROMPT_DYNAMIC_BOUNDARY 标记将提示词分为全局缓存区(约占 80%)和动态区,大幅降低了每次 API 调用的 tokenization 成本[18] - 将每轮变化的用户上下文(如 git status)作为第一条用户消息注入,而非放入系统提示词,从而保持了系统提示词缓存的稳定性,是规模化运营中杠杆最高的成本优化之一[19] 上下文压缩策略 - Claude Code 支持无限对话长度,依靠从便宜到昂贵的四级压缩策略[20] - Microcompact:每轮运行,用缓存引用替换未变的工具调用结果,成本接近零 - Snip Compact:接近 token 上限时触发,删除对话开头的消息但保留最近几轮的“受保护尾部”,无需调用模型 - Auto Compact:Snip 不够时触发,使用一次单独的模型调用总结之前的对话 - Context Collapse:超长会话的最后手段,进行多阶段分步压缩 - 核心原则是优先运行最便宜的压缩策略,大部分案例可通过零模型调用的方式处理,且“受保护尾部”的设计确保模型不会忘记刚执行过的操作[21] 权限管理系统 - Claude Code 的权限控制是一个七阶段的管道,而非简单的二元开关,每一步都有审批或拒绝的机会[24] - 权限规则使用类似 glob 的模式匹配工具名和输入,实现了精细化的控制(如“允许 git 命令和 npm test,其他的都问我”)[24] - 该设计构建了“渐进式信任”光谱,用户可从需要每个操作批准的默认模式,逐步切换到更宽松的模式[25] - 提供了 Hooks 作为逃生口,允许企业嵌入自定义脚本以构建护栏(如阻止破坏性操作、发送通知),无需修改源码[25] 重试与可靠性工程 - 重试模块(withRetry.ts)包含 823 行代码,针对各种生产环境错误设计了专门的恢复路径[26] - 针对不同错误代码的精细化处理: - 429(速率限制):检查 Retry-After 头,根据等待时间决定重试或进入长时间冷却[26] - 529(服务器过载):追踪连续错误计数,连续三次且有备选模型则切换模型,前台任务采用指数退避重试[27] - 400(上下文溢出):解析错误信息,重新计算 token 预算并设置 3,000 的最低输出下限后重试[27] - 为无人值守会话(如 CI/CD)设计了持久重试模式,支持无限重试并带有心跳机制[28] - 流式传输层具备独立的可靠性机制,如看门狗超时、停顿检测和失败回退[28] 子 Agent 与资源隔离 - Claude Code 可以生成具有独立上下文、工具和工作目录的子 Agent,父 Agent 终止会级联终止所有子 Agent,但子 Agent 不能修改父 Agent 的状态[31] - 修改代码的子 Agent 会获得独立的 Git worktree,确保每个 Agent 在独立分支上操作,避免冲突,验证通过后再合并[32] - 通过符号链接共享 node_modules 等依赖,防止磁盘空间因并行 Agent 而膨胀[32] - 任务协调采用基于磁盘的任务列表和文件锁(指数退避,30 次重试),并提供了进程内、tmux 面板、远程三种执行后端[32] 对行业与开发者的启示 - 模型是商品,环境(即第二、三、四层架构)决定 Agent 的成败和性能表现[33][34] - 构建生产级 Agent 应优先考虑工程可靠性问题,如循环崩溃点、上下文窗口溢出、并发写入冲突等,而非仅仅关注模型选择[35][37] - 具体的工程实践启示包括:使用 async generator 构建核心循环、按并发行为分类工具、按缓存效率设计提示词、采用层级压缩策略、以及在第一天就设计基础设施层[35]
Claude Code源码全拆解:55个目录、331个模块,最强Agent架构长什么样
深思SenseAI·2026-04-13 10:07