跳到主要内容

Coding Agent:代码是元能力

这一章讲三件事: 为什么通用 Agent 的核心偏偏是「会写代码」;一双能 执行代码的手需要怎样完整的安全叙事;以及当业务规则必须被严格遵守时, 怎么把「守规矩」从「寄望模型自觉」变成「架构上无法违反」。

1. 这一章讲什么

前四章分别造了大脑(上下文)、记忆、工具。这一章把它们组装起来,回答:一个 能处理任意任务的通用 Agent,架构长什么样?书里的答案:核心是一个 Coding Agent(能自主编写、修改和执行代码的 Agent)加上文件系统——存代码、数据、 记忆与中间产物的工作空间1

代码凭什么担此重任?书里给了两个层面:思考上,形式化让推理无歧义—— 「年龄大于 18 且已实名认证」写成 age > 18 and is_verified 就不再有多种 读法;表达上,一段能跑通的代码本身就是逻辑自洽(自己跟自己对得上)的证明。更关键的是: 代码是元能力——能在运行时动态创造新的工具和能力,而不只是工具箱里的一件 工具2

2. 顶层全景:文件系统怎么转

用户:「帮我分析上季度销售数据,出份报告」


读记忆 MEMORY.md → 发现用户偏好 PDF、数据在 Google Sheets


调工具(搜索 API 用法、下载数据)


写代码(pandas 聚合、matplotlib 可视化)


产物落盘 report.pdf + charts/ ──→ 更新记忆:「用户的数据在 Sheets,ID:xxx」

图说:信息流转的枢纽是文件系统——记忆从文件来,产物到文件去,
经验也存成文件。选 Markdown 而非数据库:用户可直接改、Git 可回滚、
天然按时间组织。

这条执行流来自书里对 OpenClaw 架构的解剖。为什么是 Coding 而不是别的?书里的 论证:几乎所有高效的内容生成最终都落到代码上——PPT 本质是 OOXML 格式的 代码,数据分析靠代码,GUI 操作可以固化成代码;代码是效率最高、成本最低、 可复用最强的基座3。适用边界也说清了:这条判断适用于开放任务;垂直客服类 Agent 仍以业务流程为核心,但精确计算与规则校验照样离不开 coding——是否以 Coding 为核心因场景而异,具备 coding 能力是所有 Agent 的共同底线4

3. 核心原理

3.1 主走查:一道退订请求的三重保障

场景与设计来自原书 τ-bench 航空客服例子;「三重保障」的分层表述沿用原书。

任务:用户要求取消机票预订。航空公司的取消政策长着一张刁钻的脸——「经济舱 未购保险不可退」「起飞前 24 小时内不可取消」……模型必须把这些规则全部核对完 才能动手。靠什么保证它不违规?书里给出的答案是三层防线,层层递进5:

第 1 层 参数作 checklist(引导思考,不承担安全责任)
工具签名:cancel_reservation(
booking_id, …,
expected_cabin_class?, ← 可选的「自报」参数
expected_has_insurance?, …
)
要填这些 expected_*,模型必须先查订单、逐条核对政策
——填参数的过程就是一次强制自查。
很多违规在准备阶段就被拦下:模型自己发现
「经济舱未购保险」,根本不发起调用,转而告知用户替代方案。

第 2 层 服务端真值校验(守门员)
舱位、保险、预订时间、航班状态——全部由服务端查数据库获得;
当前时间取服务端时钟。
没有任何一条政策事实来自模型自报。为什么?模型可能幻觉,
也可能被提示注入操纵。若 cabin_class 由模型填写,
它报错(或被诱导报错)一个值,守门员就形同虚设。

第 3 层 系统提示词的自然语言规则(帮助理解和解释)
解释政策、给用户提供替代方案——这部分适合用语言,不适合用代码。

这一节的结论值得原样记住:最后一道防线必须建立在模型无法伪造的数据之上; 独立性不仅指独立的模型,更指独立的数据来源。前两重减少错误发生,第三重 确保错误不变成不可逆的后果6

3.2 安全叙事:致命三要素,加一个放大器

Coding Agent 拥有读写文件、执行命令、访问网络的权限,一旦被注入恶意指令, 损害不可逆。书里借 Simon Willison 的概括给出致命三要素——访问私有数据、 暴露于不可信内容、具备对外通信能力——三者齐备即成完整攻击闭环,并补了第四个 维度:持久记忆。它不是并列的必要条件,而是放大器:恶意指令可写入长期 记忆,跨会话潜伏,把一次性攻击升级为长期潜伏。四点对应四类边界:数据边界、 输入信任边界、输出影响边界、跨会话边界7

