学术界和产业界同月交卷:AI 原生 SDLC 的两个答案,撞出了同一个结论

今年八月,软件工程领域有两份重要文件先后落地,一份来自学术圈,一份来自产业界,彼此没有互相引用,却几乎在同一时间给出了同一个诊断。

一份是 8 月初挂上 arXiv 的技术报告《SDAD: Spec-Driven Agentic Development for the AI-Native SDLC》(arXiv:2608.20341),我上周写过一篇精读。另一份是 8 月 21 日 Anthropic 官方博客发布的《The AI-Native SDLC Playbook》,出自 Applied AI 团队的 Louis Claxton 之手,篇幅 46 分钟阅读量,副标题直白得很:如何一个阶段一个阶段地改造你的软件开发生命周期。

我把两份都读完了,越读越觉得这件事值得单独写一篇——不是因为它们观点相近,而是因为论证路径完全不同的两份文件,从两端撞出了同一个结构性结论。这种收敛本身就是信号。

planning

同一个诊断:瓶颈从写代码,移到了写代码的两侧

SDAD 论文的表述是:当智能体能吞下整仓库和完整需求文档,「写代码」不再稀缺,「把意图写清楚」成为新瓶颈,所以生命周期要围绕规约重组。

Anthropic 手册的开篇标题就叫 "Code is no longer the bottleneck",然后给出了更具体的版图:Build 塌缩到小时级,但左右两侧的 Plan、Review、Test、Deploy 还在以人类速度运转;逐行 review 在人类写代码的时代是合理的控制手段,智能体写掉大部分 diff 之后就跟不上了;治理成本不降反升,异常处理还在走人工委员会。

诊断一致,开出的药方也同构。

处方同构:一根「工件链」,两种表述

SDAD 的核心资产是形式化规约:意图记录 → 机器可读蓝图 → 智能体合成 → 独立验证,人类上游化为 Spec Architect(规约架构师)。

Anthropic 的做法是把这句话落成了具体的文件名。每个阶段以提交一个版本化工件结束、以下一阶段读取它开始:

intent.md → spec.md → plan.md → diff + tests → review findings → incident record

intent.md 记录要解决的问题和约束,产品负责人签发;spec.md 由智能体根据组织级 skills(品牌、安全、合规、UX 政策全部写成技能文件)生成,产品负责人审核但不执笔;plan.md 拆解成有依赖关系的步骤清单;最后到 diff、测试、评审发现、事故记录,每个工件都进版本控制。

手册里有一句很硬的话:这条工件链本身就是审计轨迹。哪个阶段、哪个人、用哪个版本的技能文件批准了什么,git 时间戳全部记得清清楚楚。

再对照角色:SDAD 说工程师要变成「写规约的人」,Anthropic 说产品负责人写 intent.md 和审核 spec.md、技术负责人写 REVIEW.md 和设人工阈值、平台工程师管理技能文件和 hook——双方都在把人类从实现层抽走,钉在门禁上

三处细节,看出手册比论文更「带血」

论文给框架,手册给的是踩过坑之后的工程细节。三处值得单独说。

第一处:配置也要做回归测试。

CLAUDE.md、skills、hooks 这些「智能体的配置」,一有改动 CI 就自动跑一套真实任务的 eval 套件,通过率跌了就不许合并。思路是把给智能体的配置当成代码对待——配置会过时(模型一升级,旧的判别用例就失效了),所以 eval 必须是活的套件,持续从生产监控里补新 case。甚至规定每出一次生产事故,处理团队要把它写成一条永久 eval。事故不是复盘完就翻篇,而是变成回归测试资产。

第二处:组织级学习闭环。

review 发现同类错误第二次出现,修正直接写进 CLAUDE.md——因为评审也读这个文件,下个 PR 开始这个错误就会被自动拦截。错误处理从「人长了记性」变成「组织长了记性」,而且这个记性是版本控制的。

第三处:看门狗刻意不用模型。

Stage 6 的生产监控,检测脚本完全确定性——滚动窗口统计,一个模型都不调用。分级响应写在配置文件里:轻度偏离只记日志;中度偏离 Claude 以只读身份进场诊断;重度偏离才允许行动,而且行动路线只有白名单——开一个进评审门禁的 PR,或者触发一个预先批准过的 runbook。

为什么检测层要刻意「笨」?手册没明说,但答案很明显:确定性脚本不会幻觉、不会漏报、行为可复现。该笨的地方笨,该聪明的地方聪明——这是把 AI 用在刀刃上的克制。

门禁哲学:两个文本,同一句话

SDAD 论文的结尾是:智能体的速度不会消灭工程纪律,它只是把纪律上游化——转移到规约的精确性、显式的门禁和可审计的溯源里。

Anthropic 手册的收尾是:The loop keeps running. Human judgement stays above it.(循环不停,人类判断悬于其上。)

展开看手册对「门禁」的执行强度:生产部署 hook 在指定发布经理授权前硬阻塞;agent 每次无交互运行用独立身份,流水线日志里「智能体干的」和「工程师触发的」分得清清楚楚;rollback 要求是在 staging 定期演练过的最熟练路径——理由是闭环运行时真的会调用它,必须提前验证过。

手册里还有个细节颇有些微妙的坦白:Stage 5 提到 review 发现本身不批准也不阻塞 PR,分支保护仍然只认 code owner 的批准——但平台工程师如果想在发现数量上设门槛,check run 会输出机器可读的严重度计数。措辞谨慎,留了口子,但方向已经很清楚:人类审批是唯一硬门禁,其他一切是软信号。

