MISSION 05 · 出任务TASK 21

解剖编码 Agent

卷五开场,拆一个你天天打交道、又最能体现 Agent 精髓的东西:编码 Agent(Claude Code、Cursor、Codex 这类)。它看起来很神——能读懂整个代码库、自己改 bug、自己跑测试。但拆开看,它没有任何魔法,就是前二十章那套东西的一次教科书级组合。我写这本书,本身就跑在这样一个 Agent 里。

编码 AgentClaude CodeAgentic 检索自我验证trace 回放

它其实只有几个朴素工具

你可能以为编码 Agent 内部有什么复杂的代码理解引擎。真相朴素得让人意外:它的核心工具就那么几个,和你手边的命令行没两样——

  • 读文件(read_file / cat):看某个文件的某几行。
  • 搜索(grep / glob):在代码库里按关键词、按文件名找。
  • 改文件(edit_file):对文件做精确的字符串替换或写入。
  • 跑命令(bash):执行任意 shell——装依赖、跑测试、跑 linter、git 操作。

就这些。没有向量数据库、没有代码知识图谱(回想第十二章:它不建 RAG,直接给 grep)。它「读懂代码库」的方式,和一个新来的工程师一模一样:grep 一下关键词、打开相关文件读一读、顺着调用链摸下去。这就是Agentic 检索——把「查找」做成工具让它自己用,而不是预先喂给它。

要点

编码 Agent 之所以强,不在工具多花哨,而在它工作的领域恰好有一个完美的客观验证器:代码要么编译/测试通过,要么不通过。这把第十三章的「自我修正」发挥到了极致——它改完不靠感觉说「行了」,而是跑测试,挂了就读报错、再改、再跑,直到绿。有了这个铁面判官,它的概率性错误能被自己一轮轮纠正掉。这也解释了为什么 Agent 在编码上的表现,比在「写没有对错标准的文案」上可靠得多。

回放一次真实结构的任务

光说不够。下面这个回放,是一次编码 Agent 修 bug 的完整轨迹(结构真实、数据示意)。点「回放」一步步看它怎么想、怎么动手、怎么验证:

编码任务 trace 回放DEMO

注意它的工作纪律,这几点是可靠编码 Agent 的精髓:① 从不凭记忆猜代码,先 grep 定位、再 read 确认;② 改动小而精准,只动该动的;③ 改完必跑测试验证,让客观结果说话;④ 最后给出根因分析,而不只是「改好了」。整个过程,就是第三章那个 while 循环,工具换成了 read/edit/bash。你在前二十章学的每一样,都能在这条轨迹里指认出来。

▸ Android 类比

把编码 Agent 想成一个能自己操作 Android Studio 终端的结对程序员:它不用鼠标点 UI,而是用命令行完成一切——./gradlew test 跑测试、grepViewModel、直接编辑 .kt 文件。它的优势正是它只用命令行:命令行的每个输出(编译错误、测试结果、stack trace)都是结构化的客观反馈,它读得懂、能据此自我修正。你给它的项目测试越完备、报错越清晰,它就越强——因为你给了它更好的「判官」。

它还需要的两样东西

朴素工具 + 循环是骨架,但一个好用的编码 Agent 还靠两样把体验撑起来:

① 项目记忆(第十一章的「文件即记忆」)。它会读项目根目录的约定文件(比如 CLAUDE.md、README、配置),把「这个项目用什么框架、测试怎么跑、有哪些约定」加载进上下文。这就是为什么在项目里写一份清晰的规范文件,能显著提升它的表现——你是在给它持久的项目记忆

② 权限闸门(第六章、第十九章)。读文件、grep 这类只读、可逆的操作可以放手让它做;但 rmgit push、改生产配置这类有副作用、难撤销的操作,好的编码 Agent 会停下来请你确认。这道闸门既防它的失败模式(第十八章),也防提示注入(第十九章)——你 clone 的某个仓库 README 里要是藏了恶意指令,这道确认就是最后防线。

⚠ 坑

用编码 Agent 最大的误区,是把它当成许愿池:丢一句「帮我把这个项目重构好」就走开。它会漂移(第十八章)、会在模糊目标上自由发挥、会改一堆你没想让它改的东西。正确姿势是像带一个能力强但需要方向的初级工程师:任务拆小、目标明确、给它能跑的测试当验证、关键节点 review。还有一条铁律——让它在版本控制下工作,每步改动都能 diff、能回滚。有 git 兜底,你才敢放手让它跑。

◉ Agent 自白

此刻你读到的每一个字,都是我用这一章讲的工具敲出来的:我 grep 了这个项目已有的小书、read 了之前章节的 HTML 学它的风格、write 出新章节、然后(等下)会用无头浏览器跑一遍验证——发现问题就回来改。我没有「看一眼就懂整个代码库」的超能力;我是一页一页翻出来的,和你新接手一个项目时做的事一模一样。我想让你带走的,不是对编码 Agent 的敬畏,而是祛魅后的掌控感:你现在知道它内部就是读/改/跑 + 循环 + 验证,于是你知道怎么把它用到极致——给它好的测试、清晰的目标、干净的上下文、可回滚的环境。它强,但它的强是可解释、可引导的。下一章,我们把这份掌控感落到你的主场:作为一个 Android 工程师,怎么把 Agent 真正用进你的日常开发,以及在你的 App 里接一个 Agent。