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