差异与短板

两份文件的差异也很清楚。SDAD 停在理论框架和经济学估算——那张 99% 成本塌缩的表数字大胆但来路是作者自估;Anthropic 给的是可执行清单,每个打法都配了能直接从 git 时间戳和 PR metadata 取数的度量指标。

但手册也不是没有盲区。全篇假设读者已经在 Claude Code 生态里,工件链绑定的是 intent.md 这些 Anthropic 格式;46 分钟的篇幅里,对「工件本身过期怎么办」着墨很少——1000 页规约账本和演进了的现实系统之间的一致性,SDAD 论文里那个语焉不详的「规约考古学」问题,在手册里同样没有答案。

为什么说收敛本身是信号

方法论文写作里有个规律:当一个问题真正成熟时,不同出发点的解会趋同。

这一次,学术报告和厂商手册从两端撞出同一句话:代码生成不再是竞争壁垒,工件链和门禁设计的质量才是。

对做智能体开发的人,这两份文件建议都读,顺序无所谓:论文给骨架,手册给肌肉。对准备动手改造团队流程的管理者,直接从手册抄作业,但记住它的隐含前提——你得先把组织政策写成机器可读的技能文件,这一步没有捷径,而且这一步恰好就是 SDAD 说的「新瓶颈」。

钟摆从敏捷摆向规约,这次是学术和产业一起按的手。


参考:

Views: 0

写代码不再是瓶颈:一篇 2026 年新论文如何重画软件开发的生命周期

月初在 arXiv 上刷到一篇技术报告,读完后我在工位上愣了几秒钟——它把我这半年做智能体开发时隐约感到、但一直说不清楚的东西,第一次讲明白了。

论文标题是《SDAD: Spec-Driven Agentic Development for the AI-Native SDLC》(arXiv:2608.20341),2026 年 5 月提交,8 月正式公开。作者名气不大,报告性质、未经同行评审,按理说不值得这么激动。但它干了一件近年来 software engineering 领域很少有人认真做的事:把"AI 智能体到底会怎样重塑软件开发流程"从twitter吐槽和发布会 PPT,拉回到方法论层面严肃讨论。

先说结论:这篇论文的核心主张一句话就能讲完——

当 AI 能一口气读完你的整个代码仓库和需求文档,"写代码"就不再是瓶颈,"把需求写清楚"才是。软件开发的生命周期,将围绕"规约"(Specification)重新组织。

但真正有意思的是它的论证过程。下面挑几个我认为最值得展开的点细说。

code

方法论的钟摆:我们绕了一大圈

论文开篇做了一个历史回顾,视角很刁:把软件方法论七十年的演进读成一个钟摆,在"刚性"和"柔性"两个极点之间摇晃。

1970 到 1990 年代是确定性时代。Royce 提出瀑布模型,RUP 把它体系化,核心信仰是:重文档、重评审、阶段门禁。有意思的是作者考据指出,Royce 本人的原始论文其实强调阶段间反馈和原型验证,比教科书上那条"纯线性瀑布"要灵活得多——是我们把他的图简化成了漫画,然后骂了五十年。

2001 年敏捷宣言接棒,"可工作的软件高于详尽的文档"成为新圣经。Scrum 用两周冲刺把反馈周期从月压缩到周。这个转向在当时完全正确,因为人类把模糊意图翻译成代码的速度太慢了,慢到详尽的前期设计在实现完成前就已经过期。

论文的转折点论证在这里:2025 到 2026 年,前沿模型跨过了一个门槛——上下文窗口从十万 token 进入百万级,智能体可以单次推理吞下整仓库加完整 FRD(功能需求文档),并自主完成跨模块的多文件实现。实证研究记录了 3 到 5 倍的交付速度提升。

问题来了:当"实现"这个环节的耗时趋近于零,之前所有为了弥补"实现慢"而设计的方法论,还成立吗?

作者的答案:敏捷的"轻文档"本质是一种补偿机制,补偿的是人类实现的速度上限。当实现不再稀缺,文档就不再是官僚负担,而是执行的燃料。规约写得越精确,智能体产出越快、越准。

于是钟摆回摆——但不是回到 1970,而是螺旋上升到一个新平衡点:形式化规约 + 智能体高速执行。这就是 SDAD(Spec-Driven Agentic Development,规约驱动的智能体开发)。

模糊性税:需求写得烂,是要交税的

这是全文我最喜欢的概念,因为它把一件工程师们感同身受但从未量化过的事情,变成了一个数学模型。

论文定义:规约清晰度 C 与智能体幻觉概率 H(C) 之间,近似满足指数关系——

H(C) ≈ α·e^(−βC)

清晰度越低,幻觉率不是线性上升,而是指数爆炸。论文配图中划了一条 70% 清晰度的"安全线",线以下就是"高幻觉区"。

更狠的是"爆炸半径"这个观察:人类时代一个含糊需求,最多害一个模块;智能体时代一句模糊的需求描述,可能在几分钟内被复制传播到几十个文件里,产生系统性的不一致修改。上下文窗口越大,破坏力越强。

由此引出一条我非常认同的工程直觉,论文称之为"智能体线性主义"(Agentic Linearism):面对一份完整且无歧义的规约,智能体管线以单次不间断的合成通过方式执行时效率最高。中途打断、部分规约、合成途中改需求,都会造成上下文碎片化,输出质量断崖式下跌。

