
同一个模型。在网页聊天中产生幻觉的那个模型,在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能工作,不是因为模型聪明。是因为循环中嵌入了确定性门。崩溃是因为那些门缺失。
生成可以是概率性的。验证必须是确定性的。
出处
- 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.
- 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.
- 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.
- Hamming, R.W. (1950). “Error Detecting and Error Correcting Codes.” The Bell System Technical Journal, 29(2), 147-160.
- Yao, S. et al. (2023). “ReAct: Synergizing Reasoning and Acting in Language Models.” ICLR 2023.
- Shinn, N. et al. (2023). “Reflexion: Language Agents with Verbal Reinforcement Learning.” NeurIPS 2023.
- Jimenez, C.E. et al. (2024). “SWE-bench: Can Language Models Resolve Real-World GitHub Issues?” ICLR 2024.
- Yang, J. et al. (2024). “SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering.” NeurIPS 2024.
- Huang, J. et al. (2024). “Large Language Models Cannot Self-Correct Reasoning Yet.” ICLR 2024.
- 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.
- Cemri, M. et al. (2025). “Why Do Multi-Agent LLM Systems Fail?” arXiv:2503.13657.
- Arbuzov, M.L., Shvets, A.A., & Beir, S. (2025). “Beyond Exponential Decay: Rethinking Error Accumulation in Large Language Models.” arXiv:2505.24187.
相关文章
- Ratchet Pattern — 如何让智能体完成任务 — 棘轮模式的结构与原理
- 比起模型IQ,更重要的是反馈拓扑 — 反馈结构决定性能
- 约束即契约 — 合理约束让系统自由
- filefunc — 一个文件一个概念 — LLM原生代码结构
- AI思维法:以第一原理打破前提的5个步骤 — 与AI一起思考的方法
变更历史
- 2026-05-16: 初版