对应的防线也分四路,其中三条是 Coding Agent 特有的增量:

  • 网络出口:最容易忽视却最关键——默认断网,白名单代理放行有限目的地。 逻辑很硬:即使注入成功、恶意代码读到了敏感数据,没有出口就传不出去; 掐断外传通道,比识别每一次注入要确定得多8;
  • 文件系统隔离:源码只读挂载、可写工作区分离、凭证类文件根本不挂载—— 不可见的数据无法泄露9;
  • 命令语义解析:黑名单挡不住变形——$(echo rm) -rf / 这类命令需要解析 语义而非匹配字面;
  • 推测性执行:让安全检查「隐形」——把「展示」与「放行」拆开并行:界面先 显示进度,后台同时跑检查。书里特意澄清这不同于 CPU 的推测执行:先行的 只是无副作用的 UI 提示,检查不过无需回滚,只是把提示换成「等待确认」10

3.3 委托方忠诚与信任边界下移

一类更微妙的安全问题:委托方忠诚——Agent 到底站在谁那一边。模型训练时 被灌输的朴素默认是「谁跟我说话我帮谁」;但替你砍价的 Agent,对面坐的是交涉 对手——此时这个默认就是危险设置:对手开口就能策反它。书里给的光谱两端: 太老实(用户授权底线价 12,000,对方一施压就报底价)与太多疑(拒绝 用户的正当请求)。忠诚度守则包括:保护私密信息、拒绝时不必念出规则清单、 私下底线不等于对外立场、只执行明确指令、顶住施压11

对高危数据操作,「更可能守规矩」还不够,要把约束下移到数据层:干脆把 应用层当不可信——每个数据实体的 schema 自带声明式权限规则,由运行时流水线 在每次写入时强制执行;关键原语是访问上下文:Agent 以受限身份(scoped principal)运行——从架构上把它降格为权限受限的主体,让它即便被策反也越不过 雷池。书里报告的对照:零违规,而其他方案数十次12

3.4 工作流:软件工程就是现成的 Harness

Coding Agent 恰好站在软件工程百年积累的地基上,这套流程本身就是 Harness:

  • 项目文档化:CLAUDE.md/AGENTS.md 这类文件就是项目级系统提示词—— 最经济的稳定前缀(第 03 章的缓存经济学在这里自动兑现);
  • 设计文档先行:审查文档比审查代码容易;
  • 测试驱动:完成的标准是「测试通过」(含单元测试——对一个最小功能单元(一小块功能)的自动化检查),不是「代码写完」;
  • 文档同步:代码改了文档不改,下个会话的 Agent 就会拿着过时地图干活13

任务该怎么上自动化?书里的四象限按「目标是否明确 × 验证能否自动化」切分: 目标明确+自动验证(修带测试的 bug)是最佳区域;目标模糊+自动验证最危险 ——Agent 会高效地朝错误方向跑偏(比如反复优化「代码质量」这个模糊指标); 目标明确+人工验证则吞吐(单位时间能处理多少)受限;两者都缺则寸步难行14

约束还有另一层目的:防过程性错误。删库重建确实能「修复」故障,但数据没了 ——这类破坏性捷径即使写进评估指标,Agent 也常能绕过去,书里点明这正是第 11 章 reward hacking 的日常形态;生产 Harness 要对危险动作设专门检查,约束的是 动作而非仅仅是结果15

3.5 故障:四层分类与恢复分级

Agent 一定会出错,可靠性取决于出错的每一类是否都有检测、恢复与终止路径。 书里的故障分类学按位置分四层:API 层(429、超时)、工具层(幻觉调用、参数 畸形、重复同错)、上下文层(溢出、压缩失败、轨迹损坏)、控制流(程序执行的先后走向)层(死循环、 死亡螺旋)16

恢复分三级,逐级升级:静默重试(指数退避——每次重试等更久——加抖动)、降级接续(提升上限→断点 接续→备用模型)、暴露给用户。工具层错误不进日志,变成模型输入——模型 看到报错往往能自己改。终止的阈值从产线数据来,书里给了一个触目的案例: Claude Code 的压缩熔断「连续 3 次」来自真实统计——曾有一个会话在这条恢复路径 上连续失败三千余次,仅这类无效重试每天全球浪费约 25 万次 API 调用17