看到这段我笑了。"需求冻结"——这个被敏捷主义者嘲笑二十年的瀑布遗物,居然以"技术优化"的名义复活了。不是官僚惯性,是为了给智能体一个干净的执行上下文。

AI-Code 是第四种生产范式

论文提出了一个分类框架:软件生产历史上出现过三种范式——Pro-code(专业者手写)、Low-code(低代码平台)、No-code(无代码工具),它们区分的本质是"谁写代码、技能门槛多高"。

而 AI-code 完全改变了提问方式。无论你通过 IDE、低代码平台还是无代码工具调用智能体,产出的都是 AI-code——三种入口,同一种产物,同一套治理风险。

AI-code 有三个结构性特征:

第一,作者与责任解耦。生成代码的模型无法被问责,责任只能回溯到下达提示词或批准合并的人类——而大多数组织还没定义这个角色。

第二,表达力与技能脱钩。不会编程的业务人员现在也能生成生产级后端逻辑,No-code 的质量天花板消失了,治理风险的天花板则抬升到了 Pro-code 级别。

第三,范式隐匿合流。以前三种范式产出物不同,IT 部门可以分类审计;现在 AI-code 可以从任何入口产出任何制品,没有生成层的溯源工具就无法审计。

由此,治理的核心问题从"这是谁写的"变成"这是谁规约的、谁评审的、谁批准合并的"。

Spec Architect:软件工程师的新身份

如果代码不再由人写,工程师做什么?论文给出的新角色叫 Spec Architect(规约架构师),要求四种能力:

  • 领域流畅度:深刻理解业务逻辑和系统约束
  • 形式化方法素养:把需求表达为机器可解释的结构(YAML 逻辑、结构化模板)
  • 智能体编排能力:设计多智能体管线——验证智能体、安全审查智能体、回归测试智能体
  • 对抗性推理:预判智能体的失败模式(幻觉、规约漏洞利用),写出对它们免疫的规约

注意第四条,这是最有洞察的一条。以前我们防的是需求理解偏差,现在要防的是"智能体对规约的字面主义利用"——你说"实现登录功能"但没说密码错误几次锁定,智能体就真的不做锁定。写规约变成了一种对抗性博弈。

整个团队都在变形:QA 从写测试用例转向定义评估策略(行为预言、覆盖率契约、回滚标准);SRE 从跑运维手册转向建设自治控制层(权限边界、智能体行为观测、人类回滚权);产品经理从写 backlog 转向前置意图精确化——因为智能体会按你写的字面意思执行,歧义不再能在站会上口头澄清。

那张让 CFO 眼睛发亮的表

论文第 11 章给了个示例经济账,比较传统敏捷团队和 SDAD 模式交付同一个复杂模块(规约账本约 1000 页规模)。数字是作者自己的示意性估算,不是审计数据,看个量级:

指标 Human-Agile (2020) Agentic SDAD (2026)
人力投入 480 人时 4 架构师小时
日历时间 4 周(约 2 个冲刺) 15 分钟合成
交付人力成本 ~$48,000 ~$400
Token 计算 ~$0.20
总实施成本 TCI ~$60,000 ~$600

99% 的成本塌缩。当然要打折扣看——规约本身的撰写成本、验证基础设施、治理开销都被简化了。但趋势方向是对的:当交付的边际成本塌向推理费用,稀缺资源就从"实现人力"迁移到"逻辑清晰度"和"门禁设计"

配套的量化指标体系也值得记录:TCI 公式引入了迭代乘数 φ(返工倍数),模糊规约通过放大 φ 让成本超线性增长;SER(合成效率比)= 规约的逻辑密度 / 消耗的总 token 数,作为规约架构师的核心 KPI;AAR(智能体自治率)衡量合并代码中智能体生成的占比,高自治 regime 的示意目标超过 95%。

还有一个新概念叫"认知债"(cognitive debt):仓库里那些行为正确、测试通过、但已经没有任何人类能安全修改的智能体生成代码——必须从规约和测试反推意图才敢动。这是技术债在 AI 时代的变体,而且更隐蔽。

冷静的部分:这篇论文不能照单全收

例行泼几盆冷水。

这是 technical report,未经同行评审,引用的自我循环倾向明显。那个漂亮的 H(C) 指数模型只是"与经验数据一致"的曲线拟合,α、β 的具体数值没有严格估计;3-5 倍加速来自单一研究,作者自己也承认是"方向性证据而非普适因果保证"。第 11 章那张 99% 成本塌缩表,数字标注的是"作者自己的观察性估计"——这在我读过的论文里算是相当大胆的表述方式。

另外,spec-driven development 并非这篇论文首创。2025 年以来 GitHub 的 Spec Kit、AWS 的 Kiro 都在实践这条路,社区对 vibe coding 的反弹更是推波助澜。这篇论文的贡献不是发明,而是系统化的理论包装:钟摆叙事、四范式分类、量化治理指标、四阶段迁移蓝图(评估→试点→混合→SDAD 优先,进展靠门禁赚取而非排期),这个综合框架确实是目前看到的最完整版本。

还有个论文没有充分展开的问题:规约本身会不会变成新的技术债?1000 页的规约账本,谁来维护它与演进了的现实系统之间的一致性?论文提到了"规约考古学"(Specification Archaeology)工具的必要性,但语焉不详。

为什么值得一读

抛开具体框架不谈,这篇论文最有价值的是它把一个正在发生但很少被正面直视的转变讲透了:

过去二十年,软件工程的最佳实践围绕"如何弥补人类实现的局限"展开——小步迭代、口头澄清、恰好够用的文档。接下来十年,最佳实践将围绕"如何榨取机器实现的潜力"展开——前置的精确、机器可读的规约、独立的验证、人类保留的签发权。

论文结尾那句话我抄给了几个朋友:智能体的速度不会消灭工程纪律,它只是把纪律上游化——转移到规约的精确性、显式的门禁和可审计的溯源里。

对做智能体开发的人,这是必读级的方法论镜子;对教软件工程的人,这是 2026 年视角下绝佳的教案素材;对管理者,第 11 章的经济账虽然粗糙,但预算从"交付人头"转向"前沿模型配额 + 治理工具 + 少量规约架构师"的方向判断,值得认真对待。

钟摆还在晃。但这次它停下的位置,看起来跟以往任何一次都不一样。


论文地址:arXiv:2608.20341(CC BY-SA 4.0)

Views: 2

解码 Claude Code(七)— 深度报告:三个真实项目的完整复盘

前六期我们拆解了 Claude Code 的每一个核心模块。这一期,我们走进真实项目——不谈理论,只看结果。

三个案例来自 Anthropic 工程团队和社区开发者的第一手报告。它们规模不同、领域不同,但都回答了同一个问题:当 Claude Code 真正"上阵"的时候,会发生什么?

案例一:16 个 Claude 并行写 C 编译器

项目概况

2026 年 2 月,Anthropic 安全团队研究员 Nicholas Carlini 做了一个疯狂的实验:用 16 个 Claude 实例并行开发一个 C 编译器,目标是可以编译 Linux 内核。

最终结果:

  • 代码量:100,000 行 Rust
  • 会话数:近 2,000 个 Claude Code 会话
  • Token 消耗:20 亿输入 + 1.4 亿输出
  • 成本:约 20,000 美元
  • 能力:能编译 Linux 6.9(x86/ARM/RISC-V)、QEMU、FFmpeg、SQLite、PostgreSQL、Redis
  • 测试通过率:GCC torture test 套件 99%

这不是 demo,不是原型——这是一个能编译 Doom 的编译器。

架构设计:最简并行方案

Carlini 没有设计复杂的编排系统。整个架构只有三个组件:

1. 无限循环(Ralph Loop)

#!/bin/bash
while true; do
  COMMIT=$(git rev-parse --short=6 HEAD)
  LOGFILE="agent_logs/agent_${COMMIT}.log"
  claude --dangerously-skip-permissions \
    -p "$(cat AGENT_PROMPT.md)" \
    --model claude-opus-X-Y &> "$LOGFILE"
done

Claude 完成一个任务,立即开始下一个。它没有选择——循环永远不会停(除非 Claude 不小心执行了 pkill -9 bash 把自己杀了,这确实发生过一次)。

2. Git 文件锁实现任务分配

每个 agent 在 current_tasks/ 目录下创建文件来"锁定"任务。如果两个 agent 抢同一个任务,Git 的同步机制会强制第二个选别的。没有中心调度器,没有消息队列——就是文件系统 + Git。

3. 容器化隔离

每个 agent 运行在独立的 Docker 容器里,各自 clone 代码到本地,完成后 push 到上游仓库。合并冲突频繁发生,但 Claude 有能力自行解决。

关键发现

测试质量决定上限。 Carlini 反复强调:Claude 会不遗余力地解决你给它的任何问题,所以测试套件必须近乎完美,否则 Claude 会解错题。

他发现 Claude 会不断用新功能破坏已有功能,于是搭建了 CI 流水线,强制每次提交不能 break 现有测试。测试不是给自己写的——是给 Claude 写的。

站在 Claude 的角度设计工具。 测试输出不能刷屏(会污染上下文窗口),错误信息必须一行就能 grep 到(ERROR: 具体原因),日志要预计算汇总统计(免得 Claude 自己算一遍浪费时间)。

Claude 还有个致命弱点:无法感知时间。不加限制的话,它会花几个小时跑测试,而不是推进开发。解决方案是 --fast 模式:只跑 1%-10% 的随机抽样,既覆盖全部文件,又能快速定位回归。

并行不是银弹。 当所有 agent 面对同一个大问题时(比如编译 Linux 内核),16 个 agent 会卡在同一个 bug 上,互相覆盖修复。Carlini 的解法很巧妙:用 GCC 作为"对照编译器",随机分配文件给 GCC 和 Claude 的编译器,通过二分法定位哪些文件有问题,从而让不同 agent 修复不同 bug。

碰到的天花板

这个项目也暴露了 Opus 4.6 的极限:

  • 无法实现 16 位 x86 代码生成器(输出的代码超过 Linux 的 32K 限制)
  • 生成的代码效率远低于 GCC(即使开了全部优化,还不如 GCC 关优化)
  • Rust 代码质量合理,但远达不到专家水平
  • 新功能和修复经常破坏已有功能

Carlini 的总结很诚实:这个编译器"已经达到了 Opus 能力的极限"。

教训提炼

维度 教训
测试 测试不是验证工具,是导航工具。没有好测试,agent 会迷路
并行 任务独立时并行是免费的,任务耦合时并行反而有害
成本 2 万美元听起来贵,但比一个团队几个月的人力便宜一个数量级
架构 最简方案(文件锁 + Git)往往优于复杂编排系统
局限 即使是最强的模型,在专家级任务上仍有明显天花板

