论文精读

论文精读:NL2Repo-Bench — 从自然语言到完整代码仓库,Coding Agent 的长程生成评测

精读字节跳动 Seed 联合南大、北大等提出的 NL2Repo-Bench:首个端到端仓库生成基准,给一份需求文档从零构建完整 Python 库。104 个任务、9 个领域、严格 pytest 验证。Claude 4.5 最高 40%,GPT-5 仅 22%,暴露了长程规划、架构设计和自主执行的巨大 gap。

Coding Agent 评测基准 NL2Repo 仓库生成 长程规划 ByteDance Seed Claude GPT-5

论文:NL2Repo-Bench: Towards Long-Horizon Repository Generation Evaluation of Coding Agents 作者:ByteDance Seed、M-A-P、2077AI、南京大学、北京大学等 发布:2025-12(v1),2026-01(v2) 代码:GitHub


一句话总结

给 Agent 一份自然语言需求文档和一个空文件夹,要求从零构建完整的 Python 仓库并通过原始 pytest 测试。最强的 Claude 4.5 也只能通过 40% 的测试,GPT-5 仅 22%。


一、为什么需要这个基准

现有 Coding Agent 基准的能力评测谱系是这样的:

函数级              文件级              仓库级(修复)           仓库级(生成)
HumanEval/MBPP  →  CrossCodeEval  →  SWE-bench/Commit0  →  NL2Repo-Bench
  ✅ 已饱和            ✅ 接近饱和          ⚠️ 进展中              ❌ 新前沿
基准输入任务输出本质
HumanEval函数签名 + docstring写一个函数一段代码补全
SWE-bench代码仓库 + issue修一个 bug一个 patch修复
PaperBench论文 PDF复现实验代码+实验结果复现
NL2Repo-Bench仅自然语言文档从零构建完整仓库可安装的 Python 包创建

SWE-bench 给了现成的代码仓库让你改,PaperBench 给了论文让你实现——但现实中很多开发工作是”从一份需求文档开始,写出完整的项目”。NL2Repo-Bench 填补的就是这个空白。

核心区别:其他基准都提供了某种形式的代码先验(已有仓库、函数签名、代码框架),NL2Repo-Bench 什么都不给——空文件夹 + 需求文档 = 你的全部起点。


二、任务定义

输入

一份标准化的自然语言规格文档(平均 ~18,800 tokens),包含四部分:

  1. 项目描述:整体功能和设计目标
  2. 支持信息:依赖关系、环境要求
  3. API 使用指南:外部接口的使用示例
  4. 实现节点:内部架构和模块划分的详细描述

输出

一个完全可安装的 Python 库——不是代码片段,不是 notebook,而是可以 pip install 的完整包。

评估

在隔离 Docker 容器中运行目标仓库的原始 pytest 测试套件。没有 LLM Judge,没有人工评分——测试过了就是过了,没过就是没过。

这使得 NL2Repo-Bench 的评估完全确定性,不存在评分偏差问题。


三、构建方法

3.1 仓库选取

从 GitHub 筛选 Python 开源仓库,准入门槛:

维度标准
活跃度近 3 年内有更新
权威性≥10 GitHub Stars
完整性包含 pytest 测试套件,且源码能通过自测
规模300–120,000 LOC
代表性覆盖 9 个领域

3.2 需求文档生成——逆向工程

这是构建方法中最巧妙的部分:

现有仓库代码
     ↓
AST 静态扫描(提取所有 API 签名:类、函数、参数)
     ↓
逐 API 生成详细描述
     ↓
组装为标准化需求文档
     ↓
人工专家 + AI 工具双重校验

关键操作:

  • AST 辅助注释:先用 AST 解析器扫描目标仓库提取全部 API,再逐一生成描述,确保文档覆盖所有公开接口
  • 静态覆盖率验证:自动检查文档是否遗漏了 API
  • 四阶段 QA:人工文档审核 → 静态工具检测 → 镜像环境验证 → 预实验验证(用 SOTA Agent 跑一遍排除环境歧义)

3.3 任务统计

维度数据
总任务数104
领域覆盖9 类:Web 开发、测试、工具库、ML、数据处理、数据库交互、网络工具、批处理、系统工具
难度分布Easy(≤1,500 LOC)26 个 / Medium(1,500–4,000 LOC)46 个 / Hard(≥4,000 LOC)32 个
平均输入~18,800 tokens
平均输出数千行代码,多文件结构

四、实验结果

4.1 主实验

在 OpenHands-CodeAct Agent 框架下评估(部分模型同时在 Cursor-CLI 和 Claude Code 下测试):

模型框架总体通过率Pass@1EasyMediumHard
Claude-Sonnet-4.5Claude Code40.2%351.844.525.1
Claude-Sonnet-4.5OpenHands39.9%355.343.021.4
Claude-Sonnet-4.5Cursor39.2%452.941.424.8
Claude-Sonnet-4OpenHands37.0%553.141.316.1
Gemini-3-proCursor34.2%344.940.916.8
DeepSeek-V3.2OpenHands27.6%143.129.112.9
Kimi-K2OpenHands22.7%340.820.211.6
GPT-5OpenHands21.7%138.420.79.6
Qwen3-InstructOpenHands17.9%134.715.28.9
GLM-4.6OpenHands17.5%234.415.56.5
Qwen3-thinkingOpenHands13.8%125.011.36.5

几个关键数字:

  • 最强的 Claude 4.5 也只有 40%,Hard 任务降到 25%
  • Pass@1(完全通过所有测试)最多只有 5 个——104 个仓库里只有不到 5% 能完美复现
  • Claude 在三个不同框架下表现几乎一致(~39-40%),说明瓶颈在模型本身而非框架