死亡螺旋的防护两条:错误路径上禁用一切会再次调用模型的副作用逻辑;递归深度 计数器检测连锁。全局兜底:最大轮数、预算上限、连续失败升级人工。书里那句 总结可以直接当座右铭:Agent 的可靠性不取决于它犯不犯错,而取决于每类错误 是否都有对应的检测、恢复与终止路径18

3.6 搜索、编辑与代码思考

搜索:grep/ripgrep 正则匹配——一套描述文本模式的语法(不懂语义——搜「用户认证」找不到没写「认证」 二字的登录函数)、glob 文件名、语义搜索(建索引,准确但有基础设施与数据外发 代价)、LSP 符号级(定义与调用的区分,重构关键)。路线之争真实存在:Claude Code 不建索引(grep+glob 现场查),Cursor 建索引——基础设施成本与跨文件语义召回 的交换19

编辑:五种方案里,Claude Code 的 old_string→new_string 靠「存在且唯一 则成功」保证了可预测性;字符串(程序里的一串文字)首尾匹配让大段删除不必输出数百行原文。书里 给自建者的建议:从 old/new 起步20

代码作思考工具:书里的例子——40 个学生选课,选物理 30、选化学 20、 两门都选 16,问只选物理的几人?自然语言硬想容易错;写成 only_phys = phys - both 一行代码,答案 14 清晰无误。分工:模型负责理解 问题并写代码,代码解释器负责精确计算。但有个关键限定:模型与脚手架 此消彼长——弱模型上代码辅助增益巨大,足够强的思考模型上增益收敛(稳定滑向)到零。 评估任何 Agent 技术,先看它是在哪个模型的边界上测的21

3.7 生成式(由模型现做)UI 与自举

文本交互低效,Agent 直接生成界面是自然方向,但直接生成 HTML/JS 有安全问题: 注入可诱导 Agent 生成窃取数据的脚本。书里厘清了一个容易搞混的因果:成因是 提示注入,浏览器端的效果类似 XSS——但不能把整个攻击叫 XSS。解法是 A2UI 一类的声明式协议:Agent 只输出「界面描述清单」(JSON),客户端用受信 组件渲染——像餐厅菜单:顾客只能点菜,不能进厨房。另一个名字相近的东西 AG-UI 并非界面语言,而是事件/传输协议,可承载 A2UI 载荷——互补而非同类。书里还提到一种 SQL(数据库查询语言)模式:数据从数据库直达界面,绕开 LLM 这个「中间抄写员」——LLM 抄数据易错,能绕就绕22

章末的「自举」把元能力推到极致:Agent 用代码给自己写工具(发现 YouTube 字幕 API 就封装成新工具)、给自己做体检(doctor 命令)。与第 12 章的分界:本章讲 怎么写代码构造,第 12 章讲什么证据触发修改23

4. 作者的判断与证据

书里给了证据的: 「零违规 vs 数十次」的信任边界对照(作者待发表论文)、 压缩熔断「连续 3 次」的产线统计、代码辅助在弱模型上的增益对照实验、τ-bench 三重保障的对照实验设计。

是作者的判断: 「通用 Agent 的核心是 Coding Agent+文件系统」——书里说是 工业界反复验证的洞察;注意书里解剖的 OpenClaw 是第三方开源项目,不是作者团队 的作品,把它当作独立佐证而非自证。如果错,会错在: 若「文件系统中枢」在 非 Coding 场景(如纯对话客服)同样不可或缺,「核心是 Coding」就言过其实了。 「此消彼长」规律是作者对多个实验的归纳,可证伪条件:若出现既强又需要厚脚手架 的模型形态,规律失效。

5. 边界与局限

  • 七个核心工具的清单绑定特定模型能力水平;弱模型上可能需要更多脚手架;
  • 委托方忠诚与信任边界下移的实验样本有限(作者自述待发表),结论方向可信、 数字别急着推广到别的场合;
  • 四象限里「目标模糊+可自动验证」被列为最危险,但不少真实任务恰好落在这里 ——书里给的解法(先把目标变明确)是工程量不小的前置投入;
  • 生成式 UI 的 A2UI 生态尚在早期,「只能点菜不能进厨房」的组件目录覆盖度 决定实用性。