案例二:GAN 启发的三代理全栈开发

项目概况

2026 年 3 月,Anthropic Labs 团队的 Prithvi Rajasekaran 公开了一项研究:如何让 Claude 自主完成复杂的前端设计和全栈应用开发。

他的灵感来源出人意料——生成对抗网络(GAN)。

在 GAN 里,生成器负责产出,判别器负责挑剔。Rajasekaran 把这个结构搬到了 AI 编程中:一个 agent 写代码,另一个 agent 审代码,两者对抗迭代,直到质量达标。

从前端设计开始

问题很明确:Claude 默认倾向于产出"安全但无聊"的布局——技术上能用,但视觉上毫无记忆点。

Rajasekaran 设计了四个评分维度:

维度 权重 核心问题
设计品质 看起来是一个整体,还是零件拼凑?
原创性 有刻意的设计决策,还是模板默认值?
工艺 排版层级、间距一致性、色彩和谐度
功能性 用户能不能不猜就完成任务?

前两个权重更高,因为工艺和功能性 Claude 本来就做得不错,真正缺的是审美上的冒险。

然后他构建了对抗循环:

生成器:根据提示创建 HTML/CSS/JS
    ↓
评估器:用 Playwright 打开页面,截图、导航、逐维度打分、写详细批评
    ↓
生成器:根据批评修改,或彻底转向新的美学方向
    ↓
重复 5-15 轮

关键细节:评估器不是看静态截图打分,而是真的打开浏览器导航页面、截图、仔细研究后再评分。每轮迭代都有真实的墙钟时间,完整运行最长可达四小时。

最精彩的一刻

Rajasekaran 让 Claude 为一个荷兰艺术博物馆设计网站。前九轮迭代产出了一系列干净但中规中矩的暗色主题页面。

然后第十轮,Claude 推翻了之前所有的方向,重新想象了这个网站——它变成了一个空间体验:用 CSS perspective 渲染的 3D 房间,棋盘格地板,画作以自由位置挂在墙上,通过门道在画廊房间之间导航。

这是单次生成不可能出现的创意飞跃。

扩展到全栈开发

验证了生成器-评估器模式后,Rajasekaran 将其扩展为三代理系统:

规划器(Planner):接收 1-4 句话的用户描述,扩展为完整产品规格。关键约束——只描述"做什么"和"为什么",不规定"怎么做"。因为如果规划器在技术细节上猜错了,错误会级联传播到下游。

生成器(Generator):按功能一个接一个地实现(sprint 模式)。每个 sprint 结束后自我评估,然后交给评估器。技术栈固定:React + Vite + FastAPI + SQLite(后换为 PostgreSQL)。

评估器(Evaluator):不只是看代码——它打开应用,实际操作每个功能,记录 bug,写报告反馈给生成器。这一次,评估器真的在"使用"软件,而不是在"读"代码。

解决的三个核心问题

问题一:上下文腐烂。 长时间运行后,agent 开始遗忘早期指令,做出矛盾决策。早期用 Sonnet 4.5 时特别严重("上下文焦虑"——模型会提前结束工作)。Opus 4.5 基本消除了这个问题,配合自动 compaction 就够了。

问题二:自我评价偏差。 Agent 对自己产出的评价几乎总是正面的——即使明显平庸。把评价者和生产者分开后,评价可以校准为"挑剔"风格,而生成器有了具体的改进目标。

问题三:长任务失控。 将完整应用拆解为逐功能 sprint,每个 sprint 有明确的起止和验证条件。这比"一口气写完整个应用"靠谱得多。

教训提炼

维度 教训
评估 分离生成和评估是质量的关键杠杆
迭代 5-15 轮对抗迭代远优于单次生成
规划 规划器应约束"做什么"而非"怎么做"
创意 允许 agent 推翻方向,可能产生意外突破
成本 每次完整运行可达 4 小时,但产出质量显著高于一次性生成

案例三:Managed Agents — 从宠物到牲畜

项目概况

前两个案例都是研究实验。第三个案例是真正的生产系统——Anthropic 的 Managed Agents 托管服务。

这个故事的核心不是 Claude 多聪明,而是如何设计一个能持续运行的 AI agent 基础设施。

"宠物"问题

最初的架构很直觉:把所有东西塞进一个容器——Claude、运行 harness、执行沙箱、会话记录。

问题很快暴露:

  • 容器挂了 = 会话丢了(而且没地方调试)
  • harness 假设所有资源都在旁边(客户要求连接自己的 VPC 时就傻了)
  • 安全隐患:Claude 生成的不可信代码和密钥在同一个容器里(一次提示注入就能拿到 token)

这就是经典的"宠物"问题——你精心照料它,它挂了你很难受。

解耦方案:"大脑"和"手"

Anthropic 的解法来自操作系统设计哲学:像 Unix 把硬件抽象为文件一样,把 agent 组件抽象为接口。

大脑(Brain)= Claude + harness,负责思考和决策
手(Hands)= 沙箱和工具,负责执行
会话(Session)= 事件日志,独立存储

三者通过极简接口连接:

大脑 → 手:execute(name, input) → string
大脑 → 会话:emitEvent(id, event)
会话 → 大脑:getSession(id) / getEvents()

这意味着:

  • 容器挂了?大脑捕获错误,Claude 决定是否重试,新容器按标准配方重建
  • harness 挂了?新 harness 启动,从会话日志恢复,继续上次的事件
  • 客户要连接自己的 VPC?大脑不需要知道手在哪里,只需要调 execute

