多轮对话中的回归累积:Vibe Coding 的真实失效模式
TL;DR
单轮 HumanEval 高分严重高估可靠性。研究将 HumanEval+/MBPP+ 改造成 8 轮需求演化链,发现 40%–73% 的任务在后续轮次丢失早轮已满足的行为,主因是 Cross-Turn Conflict(后轮代码与早轮隐含需求冲突)。唯一稳定有效的缓解是 Verification Gate——拿新代码跑早轮测试,失败则回滚重试。DeepSeek-V3 末轮质量从 75.8% → 87.9%。
核心观点:Vibe Coding 的真实失效模式不是「写不出」,而是「改坏之前对的」。评测基准必须从单轮 Pass@1 迁移到「需求保留率」。
1. 背景:单轮评测的幻象
HumanEval Pass@1 是 2023 年的指标。彼时 50% 的通过率意味着 AI 还很差,单轮表现大致能反映真实水平。
2026 年,Claude 3.5 / GPT-4.5 / Gemini 2.0 在 HumanEval 上已经突破 90%。单轮高分成了一种幻象——它在标准评测上表现优异,但在真实的长会话场景里,行为不可预测。
根本原因:单轮评测从未模拟过「需求在多轮中演化」这个真实场景。
2. 实验设计:8 轮需求演化链
研究者做了迄今最系统的多轮对话退化研究。核心设计:
- 任务池:HumanEval+ / MBPP+ 任务
- 改造方式:每轮需求有增量变化(例如第 3 轮要求修改 API 签名,第 5 轮引入并发约束),形成 8 轮需求演化链
- 规模:542 任务 × 6 模型 × 8 轮 = 26016 个实例
这个规模的意义在于:它不是几个任务跑几遍的 sample,而是系统性的统计覆盖。
3. 核心发现:40%–73% 的任务在第 2–8 轮退化
关键数据:
- 40%–73% 的任务在后续轮次丢失了早轮已满足的行为
- 主要失效机制不是「写不出」,而是 Cross-Turn Conflict——后轮代码与早轮隐含需求冲突,早轮行为被悄悄破坏
- HumanEval Pass@1 与多轮需求保留率之间几乎没有相关性
第三点尤其反直觉:你在 HumanEval 上拿 95 分,不意味着你在 8 轮 Cursor 会话里能保持 95 分的质量。单轮高分严重高估了可靠性。
3.1 Cross-Turn Conflict 的本质
「改坏之前对的」背后是一个信息传递失效问题:
- 第 1 轮:Agent 写了一个功能,满足了需求 A
- 第 3 轮:用户提出新需求 B,Agent 在满足 B 的过程中修改了某个共享模块
- 第 5 轮:这个修改破坏了第 1 轮满足的隐含需求 A(因为 A 依赖于那个被修改的模块,但 Agent 不知道这个依赖)
问题不在于「健忘」,而在于早轮需求的隐含假设没有在上下文中被显式追踪。
4. Verification Gate:唯一有效的缓解
研究测试了多种缓解策略:
- 结构化提示(让 Agent 显式追踪早轮需求)
- 需求锚定(每轮开头重述之前的需求)
- 任务分解(把多轮拆成更小的单轮)
- Verification Gate(拿新代码跑早轮测试,失败则回滚重试)
唯一稳定有效的是 Verification Gate。
原理朴素到几乎不值一提:
在接受新代码之前,先用新代码跑早轮的测试用例。失败则回滚重试,而不是继续往前改。
DeepSeek-V3 应用 Verification Gate 后,末轮质量从 75.8% → 87.9%。12 个百分点的提升,来源是一个大多数工程师认为「理所当然」的动作。
5. 对 Vibe Coding 的重新定性
Vibe Coding 的核心主张是「让 Flow 持续,不要打断」。这个主张本身没错——频繁中断会破坏创造性流状态。
但它有一个隐含前提:Flow 不会悄悄破坏之前完成的东西。
如果 40%–73% 的任务会在第 2–8 轮退化,「不要打断 Flow」本质上是在积累技术债,而不是在加速。
正确的表述应该是:Vibe Coding + Verification Gate,而不是 Vibe Coding 单独成立。
6. 评测基准的范式转移
这篇论文最重要的贡献可能是揭示了 Pass@1 作为评测指标的破产。
真正需要的新指标:
- 需求保留率(Requirement Retention Rate):多轮对话后,原有需求被满足的比例
- 回归密度(Regression Density):每轮引入的回归数量
- 冲突发现延迟(Conflict Discovery Latency):从冲突产生到被发现的时间
这三个指标还没有成为行业标准,但它们比 Pass@1 更能预测真实场景中的可靠性。
7. 可落地动作
- 在 Cursor/Windsurf 设置「每轮提交前回跑历史测试」的习惯锚点
- 自测练习:选一个 8 轮以上的历史会话,统计末轮 vs 首轮的需求保留率(人工即可)
- 储备提示词模板:「请在修改前先跑原有测试,确认不破坏后再提交」
参考文献
- Regression Accumulation in Multi-Turn LLM Programming Conversations. arXiv:2607.01855. https://arxiv.org/html/2607.01855
💬 评论
💡 使用 GitHub 账号登录 即可参与讨论