Claude Code架构深度解析:Agent公司借鉴路径推荐
Claude Code 核心架构分析与 Agent 公司借鉴路径
先说几个核心判断:Claude Code 本质上是一个纯本地运行、深度集成在终端里的 AI 智能体应用。光是翻一遍它的源码结构(特别是 src/ 目录下的设计),就能清楚看到 Anthropic 在构建生产级 Agent 时,背后那一整套工程化的思考。这不像那种“堆叠大模型接口 + 随便写点代码”的粗放做法,而是每一步都透着精细化运营的底色。
一、 Claude Code 核心架构剖析
1. 核心运行循环:QueryEngine
QueryEngine 是它的大脑和心脏,核心代码藏在 QueryEngine.ts 和 query.ts 里。它不只是一个简单的“接收问题-返回答案”的哑巴接口,而是内置了一个微型的任务调度器。
它的职责很明确:维护单次或多次对话的完整生命周期(也就是 Agent Loop),这套循环包括状态管理、权限控制(Permission Mode)、API 调用和 Fallback(降级重试)机制。有意思的是,它支持中途打断、等待用户授权(通过 Hook 拦截),甚至自动重试——这些复杂交互背后,是真正的生产级落地考虑。
2. 极致的上下文与记忆管理 (Context & Memory)
大语言模型最头疼的问题是什么?Context Window 的限制和 Token 成本。Claude Code 对此设计了一套非常精细的管控手段。
- Prompt Caching:它将 System Prompt 分成两层——全局静态层和会话动态层(具体看 prompts.ts 里的
SYSTEM_PROMPT_DYNAMIC_BOUNDARY)。静态层可以跨会话缓存,直接命中 Anthropic 的 Prompt Caching 能力,高频调用时的延迟和成本都能大幅降下来。这才是真正的成本意识。 - Auto Compaction(上下文压缩):当对话历史即将触及 Token 上限时(核心代码在 autoCompact.ts),系统会自动触发后台总结任务。它会把漫长的历史步骤做一次“折叠”(Context Collapse)或“微压缩”(Microcompact),只保留关键决策树和最终结论。简单说,就是防止 Token 爆炸,同时把无用的试错过程裁剪掉。
- MemDir(记忆目录):支持项目级别的记忆持久化(在
src/memdir/目录下)。Agent 可以把重要的项目背景、规范记录到特定的记忆目录里,下次启动时不用重新从头探索。这相当于给 Agent 开了一个“长期记忆”的黑板。
3. 工具生态与标准扩展 (Tool & MCP)
工具层面的设计同样很讲究。
- Native Tools:内置了大量细粒度的文件与系统操作工具,比如 BashTool、
FileReadTool、FileEditTool、GlobTool、GrepTool等。关键在于,它没有用一个笼统的“执行命令”软件包打天下,而是把每种意图拆成高内聚的单一工具。工具的精细度和容错率,直接决定了 Agent 的落地能力上限。 - MCP(Model Context Protocol):原生集成了 MCP 客户端(在
src/services/mcp/)。这意味着你可以不修改核心代码,直接通过标准化协议挂载外部数据库、API 或者其他工具集。这不是锦上添花,这是建立生态护城河的关键。 - AgentTool(子智能体):支持 Fork Sub-agent 机制。遇到耗时或需要独立探索的复杂任务时,主 Agent 可以拉起一个独立的
exploreAgent,分治解决后再汇总结果。这种“多智能体协作”的思路,比单体 Agent 处理复杂链路要靠谱得多。
4. 终端原生交互 (CLI UI/UX)
基于 React Ink 构建的 CLI 界面(代码在 src/ink/ 和 src/components/),让纯文本的终端具备了流式输出、进度条更新、组件级局部刷新的能力。它极大地缓解了 Agent 执行长耗时任务时的“黑盒焦虑”——用户不再对着屏幕干等,而是能看到思考过程、执行进度,信任感自然而然就建立起来了。
二、 普通 Agent 公司最值得借鉴的地方
别再“傻傻地”把所有历史记录塞给大模型
- 借鉴点:长文本的注意力衰减和成本是灾难性的。必须实现类似
autoCompact的滑动窗口总结机制。不仅要总结用户意图,还要把中间那些失败的 Tool Calls、冗长的报错堆栈“折叠”起来。否则对话越久,模型越困惑。
- 借鉴点:长文本的注意力衰减和成本是灾难性的。必须实现类似
全面拥抱 MCP 协议,放弃硬编码集成
- 借鉴点:传统做法是为每个 SaaS 或本地能力写一套 API 集成代码,维护成本高得离谱。未来属于 MCP——让你的 Agent 底层只实现一个 MCP Client,然后直接复用社区里成百上千的 MCP Servers(如 GitHub、Notion、Postgres 等)。这才是建立生态优势的最快道路。
工程化的细粒度工具链
- 借鉴点:对于代码编辑,不要只给大模型一个简单的
replace工具。Claude Code 的工具粒度非常细致,比如精确到Grep搜索和AST级别的编辑。工具越精细,Agent 的容错率越高,落地能力越强。
- 借鉴点:对于代码编辑,不要只给大模型一个简单的
任务的分治与 Sub-Agent 模式
- 借鉴点:单体 Agent 处理复杂链路极易产生幻觉或迷失。学习
AgentTool的思路,在主循环中遇到“探索代码库”“调试特定 bug”等子任务时,派发给一个隔离了上下文的子 Agent(甚至可以使用更便宜的模型),只把最终结果返回给主进程。分工明确,效率翻倍。
- 借鉴点:单体 Agent 处理复杂链路极易产生幻觉或迷失。学习
交互即正义:透明的思考与执行过程
- 借鉴点:用户往往不信任后台静默执行的 Agent。借鉴 React Ink 的做法,将大模型的“思考流”(Thinking)、“执行命令的实时输出”、“文件读取进度”实时呈现给用户。哪怕只是一个 Spinner,也能大幅提升信任感。黑盒是死胡同,透明才是出路。
三、 最快落地解决方案与模仿路径 (Fast Landing Solution)
如果您是一家普通的 AI Agent 创业公司,希望最快复刻或借鉴这套架构,下面这三步落地路径是最直接的选择——别绕弯路。
阶段 1:MVP 构建(1-2 周)—— 跑通核心循环与 MCP
技术选型:Node.js / TypeScript + Vercel AI SDK(或 LangChain)
核心动作:
- 别从零开始写大模型接口和流式解析,直接使用 Vercel AI SDK 提供的
streamText和原生的tools字段。 - 放弃手写业务工具。直接引入
@modelcontextprotocol/sdk。让你的系统只需要两步:连接用户的 MCP Server ——> 将工具 Schema 注入给大模型。 - 如果做 CLI 客户端,直接使用
@clack/prompts或Ink;如果做 Web,使用 Next.js 的原生流式 UI。
里程碑: 拥有一个能通过标准协议挂载工具、与大模型交互的基础 Agent 闭环。
阶段 2:体验与降本优化(2-3 周)—— 引入 Context 管理
核心动作:
- 实现 Prompt Caching:在调用 LLM 前对 Messages 数组做预处理。把不会变动的 System Prompt 和 Tools Schema 加上
cache_control标记——成本马上降下来。 - 实现 Auto Compaction:写一个 Middleware 拦截器。每次请求前计算 Token 数(用
tiktoken估算),一旦超过阈值(比如 20k tokens),立刻开一个后台子线程,用一个小模型把最早的 N 轮对话和中间的废弃试错总结成一段简要记录,替换掉原始长文本。别犹豫,这是救命的关键。 - 实现细粒度文件工具:参考 Claude Code,至少提供四个核心工具:
search_files(Glob)、search_code(Grep)、read_file(按行/分页读取)、edit_file(基于块替换)。坚决不要让 LLM 重写整个文件——那会引发无穷的幻觉和混乱。
阶段 3:复杂任务突围(1 个月)—— 引入多 Agent 分发与持久化
核心动作:
- Sub-Agent 分发机制:把主 Agent 包装成一个 Tool 给自己调用。当模型判断任务需要探索时,触发
Spawn_Sub_Agent工具,传入目标和独立上下文,阻塞主进程等待结果返回。这样主 Agent 不会被庞杂的子任务拖垮。 - 工作区记忆 (MemDir):在用户项目根目录创建一个隐藏文件夹(比如
.agent_memory/)。每次长周期任务结束后,强制大模型总结“这个项目的架构特点或踩坑记录”并写入该目录。下次启动时,自动读取这些文件并注入 System Prompt——给 Agent 装上“长期记忆卡”。 - 安全审批流 (Approval Flow):所有会导致状态变更的工具(Bash 执行、FileEdit),在执行前必须在 UI 层挂起,等待用户点击 Approve 授权。生产环境安全第一,这步不能省。
总结一下:别掉进重复造轮子的陷阱里(手写 API 对接、死板的提示词)。真正高效的道路是“基于 MCP 构建标准化扩展底座 + 精细的 Token 上下文压缩管理 + 流式透明的交互 UI”。这才是普通公司通往工业级 Agent 最快、最稳妥的路径。