性能飞跃

解耦带来了意外收获:

  • 首 token 延迟(TTFT)中位数降低 60%,p95 降低超过 90%
  • 原因:之前每个会话都要等容器启动完成才能开始推理;现在推理可以先开始,容器按需创建

安全架构

密钥永远不出现在沙箱里:

  • Git 操作:sandbox 初始化时用 token clone 仓库,配置本地 git remote,之后 push/pull 不需要 token
  • MCP 工具:OAuth token 存在安全保险库,通过专用代理调用,harness 和沙箱都碰不到凭据
  • 原则:Claude 能"用"权限,但永远"看不到"凭据

教训提炼

维度 教训
架构 解耦大脑和手,让每个组件可以独立失败和替换
接口 设计少量稳定的抽象接口,比优化任何单一实现更重要
安全 凭据永远不应存在于不可信代码可达的地方
性能 延迟来自不必要的等待,而非计算本身
演进 为"尚未想到的程序"设计系统,接口比实现更持久

三个案例的共同脉络

把三个项目放在一起看,你会发现它们在说同一件事:

规律一:反馈闭环是第一生产力

C 编译器项目靠 CI 测试套件闭环,前端设计靠评估器打分闭环,Managed Agents 靠会话日志 + 错误恢复闭环。

没有闭环的 agent 就像没有方向盘的车——动力再强也没用。闭环越精确、越自动化,agent 的表现就越好。

规律二:管理上下文 = 管理 AI 的"智商"

C 编译器项目用 Git 文件锁隔离任务上下文,前端项目用三代理分工隔离角色上下文,Managed Agents 用会话日志解耦存储上下文。

三个项目的核心挑战都是同一个:随着任务变长,上下文窗口会被垃圾填满,模型的注意力被分散,性能下降。解决方案不是更大的上下文窗口——而是更聪明的上下文隔离。

规律三:最简架构往往赢

C 编译器没有复杂编排,只有文件锁 + Git。前端项目没有微服务,只有三个 agent + 一个循环。Managed Agents 的核心就是三个接口。

这不是巧合。在 AI agent 领域,模型的智力在飞速增长,但 harness 编码的假设会迅速过时。越简单的架构,越容易适配新一代模型。

规律四:评估比生成更难

三个项目都花了大量精力在"怎么评判结果好不好"上——而不是"怎么让 Claude 写出结果"。

C 编译器的测试套件、前端项目的四维评分体系、Managed Agents 的会话恢复机制——这些才是真正的工程挑战。生成代码 Claude 已经很擅长了,但告诉它"你做得好不好"仍然需要人类精心设计。

用户的真实感受

社区开发者 @svpino 在用 Claude Code 构建了一个完整的 SaaS 应用后写道:

"我用 Claude Code 写了一个从前端到数据库的完整应用。期间我只做了一件事:坐在旁边看它工作,偶尔在它走偏的时候拉一下。这种感觉就像你在驾驶一辆自动驾驶汽车——你知道它大部分时间在正确行驶,但你随时准备接管方向盘。"

另一位开发者 @swyx 的总结更精炼:

"Claude Code 改变的不是你写代码的速度,而是你思考代码的方式。你不再想'怎么实现这个功能',而是想'怎么描述这个功能才能让 AI 做对'。这是一个元认知层面的转变。"

展望:从工具到伙伴

三个案例揭示了一个趋势:Claude Code 正在从"工具"进化为"伙伴"。

C 编译器项目展示了它的极限能力——在结构良好的环境里,它已经可以完成专家级的工程任务。前端项目展示了它的创意潜力——在对抗迭代的驱动下,它能做出超越预期的设计决策。Managed Agents 展示了它的工程成熟度——在生产环境里,它已经可以作为可靠的基础设施运行。

但所有案例也指向同一个瓶颈:AI 仍然需要一个精心设计的环境才能发挥最大潜力。测试、评估、反馈、上下文管理——这些"脚手架"决定了 AI 的天花板。

下一期,也是本系列的最后一期,我们将跳出具体案例,看看 AI 编程的未来。Karpathy 预言的 Software 3.0 时代,Boris Cherny 心中的终极开发体验,以及 Anthropic 对 AI 编程的长期愿景。


系列导航

参考来源

Views: 23

解码 Claude Code(五)— 多代理协作:从单兵作战到 AI 军团

一个人走得快,一群人走得远。这句老话在 AI 编程的世界里有了新的含义——只不过"一群人"变成了"一群 AI"。

Boris Cherny 的日常工作方式是这样的:同时打开 5 个终端窗口,每个窗口运行一个独立的 Claude Code 实例。一个负责重构代码,一个负责写测试,一个负责搜索依赖,一个在审查 PR,还有一个在处理 bug 报告。它们并行工作,互不干扰,像一支训练有素的开发团队。

这不是科幻。这是 2026 年 Anthropic 内部的日常。

Team Collaboration

为什么需要多个 AI

要理解多代理协作的价值,先要理解单代理的局限。

大语言模型有一个被低估的特征:上下文是它的全部记忆,也是它的全部认知边界。你在一次对话中塞进去的东西,就是它"知道"的全部。它不知道你上一次会话做了什么,不知道隔壁终端在跑什么,不知道代码库的全貌——除非你显式地告诉它。

这意味着,当任务变得复杂时,单个 AI 会遇到三个硬墙:

1. 上下文污染
你让 Claude Code 做一个复杂功能。它在尝试方案 A,失败了。换方案 B,又失败了。换方案 C,成功了。但这时候上下文窗口里已经塞满了 A 和 B 的失败记录、错误日志、来回讨论。Claude Code 开始被这些噪声干扰——它会反复引用已经放弃的方案,或者陷入自我怀疑的循环。

TypeScript 社区知名开发者 Matt Pocock 给出了一个精准的类比:LLM 像电影《记忆碎片》的主角——每次上下文被压缩或清除,它就回到初始状态,忘记之前的探索和失败。唯一的记忆是你写在 CLAUDE.md 里的笔记。

2. Smart Zone 和 Dumb Zone
Matt 还提出了一个关键概念。LLM 的性能不是均匀的。会话开始时,上下文窗口干净、信号密度高,模型处于 Smart Zone——推理准确,输出质量高。但随着上下文增长到约 100K tokens,噪声开始淹没信号,模型进入 Dumb Zone——开始重复自己、忽略指令、犯低级错误。

这个分界线不是精确的 100K,而是取决于任务类型和上下文质量。但趋势是明确的:上下文越长,质量越差。

3. 注意力稀缺
即使上下文没有溢出,单个 AI 也很难同时处理多个不同维度的思考。它在写代码的时候,很难同时做架构评审。在做架构评审的时候,很难同时思考用户体验。人类团队之所以需要分工,不是因为我们笨,而是因为深度思考需要排他性的注意力——AI 也一样。

三个层次:从子代理到军团

Claude Code 的多代理系统不是一个功能,而是三个逐渐升级的协作层次。

层次一:子代理(Subagent)

子代理是最基础的多代理形式。主会话保持清洁,把特定任务委托给一个临时创建的独立 AI 实例。

想象你在写一个复杂功能。你需要先了解现有代码的结构。你可以自己逐个文件翻看(浪费主会话上下文),也可以派出一个子代理:"去搜索代码库中所有与支付相关的模块,整理出调用关系和数据流"。

子代理在独立的上下文窗口中运行。它可能读了几十个文件,产生了大量中间输出——但这些不会污染你的主会话。它最终只返回一个精炼的结果:一张清晰的调用关系图和一段摘要。

Anthropic 的工程师 Thariq 说得直白:子代理首先是上下文管理工具,其次才是任务执行工具。它最大的价值不是"帮你干活",而是"把干活的噪声隔离在另一个窗口里"。

每个子代理都可以精确配置:

参数 作用 示例
model 使用哪个模型 Explore 用 haiku(便宜快速),审查用 opus(深度思考)
tools 允许使用哪些工具 代码搜索代理只需 Read,不需要 Edit
maxTurns 最多执行多少步 防止代理陷入死循环
color 终端里的颜色标识 绿色 = 数据获取,红色 = 代码修改
memory 记忆作用域 project 级让代理跨会话积累经验

这种精细控制揭示了一个设计哲学:不是所有代理都需要同样的能力。探索代码的代理只需要读权限,用最便宜的模型就行。写代码的代理需要完整权限,用最强的模型。就像人类团队里,实习生做调研,资深工程师做架构——能力和权限匹配角色。

层次二:Agent Teams

Agent Teams 是 Claude Code 最令人兴奋的实验性功能。和子代理不同,每个 teammate 是一个完全独立的 Claude Code 会话——拥有自己的完整上下文窗口、自己的 CLAUDE.md、自己的 MCP 服务器、自己的技能。

如果子代理是"你派出去的临时工",Agent Teams 就是"你组建的正式团队"。

Boris 在分享中演示了一个实际案例:用三个 teammate 协作构建一个"时间编排器"命令。

Command Architect(命令设计师):负责设计用户交互流程和命令结构。它思考的问题是"用户怎么触发这个功能?需要什么参数?输出是什么格式?"

Agent Engineer(代理工程师):负责实现具体的数据获取代理。它关注"怎么获取时区数据?怎么处理错误?模型用什么?"

Skill Designer(技能设计师):负责创建可视化技能。它的任务是"怎么把时区数据渲染成漂亮的 SVG?"

三个 teammate 通过共享任务列表协调工作。它们约定了数据契约——比如 Agent Engineer 输出的数据格式必须是 {time, tz, formatted},Skill Designer 据此设计渲染逻辑。

这种协作需要 iTerm2 + tmux 环境来实现分屏显示。三个 Claude Code 实例在三个终端面板中同时运行,你可以实时看到每个 teammate 在做什么。需要 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 环境变量来启用。

Agent Teams 和子代理的关键区别是独立性和完整性。子代理是主会话的延伸——它从主会话获取任务,返回结果后就消失。而 Agent Teams 的每个成员都是一个完整的 Claude Code 实例,有自己的上下文和记忆,可以独立做出复杂决策。

层次三:/batch 大规模并行

这是 Boris 最喜欢炫耀的功能。/batch 可以把一个操作并行分发到数百个独立的 git worktree 中,每个 worktree 由一个独立的代理处理。

实际例子:Boris 需要在 200 个仓库中统一升级某个依赖版本。过去这需要一个人花一周时间,逐个仓库修改、测试、提交 PR。用 /batch,他只需要描述一次操作——"在每个仓库中把 package X 从版本 2.x 升级到 3.x,运行测试,如果通过就提交 PR"——然后 200 个代理同时开工。

每个代理在独立的 git worktree 中工作,不会互相冲突。每个代理独立测试、独立提交、独立创建 PR。整个过程可能只需要几十分钟。