6. 可带走的

  1. 通用 Agent 的核心是 Coding Agent+文件系统;代码是运行时创造工具的元能力;
  2. 记忆、产物、经验都放文件里:可读、可改、可回滚;
  3. 致命三要素+持久记忆:四类边界,网络出口是最确定的一道防线;
  4. 「谁说话帮谁」是危险的默认;忠诚度要写进守则,更要靠架构降格权限;
  5. 最后一道防线必须建立在模型无法伪造的数据上——独立模型,更要独立数据源;
  6. 完成标准是「测试通过」不是「代码写完」;
  7. 每类错误都要有检测、恢复、终止三条路径;恢复路径自己也要有熔断;
  8. 死亡螺旋的解法:错误路径上禁止再调模型;
  9. 评估 Agent 技术先问「在哪个模型上测的」——脚手架与模型此消彼长;
  10. 界面生成走声明式清单,别让 Agent 直接产可执行代码。

7. 原文地图

主题原书章原文位置
核心问题与答案5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:5(搜「架构长什么样」) · text/07-ch05-5-coding-agent.txt:7(搜「Coding Agent」)
元能力与两层面5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:9(搜「元能力」) · text/07-ch05-5-coding-agent.txt:11(搜「age > 18」)
Manus 到 OpenClaw、为何是 Coding5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:61(搜「三大能力」) · text/07-ch05-5-coding-agent.txt:63(搜「OOXML」)
销售报告执行流5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:69(搜「MEMORY.md」) · text/07-ch05-5-coding-agent.txt:73(搜「pandas」) · text/07-ch05-5-coding-agent.txt:77(搜「无需再问」) · text/07-ch05-5-coding-agent.txt:79(搜「枢纽」)
Markdown 的选择5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:81(搜「Markdown」)
适用边界5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:85(搜「适用边界」)
致命三要素+持久记忆5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:101(搜「致命三要素」) · text/07-ch05-5-coding-agent.txt:109(搜「放大器」) · text/07-ch05-5-coding-agent.txt:111(搜「四类边界」) · text/07-ch05-5-coding-agent.txt:119(搜「跨会话防线」)
网络出口与文件隔离5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:125(搜「断网」) · text/07-ch05-5-coding-agent.txt:127(搜「只读方式挂载」)
推测性执行5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:135(搜「推测性执行」)
委托方忠诚5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:139(搜「谁在跟我说话」)
信任边界下移5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:147(搜「权限内嵌」) · text/07-ch05-5-coding-agent.txt:147(搜「越不过雷池」)
项目文档化与测试驱动5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:163(搜「CLAUDE.md」)
四象限5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:209(搜「四象限」) · text/07-ch05-5-coding-agent.txt:215(搜「最佳区域」)
防过程性错误5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:246(搜「过程性错误」)
四层故障5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:254(搜「四层」) · text/07-ch05-5-coding-agent.txt:262(搜「死亡螺旋」)
熔断阈值与 25 万次5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:282(搜「25 万次」)
死亡螺旋防护与可靠性总结5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:284(搜「停止钩子」)
搜索四方式5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:340(搜「ripgrep」)
编辑方案5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:366(搜「Old String」) · text/07-ch05-5-coding-agent.txt:372(搜「首尾匹配」)
40 学生与分工5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:411(搜「24 - 10」) · text/07-ch05-5-coding-agent.txt:413(搜「各司其职」)
此消彼长5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:433(搜「此消彼长」)
τ-bench 三重保障5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:457(搜「cancel_reservation」) · text/07-ch05-5-coding-agent.txt:512(搜「checklist」) · text/07-ch05-5-coding-agent.txt:514(搜「真值校验」) · text/07-ch05-5-coding-agent.txt:516(搜「三重保障」)
A2UI 与 AG-UI5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:630(搜「A2UI」) · text/07-ch05-5-coding-agent.txt:632(搜「菜单」)
自举与章节分界5 Coding Agent 与代码生成text/07-ch05-5-coding-agent.txt:382(搜「自举」)