4.2 GPT-5 的”协作偏差”

GPT-5 的 21.7% 低于预期。分析发现原因不是能力不行,而是行为模式不对:

指标Claude 4.5GPT-5
平均交互轮数180+78.4
早退率低高

GPT-5 倾向于过早停止并等待用户输入——它更像是一个”协作编程助手”而非”自主开发者”。这暴露了一个有趣的 alignment 副作用:为了在人机协作场景中表现好而做的对齐训练,反而损害了完全自主执行的能力。

4.3 Thinking 模型的”过度自信”

Qwen3-thinking 表现最差(13.8%),原因出人意料:

指标Qwen3-thinking
早退率49.0%
未完成率46.2%

将近一半的任务 Agent 自己觉得”做完了”就停了,但实际远未完成。分析认为是 thinking 机制导致了“幻觉验证”——模型在内部推理中误以为代码已经通过测试,但从未实际运行验证。

4.4 消融实验

轮次限制:性能随交互轮数增加而提升,但在约 200 轮后饱和。瓶颈不在步数,在语义理解和架构规划。

开卷考试(提供测试用例):Claude 4.5 从 40.2% → 59.4%。即使告诉你”答案长什么样”,依然有 40% 做不到——说明核心困难不是”不知道要做什么”,而是”做不到”。


五、工具使用行为分析

论文对 Agent 的工具使用模式做了深入分析,这部分非常有洞察:

高性能 Agent 的行为模式

编辑代码 (str_replace_editor) → 运行测试 (execute_bash) → 分析结果 → 编辑修复 → 再测试
                    ↑                                                        ↓
                    └──────────── 测试驱动开发(TDD)循环 ────────────────────┘
  • 使用 task_tracker(规划工具)的频率与性能正相关(r=0.711)
  • 高性能模型表现出强烈的编辑-测试交替循环,类似人类的 TDD 模式

低性能 Agent 的行为模式

编辑 → 编辑 → 编辑 → 编辑 → ... → 终于想起来跑一下 → 全面崩溃
  • 连续多次编辑而不做中间测试,错误层层累积
  • 缺乏系统性规划,大量轮次浪费在无意义的文件导航上

启示:未来 Coding Agent 的训练应该强化规划能力和 TDD 循环模式——不是写更多代码,而是更频繁地验证。


六、与其他基准的定位对比

维度SWE-benchPaperBenchNL2Repo-Bench
输入先验完整代码仓库 + issue论文 PDF仅自然语言文档
任务类型修 bug复现论文从零构建
代码先验有(现有仓库)无(但有论文指导)完全没有
评估方式回归测试LLM Judge严格 pytest
核心挑战定位 + 局部修改理解 + 全栈实现架构设计 + 长程一致性
SOTA~65%(Claude)~21%(Claude)~40%(Claude)

NL2Repo-Bench 比 SWE-bench 难在没有代码先验——不是在别人的代码里改几行,而是从头写整个项目。比 PaperBench 简单在有清晰的需求文档——不需要从论文中提炼需求。

它占据了一个独特的生态位:给定明确需求、从零到一构建完整系统——这恰好是日常开发中最常见的场景之一。


七、局限与思考

论文自身的局限

  1. 仅限 Python:所有仓库都是 Python 项目。Java/Go/Rust 等语言的仓库生成可能面临不同挑战(强类型系统、编译等)
  2. 仓库规模受限:最大 120K LOC,而真实工业项目动辄百万行
  3. 需求文档质量过高:逆向工程生成的文档比真实需求文档完整得多——实际开发中的需求往往模糊、不完整、自相矛盾
  4. 单人场景:评测的是单 Agent 独立开发,不涉及多人协作

引发的更大问题

Coding Agent 的三个层次:

Level 1:写函数(HumanEval)        → 已基本解决
Level 2:改代码(SWE-bench)        → 快速进展中
Level 3:建项目(NL2Repo-Bench)    → 刚刚开始
Level 4:维护演进(持续开发/重构)   → 完全空白

NL2Repo-Bench 打开了 Level 3 的大门。但真实开发中更难的是 Level 4——一个项目创建后需要持续维护、迭代需求、重构架构。这个方向目前没有任何基准。

从”写代码”到”做工程”的范式转变:

这篇论文最大的价值不是基准本身,而是它提出的思维转变——评测 Coding Agent 不应该只看”能不能写对一段代码”,而应该看”能不能做好一个项目”。后者涉及:

  • 架构设计能力(不是给你设计好的,你自己想)
  • 长程规划能力(不是一步到位,需要规划几十个文件的开发顺序)
  • 自我验证能力(不是写完就完了,要自己测自己改)
  • 一致性维护能力(文件 A 的修改要和文件 B 的接口对得上)

这些能力在 HumanEval 和 SWE-bench 中几乎完全不可见。


八、关键结论

  1. 仓库级生成是 Coding Agent 当前的真正前沿——函数级和修复级已经接近饱和,从零构建才是下一个能力瓶颈
  2. 40% 是当前天花板——即使是最强的 Claude 4.5 也只能通过 40% 的测试,Hard 任务降到 25%
  3. 规划能力比代码能力更重要——使用规划工具的频率与性能正相关(r=0.711),TDD 循环是高性能的关键行为模式
  4. Alignment 有副作用——GPT-5 的”协作偏差”说明针对人机协作的对齐训练可能损害自主执行能力
  5. Thinking 模型可能”过度自信”——内部推理导致幻觉验证,Qwen3-thinking 49% 的早退率是警示
  6. 上下文窗口是必要非充分条件——排名前列的模型都有超长上下文(≥1M),但 Kimi-K2(也有超长上下文)表现一般,说明基础推理能力同样关键

参考资料