Skip to content

为什么 Claude Code 是 Agent Loop,而不只是 RAG

研究边界

本文是基于本仓库还原源码、公开 npm 包产物和已有教程章节的架构解读,不代表 Anthropic 官方内部实现说明,也不声称覆盖未公开版本。

先把问题说清楚

把 Claude Code 理解成“给代码库做 RAG,然后回答问题”,会漏掉它最关键的部分。

RAG 的核心问题是:哪些上下文应该被检索出来喂给模型?

Agent loop 的核心问题是:模型下一步要不要动手,如果要动手,调用哪个工具、带什么参数、是否需要权限、结果如何继续进入下一轮?

Claude Code 更接近第二种。它不是一次检索加一次回答,而是一个持续运转的本地执行循环。

RAG 是检索管线,Agent Loop 是执行系统

维度典型 RAGClaude Code 这种 coding agent loop
上下文来源预先索引或向量检索模型按需调用 Grep、Glob、Read 等工具
主要动作找片段、回答搜索、读取、编辑、执行命令、再判断
状态多数是请求级上下文会话历史、工具结果、权限状态、压缩摘要
风险点检索不准、上下文污染文件修改、命令执行、成本和循环失控
工程重点embedding、index、reranktool loop、permission、streaming、compaction

这不是说 RAG 没用,而是说“coding agent”这个问题比 RAG 更宽。代码助手如果要真的改项目,就必须处理执行和安全。

1. Tool loop:模型不是只输出文本

在本仓库教程中,QueryEngine 被描述为核心循环。一次用户输入进入系统后,模型可能先输出一段思考方向,然后请求工具调用,例如:

  • Grep 找某个函数或错误信息
  • Read 打开具体文件
  • Edit 修改代码
  • Bash 跑测试或构建

工具执行结果再被塞回对话,模型继续判断下一步。这个“模型 -> 工具 -> 结果 -> 模型”的闭环,才是 coding agent 的主体。

2. Permission model:本地 runtime 必须有安全闸门

RAG 系统一般只读上下文,风险主要是泄露或检索错误。Local agent runtime 会碰到更硬的问题:它可能要写文件、删文件、跑 shell、访问网络或触发 git 操作。

所以权限模型不是附属功能,而是架构核心:

  • 哪些工具可以自动执行
  • 哪些命令必须询问用户
  • 哪些路径或操作应该拦截
  • 工具执行前后是否允许 hook
  • 用户能否随时中断长任务

这也是为什么“会用工具”不等于“可以安全地当本地 coding agent”。

3. Grep/file context:代码上下文来自现场搜索

本仓库第 7 章已经讲过一个重要取舍:Claude Code 更强调 GrepGlobRead 这类本地文件工具,而不是把代码库预先变成一个向量索引。

这种方式的重点不是“没有检索”,而是检索控制权在 agent loop 里:

  1. 模型根据当前任务决定搜什么
  2. 本地工具返回精确匹配或文件内容
  3. 模型根据结果调整下一次搜索或修改
  4. 需要时再读更多文件,而不是一次塞满上下文

对 coding agent 来说,这种 file-context-on-demand 的方式更贴近开发者真实调试路径。

4. Streaming multi-turn:用户看到的是一段执行过程

Claude Code 的体验不是“等一个最终答案”。它会把模型输出、工具调用、工具结果和后续判断以流式方式推进。

这背后对应的是多轮架构:

  • API 响应可以边生成边处理
  • 检测到工具调用后暂停文本生成路径
  • 工具结果回来后继续下一轮模型调用
  • UI 层持续渲染进度,而不是只展示最终文本

这也是它看起来像“在工作”,而不只是“在回答”的原因。

5. Context compaction:长任务需要压缩记忆

Agent loop 一旦变长,工具结果、日志、文件内容和对话历史都会快速吃掉 token。单靠 RAG 不能解决这个问题,因为 agent 的历史本身也是状态。

所以 compaction 是 local agent runtime 的基础设施:

  • 清理旧工具结果,保留主线
  • 用摘要替代早期对话
  • 在压缩前后保留关键约束
  • 让长会话继续工作,而不是上下文爆掉后重开

换句话说,coding agent 的记忆不是一个静态索引,而是一条会被持续整理的执行轨迹。

市场背景:从 chat plugin 到 local agent runtime

AI coding agents 正在从“编辑器里的聊天插件”走向“本地运行时”。真正有用的 agent 需要贴近仓库、终端、权限系统和开发者工作流:

  • 它要能在当前 repo 里搜索和读文件
  • 它要能安全地修改代码和执行命令
  • 它要能把多轮工作流展示给用户
  • 它要能在上下文变长时继续保持任务主线

本仓库的独创价值不在于“复制 Claude Code”,而在于把复杂 source map 还原结果整理成一套可学习的 AI coding agent architecture 课程。读者可以从中理解 agent loop 的工程边界,再把这些思想迁移到自己的工具设计里。

结论

Claude Code 当然需要检索上下文,但它的关键不是“RAG 问答”,而是围绕本地工具、权限、安全、流式多轮和上下文压缩构建出的 agent loop。

如果只用 RAG 解释它,就像只用“文件搜索”解释 IDE。搜索很重要,但真正的产品形态来自整套 runtime。