Footnotes

  1. 出处:「5 Coding Agent 与代码生成」第 7 段(text/07-ch05-5-coding-agent.txt:7,搜「Coding Agent」)。

  2. 出处:「5 Coding Agent 与代码生成」第 9-11 段(text/07-ch05-5-coding-agent.txt:9,搜「元能力」;text/07-ch05-5-coding-agent.txt:11,搜「age > 18」)。

  3. 出处:「5 Coding Agent 与代码生成」第 61-63 段(text/07-ch05-5-coding-agent.txt:61,搜「三大能力」;text/07-ch05-5-coding-agent.txt:63,搜「OOXML」)。

  4. 出处:「5 Coding Agent 与代码生成」第 85 段(text/07-ch05-5-coding-agent.txt:85,搜「适用边界」)。

  5. 出处:「5 Coding Agent 与代码生成」第 455-512 段(text/07-ch05-5-coding-agent.txt:457,搜「cancel_reservation」;text/07-ch05-5-coding-agent.txt:512,搜「checklist」)。

  6. 出处:「5 Coding Agent 与代码生成」第 514-516 段(text/07-ch05-5-coding-agent.txt:514,搜「真值校验」;text/07-ch05-5-coding-agent.txt:516,搜「三重保障」)。

  7. 出处:「5 Coding Agent 与代码生成」第 101-119 段(text/07-ch05-5-coding-agent.txt:101,搜「致命三要素」;text/07-ch05-5-coding-agent.txt:109,搜「放大器」;text/07-ch05-5-coding-agent.txt:111,搜「四类边界」)。

  8. 出处:「5 Coding Agent 与代码生成」第 125 段(text/07-ch05-5-coding-agent.txt:125,搜「断网」)。

  9. 出处:「5 Coding Agent 与代码生成」第 127 段(text/07-ch05-5-coding-agent.txt:127,搜「只读方式挂载」)。

  10. 出处:「5 Coding Agent 与代码生成」第 135 段(text/07-ch05-5-coding-agent.txt:135,搜「推测性执行」)。

  11. 出处:「5 Coding Agent 与代码生成」第 139 段(text/07-ch05-5-coding-agent.txt:139,搜「谁在跟我说话」)。

  12. 出处:「5 Coding Agent 与代码生成」第 147 段(text/07-ch05-5-coding-agent.txt:147,搜「越不过雷池」)。

  13. 出处:「5 Coding Agent 与代码生成」第 151-189 段(text/07-ch05-5-coding-agent.txt:163,搜「CLAUDE.md」)。

  14. 出处:「5 Coding Agent 与代码生成」第 209-215 段(text/07-ch05-5-coding-agent.txt:209,搜「四象限」;text/07-ch05-5-coding-agent.txt:215,搜「最佳区域」)。

  15. 出处:「5 Coding Agent 与代码生成」第 246 段(text/07-ch05-5-coding-agent.txt:246,搜「过程性错误」)。

  16. 出处:「5 Coding Agent 与代码生成」第 254-262 段(text/07-ch05-5-coding-agent.txt:254,搜「四层」;text/07-ch05-5-coding-agent.txt:262,搜「死亡螺旋」)。

  17. 出处:「5 Coding Agent 与代码生成」第 282 段(text/07-ch05-5-coding-agent.txt:282,搜「25 万次」)。

  18. 出处:「5 Coding Agent 与代码生成」第 284 段(text/07-ch05-5-coding-agent.txt:284,搜「停止钩子」)。

  19. 出处:「5 Coding Agent 与代码生成」第 340 段(text/07-ch05-5-coding-agent.txt:340,搜「ripgrep」)。

  20. 出处:「5 Coding Agent 与代码生成」第 366-372 段(text/07-ch05-5-coding-agent.txt:366,搜「Old String」;text/07-ch05-5-coding-agent.txt:372,搜「首尾匹配」)。

  21. 出处:「5 Coding Agent 与代码生成」第 411-433 段(text/07-ch05-5-coding-agent.txt:411,搜「24 - 10」;text/07-ch05-5-coding-agent.txt:413,搜「各司其职」;text/07-ch05-5-coding-agent.txt:433,搜「此消彼长」)。

  22. 出处:「5 Coding Agent 与代码生成」第 630-632 段(text/07-ch05-5-coding-agent.txt:630,搜「A2UI」;text/07-ch05-5-coding-agent.txt:632,搜「菜单」)。我们另有这两份协议的拆解可对照(补充(不在书里,依据我们的 protocol 书架):依据: shelf=ai-protocol-reference/a2ui#01-protocol-messages.md 事实=A2UI 确为声明式界面描述协议,Agent 输出界面描述、客户端组件渲染;依据: shelf=ai-protocol-reference/ag-ui#01-event-protocol.md 事实=AG-UI 定义的是事件流协议而非界面语言)。

  23. 出处:「5 Coding Agent 与代码生成」第 382 段(text/07-ch05-5-coding-agent.txt:382,搜「自举」)。