编程Agent为何能工作,又为何会崩溃

同一个模型。在网页聊天中产生幻觉的那个模型,在Claude Code中一次性交付200行功能。Codex的/goal整个解决一个issue。模型并没有突然变聪明。改变的是结构。

为何能工作

对话式AI的循环是这样的:

LLM → 人 → LLM → 人

反馈全是自然语言。概率性生成接着概率性评估。准确率以乘积方式劣化。

编程Agent的循环不同:

LLM → 生成代码 → 保存文件 → 运行测试 → pass/fail → LLM
LLM → 修改代码 → 构建 → 成功/失败 → LLM
LLM → 类型检查 → 错误消息 → LLM

循环中嵌入了确定性门。文件系统原样保存写入的内容。测试要么pass要么fail。编译器说错就是错。这些无意中充当了棘轮。

LLM是不可靠组件。但在不可靠组件上构建可靠协议是工程学的基本功。Von Neumann在1956年就数学证明了仅靠多数投票就能让嘈杂的部件执行可靠计算 (Von Neumann, 1956)。TCP在不可靠网络上构建可靠传输。RAID在不可靠磁盘上构建可靠存储。ECC在不可靠内存上构建可靠计算。

编程Agent工作的原因相同。在不可靠的LLM之上放置了确定性验证器(测试、构建、Linter、类型检查器)。SWE-agent研究表明,即使同一模型,根据Agent-Computer Interface设计的不同,性能差异巨大 (Yang et al., NeurIPS 2024)。决定成功的是topology,不是模型能力。

那为何会崩溃?

我说了它们能工作。但有时候会崩溃。为什么?

因为偶然存在的棘轮和有意识设计的棘轮是不同的。

存在无棘轮区间

当Agent修改没有测试的代码时会怎样?构建通过了,lint通过了,但功能坏了。在没有确定性门的区间,LLM进行概率性判断,而概率性判断以乘积方式劣化。

200个端点中,180个有测试,20个没有。Agent完美处理了180个,在20个中悄悄埋下bug。“差不多了,但哪里不对劲"的原因就在这里。

反馈的信息量不足

我做了一个1000个单词的排序实验。CPU:0.08ms达到100%。LLM:438秒达到97.7%。这本身就令人惊叹——纯认知达到97.7%。但真正的发现在别处。

对同一结果,仅改变反馈的级别:

反馈结果
6个错误 (99.4%)
“有错误”10个错误 (99.0%) — 恶化
“有23个错误”1个错误 (99.9%)
“6个错误,在这里”0个错误 (100%)

只告诉"错了"会导致过度修正,反而更糟。告诉错误数量就有了追踪目标,会执着地寻找。告诉位置就能完美修正。

目前大多数Agent停留在第二级。测试失败时知道"出了问题”,但不传达结构性原因。错误消息存在,但那是症状,不是原因。

盲区存在,且重复无法解决

排序实验中,LLM在R2留下了6个错误。R3中报告"无错误"。R4b中再次报告"无错误"。以相同方式遗漏了相同的6个。

不给提示,无论重复多少次,都收敛在99.4%。直到告诉"还剩6个"才终于达到100%。

编程Agent中也发生同样的事。Agent制造bug,self-review时判断"没问题",再让它修也是遗漏同一处。Huang et al.(2024)表明,没有外部反馈时,LLM自行纠正推理错误反而降低性能 (Huang et al., ICLR 2024)。这就是retry不是答案的原因。盲区是模型概率特性带来的结构性限制,而非努力不足。

乘积在规模上起作用

97.7%准确率链式执行两次:0.977² = 95.4%。三次:93.2%。十次:79.2%。

Agent修改单个文件做得很好。但让它跨100个文件重构呢?即使每步97%,100步后 0.97¹⁰⁰ = 4.8%。基本上保证失败。

这就是"vibe coding在200个端点处崩溃"的数学解释。小项目中链式次数少,概率还撑得住;大项目中乘积变得灾难性。

需要什么

工作的原因和崩溃的原因指向同一个地方:确定性验证门的有无。

现有Agent依赖偶然存在的棘轮(测试、构建、Linter)。有意识地设计它们,会更强大。

有意识设计棘轮意味着:

第一,识别无棘轮区间。没有测试的代码、没有Schema的API、没有类型的数据。Agent进行概率性判断的每个地方都是脆弱点。

第二,提高反馈的信息量。仅返回pass/fail会引发过度修正。“在哪里、为什么、实际与预期有何不同"必须以结构化形式传达。

第三,在链式步骤之间插入确定性门。一次执行10步,乘积是灾难性的;但每步都用棘轮锁定,劣化就会被重置。

LLM是惊人的生成器。它以纯认知将1000个单词排序到97.7%准确率。人类也做不到。但低于100%的一切在重复中都会崩溃。0.977的平方是0.954。

编程Agent能工作,不是因为模型聪明。是因为循环中嵌入了确定性门。崩溃是因为那些门缺失。

生成可以是概率性的。验证必须是确定性的。


出处

  1. Von Neumann, J. (1956). “Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable Components.” In Shannon, C.E. & McCarthy, J. (Eds.), Automata Studies, Annals of Mathematical Studies, No. 34, Princeton University Press, pp. 43-98.
  2. Saltzer, J.H., Reed, D.P., & Clark, D.D. (1984). “End-to-End Arguments in System Design.” ACM Transactions on Computer Systems, 2(4), 277-288.
  3. Patterson, D.A., Gibson, G., & Katz, R.H. (1988). “A Case for Redundant Arrays of Inexpensive Disks (RAID).” Proceedings of the 1988 ACM SIGMOD International Conference on Management of Data, pp. 109-116.
  4. Hamming, R.W. (1950). “Error Detecting and Error Correcting Codes.” The Bell System Technical Journal, 29(2), 147-160.
  5. Yao, S. et al. (2023). “ReAct: Synergizing Reasoning and Acting in Language Models.” ICLR 2023.
  6. Shinn, N. et al. (2023). “Reflexion: Language Agents with Verbal Reinforcement Learning.” NeurIPS 2023.
  7. Jimenez, C.E. et al. (2024). “SWE-bench: Can Language Models Resolve Real-World GitHub Issues?” ICLR 2024.
  8. Yang, J. et al. (2024). “SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering.” NeurIPS 2024.
  9. Huang, J. et al. (2024). “Large Language Models Cannot Self-Correct Reasoning Yet.” ICLR 2024.
  10. Kamoi, R. et al. (2024). “When Can LLMs Actually Correct Their Own Mistakes? A Critical Survey of Self-Correction of LLMs.” TACL, 12, 1298-1318.
  11. Cemri, M. et al. (2025). “Why Do Multi-Agent LLM Systems Fail?” arXiv:2503.13657.
  12. Arbuzov, M.L., Shvets, A.A., & Beir, S. (2025). “Beyond Exponential Decay: Rethinking Error Accumulation in Large Language Models.” arXiv:2505.24187.

相关文章

变更历史

  • 2026-05-16: 初版