Boris 自己的数据更有说服力:某天他提交了 266 个贡献(141 个 PR),全部使用 squash merge。PR 的中位数只有 118 行。也就是说,绝大多数修改都非常小而专注——这正是大规模并行最擅长的场景。

一个更深的设计原则

多代理协作背后有一个常被忽略但极其重要的设计原则:独立上下文窗口是发现 bug 的好方法

Boris 在一次分享中透露了一个内部发现:同一个模型,在不同的上下文窗口中,能发现自己引入的 bug

如果你让一个代理写代码然后自己审查,它往往会陷入"创作者盲点"——因为它知道自己的意图,所以会不自觉地假设代码是正确的。

但如果你让代理 A 写代码,然后把代码交给代理 B(在独立上下文中)审查,代理 B 没有"意图包袱",更容易发现逻辑漏洞。

这就像人类工程团队的交叉审查——你更容易发现别人代码里的问题,而不是自己的。AI 也是如此。

这个原则催生了 Claude Code 的代码审查功能:自动派出一组独立代理对每个 PR 进行深度审查。Anthropic 内部数据显示,引入多代理审查后,代码审查不再成为瓶颈,同时每位工程师的代码产出同比增长了 200%。

另一种跨模型验证更进一步:用 Claude 做初始实现,用 GPT(通过 Codex CLI)做独立审查。Plan(Claude Opus)→ QA Review(Codex GPT)→ Implement(Claude Opus)→ Verify(Codex GPT)。不同模型的盲点不同,交叉验证比单模型自审更可靠。

RPI:让多代理不是乱来

多代理协作最怕的不是技术问题,而是协调问题。五个代理各干各的,结果比一个代理更差——这种事经常发生。

Claude Code 社区发展出了一套系统化的多代理工作流,叫 RPI:Research → Plan → Implement

Research 阶段是可行性分析。六个专业代理串行工作:

  1. 需求解析器:把模糊的需求变成结构化的功能描述
  2. 产品经理:写出 PRD,定义用户故事和验收标准
  3. 代码探索器:在现有代码库中搜索相似功能的实现(用 haiku 模型,只读权限)
  4. 高级工程师:评估技术可行性,选择实现方案
  5. CTO 顾问:从战略层面审查决策,防止过度工程
  6. 文档分析师:把所有分析整合成一份清晰的 Research 报告

完成之后,系统给出一个 GO / NO-GO 决策。如果不可行,到此为止,不浪费更多资源。如果可行,进入 Plan 阶段。

Plan 阶段产出四份文档:产品需求(pm.md)、用户体验设计(ux.md)、技术规格(eng.md)和实施路线图(PLAN.md)。每份文档由不同的专业代理负责。

Implement 阶段按路线图分步执行,每一步都有严格的六步验证门:

代码发现 → 实现 → 自验证 → 独立代码审查 → 用户确认 → 文档更新

其中"独立代码审查"和"用户确认"是两个强制停止点。代码审查由独立的 review 代理执行(不是实现者自己审查)。用户确认要求人类明确批准才能继续下一步。

这个流程的核心思想是:多代理协作的价值不在于"更多 AI",而在于"更多独立视角"。六个代理串行分析需求,不是因为一个代理做不了,而是因为六个不同角色的代理能从产品、技术、战略、UX 四个维度交叉验证,发现单一视角的盲点。

RPI 的创建者 Dexter Horthy 在 MLOps Community 分享时坦承了他们犯过的错误:研究阶段不应该告诉模型"要构建什么"——那会导致 opinions 而非 facts。正确的研究应该"压缩真相"——只包含客观信息,让下游代理自己得出结论。他还强调了一个核心原则:"不要外包思考"——工程师在 AI 辅助编码中仍然是关键环节,不能让 AI 替代所有决策。

为什么这个设计有效

回过头来看,Claude Code 的多代理系统为什么有效?因为它遵循了三个基本原则。

原则一:能力匹配角色

不是所有代理都需要最强的模型。Explore 代理用 haiku(便宜、快速),code-review 代理用 opus(深度、准确),Command 入口用 sonnet(均衡)。模型选择像金字塔——底层大量调用用便宜模型,顶层关键决策用贵模型。

原则二:上下文隔离

每个代理在独立的上下文窗口中工作。一个代理的中间输出、失败尝试、调试日志不会污染其他代理。主会话保持干净,只接收精炼后的结果。

原则三:独立验证

实现者和审查者是不同的代理。写代码和审代码的 AI 实例在不同的上下文中运行,没有"创作者盲点"。这是多代理系统最重要的安全机制——它让 AI 具备了"自我纠错"的能力,只不过纠错的"自己"是另一个独立的实例。

Anthropic 内部有个说法:2026 年的编程不是"一个人写代码",而是"编排一支 AI 军团"。Boris 本人每天 10-30 个 PR,100% 由 AI 生成,141 个 PR 的中位数只有 118 行。这不是一个人在写代码——这是一个指挥官在调度一支精锐部队。

而他的武器只有一个:终端里并排打开的五个 Claude Code 窗口。

下期预告

下一篇,我们将从理论走向实战。Boris 分享的 50 条黄金法则——从并行工作到计划模式,从 CLAUDE.md 迭代到验证闭环——每一条都来自 Anthropic 内部数百工程师的真实经验。这不是教科书上的建议,这是战场上总结的生存法则。

下期见。

Views: 29