# Learning to Verify AI-Generated Code：从 Benchmark 到生产环境的代码验证之路

> 原文链接：https://openhands.dev/blog/20260305-learning-to-verify-ai-generated-code
> 作者/来源：Xingyao Wang / OpenHands
> 阅读日期：2026-04-02

## 一句话总结
提出一种基于 trajectory-level critic model 的代码验证方法，关键发现是：仅在学术 benchmark 上训练的 critic 在生产环境中的表现甚至不如随机（AUC ~0.45-0.48），而使用生产数据（特别是 code survival 信号）训练的 critic 可达到 AUC 0.69。

## 核心论点

文章指出了 AI 开发中一个根本性的范式转变：**LLM 已经让代码生成变得廉价，真正的瓶颈转移到了验证——检查变更是否正确、是否遵循仓库规范、是否值得团队信任和合并**。OpenHands 为此构建了一个"验证栈"（verification stack），其第一层是一个 trajectory-level critic：一个小而快的模型，可以对 agent 的完整对话和动作序列进行评分。

文章最震撼的发现是 **benchmark 与生产环境之间的巨大鸿沟**。仅在学术 benchmark 数据上训练的 critic 在生产 outcome 上的 AUC 约为 0.45-0.48——比随机猜测还差。而使用生产数据训练后，以 PR merge 作为信号的 AUC 达到 0.58，以 code survival（代码存活率）作为信号的 AUC 达到 0.69。这一发现对整个 eval 领域都有深远意义：它表明学术 benchmark 的成功并不保证生产环境的有效性。

训练方法论包含三个关键步骤：**Segmentation**（将交互标准化为请求→动作→完成的片段）、**Dense Supervision Through Rubrics**（24 个可从 trace 观察的特征提供几乎 100% 的覆盖率）和 **Semi-Supervised Training**（结合稀疏的生产 outcome 信号和密集的 rubric 标注）。这种方法巧妙地解决了生产数据标注稀疏的问题。

## 关键概念

- **Trajectory-Level Critic**：对 agent 完整执行轨迹（对话、tool call、动作）进行评分的小型快速模型。支持三种操作模式：继续决策、尝试选择和性能反馈收集。
- **Code Survival（代码存活率）**：衡量生成的代码在仓库中存活多久的指标。覆盖率仅约 4%，但预测能力（AUC 0.69）显著优于 PR merge 信号（AUC 0.58，覆盖率 ~6%）。
- **Benchmark-Production Gap**：benchmark 训练的 critic 在生产环境表现不如随机的现象。根本原因是生产环境的成功信号更稀疏、更模糊。
- **Rubric-Based Dense Supervision**：24 个 trace 可观察特征（误解意图、不遵循指令、范围蔓延等），提供密集的行为质量标注，弥补生产 outcome 信号稀疏的不足。
- **Semi-Supervised Training**：结合有标签的生产数据（稀疏）和 rubric 标注（密集），将无标签片段转化为有效训练数据。
- **Best-of-N Selection**：使用 critic 引导的重排序在 Best@8 时达到 73.8% 成功率（随机基线仅 57.9%）。
- **Early Stopping**：critic 引导的提前停止策略，平均仅需 1.35 次尝试（随机需 8.0 次），效率提升显著。

## 实践建议
1. 不要仅依赖 benchmark 数据训练验证模型——必须引入生产环境的信号
2. Code survival 是比 PR merge 更好的生产 outcome 代理指标，优先考虑使用
3. 设计可从 trace 观察的 rubric 特征来弥补生产标签稀疏的问题
4. 将 critic model 集成到 agent 工作流中，实现 Best-of-N 选择和 early stopping
5. 利用 critic 的亚秒级评分速度实现交互式的人机协作
6. 关注后续的 patch-level 验证层（仓库规范、常见错误），形成多层验证栈

## 独到观点
文章最独特的贡献是用**硬数据揭示了 benchmark 与生产环境之间的验证鸿沟**——这不是理论推测而是实证结果（benchmark-trained critic AUC < 0.5）。这一发现对整个 AI agent 评估领域都是一记警钟。另一个创新是 rubric-based dense supervision 方法：通过设计 24 个 trace 可观察特征，将稀疏的生产信号转化为密集的训练监督，这种方法论可以推广到其他 agent 验证场景。Code survival 作为比 PR merge 更优的 outcome 代理指标的发现也很有启发性——它暗示"代码被合并"和"代码真正有用"之间存在重要差异。

## 与其他文章的关联
- 与 [OpenHands: Evaluating Agent Skills](28-openhands-evaluating-skills.md) 是 OpenHands 验证主题的姊妹篇，前者关注 skill 评估，本文关注代码验证
- Benchmark-production gap 的发现为 [Anthropic: Infrastructure Noise](30-anthropic-infrastructure-noise.md) 的"不要盲信 benchmark 分数"论点提供了另一个维度的证据
- Trajectory evaluation 的方法与 [LangChain: Evaluating Deep Agents](31-langchain-evaluating-deep-agents.md) 中的 trajectory 维度评估相呼应
- Self-verification 主题与 [LangChain: Improving with Harness Engineering](32-langchain-improving-with-harness.md) 中的 Build-and-Self-Verify Loop 高度相关
- [Anthropic: Demystifying Evals](29-anthropic-demystifying-evals.md) 中的 coding agent 评估方法论为本文提供了理论框架
- Rubric 评估方法与 [OpenAI: Eval Skills](27-openai-eval-skills.md) 中的 Rubric-Based Assessment 形成呼应
