← 返回列表

ProjDevBench: Benchmarking AI Coding Agents on End-to-End Project Development

作者 Pengrui Lu, Shiqi Zhang, Yunzhong Hou, Lyumanshan Ye, Chaoyi Huang, Zixi Chen, Ji Zeng, Hantao Jiang, Pengfei Liu, Yiwei Wang, Ming-Hsuan Yang
年份 2025
会议/期刊 ICML 2025
评分
标签 AI编程 基准测试 代码智能体
摘要 首个端到端项目开发基准:20 个多文件 C++ 项目,OJ 执行测试 + LLM 代码审查,6 大智能体整体通过率仅 27.38%,系统性揭示规格对齐/边界处理/复杂度优化/资源管理四大失败模式

核心思想

现有 AI 编程基准(SWE-bench、HumanEval 等)只测试修补 bug写函数片段,不测试 AI 能否从零构建完整软件项目

ProjDevBench 是首个端到端项目开发基准:

  • 输入:自然语言需求规格
  • 输出:多文件可执行仓库(含 CMakeLists.txt 构建配置)
  • 评估:Online Judge 执行测试 + LLM 代码审查
  • 结果:6 个主流 AI 编程智能体的整体通过率仅 27.38%

背景知识

现有编程基准的局限

基准 任务类型 局限
HumanEval 单函数补全 不涉及项目结构
SWE-bench 修复已有仓库 bug 不需要从零设计
MBPP 简单编程题 算法题,非工程
ProjDevBench 从零建项目 全流程:设计→编码→构建→测试

真实软件开发 vs 写函数

方面 写函数 建项目
文件数 1 多个(.h/.cpp/CMakeLists.txt)
架构设计 需要模块划分
构建系统 CMake 配置
性能约束 通常无 时间/内存限制
边界处理 简单 必须全面
资源管理 通常无 内存泄漏/异常安全

方法详解

1. 问题收集流水线(三阶段)

Stage I:初始收集

从大型 OJ 平台(本科计算机科学教育用)采集约 2800 个候选题目

Stage II:范围过滤

仅保留项目级开发任务(多文件实现、显式模块组织、构建系统配置、可复用抽象)。筛选后剩约 100 题

Stage III:质量过滤

选出 20 个最终题目,要求:

  • 清晰的需求规格
  • 全面的测试用例(覆盖功能和边界)
  • 非平凡难度
  • 无法通过捷径/取巧解决

2. 最终数据集

20 题,8 类

类别 题数 示例
算法 3 排序、搜索
管理系统 3 火车票管理、ICPC 管理
游戏 1 扫雷
解释器 4 BASIC 解释器、Mini-Aidiv-N
汇编 1 汇编模拟器
数据结构 4 int2048 大整数、B+Tree
存储 2 数据库存储引擎
优化 2 性能优化问题

两种模式

  • 项目创建:无初始代码,从零构建
  • 项目补全:给部分代码框架,补全剩余部分

3. 评估协议

3.1 执行测试(80% 权重)

通过 Online Judge 平台自动评测:

\[S_\text{raw} = \sum_{i=1}^{N} w_i \cdot \mathbf{1}[\text{test case } i \text{ passed}]\] \[S_\text{exec} = \frac{S_\text{raw}}{\sum_{i=1}^{N} w_i} \times 100\]

其中 $w_i$ 是每个测试用例的权重(根据重要性/难度设定)。

细粒度反馈信号

状态 含义
AC(Accepted) 通过
WA(Wrong Answer) 答案错误
TLE(Time Limit Exceeded) 超时
MLE(Memory Limit Exceeded) 超内存
RE(Runtime Error) 运行时错误
CE(Compile Error) 编译错误
Memory Leak 内存泄漏

每题有独立的时间限制(0.5-40 秒)和内存限制(6-6144 MiB)。

3.2 代码审查(20% 权重)

两层审查

规则检查(自动化 Python 脚本):

  • ensure_gitignore_contains:检查 .gitignore
  • forbid_pattern_in_files:禁止特定模式(如禁用库)
  • ensure_files_exist:必要文件是否存在
  • ensure_cmake_outputs_code:CMake 构建是否正确
  • ensure_files_unchanged:不可修改的文件是否被改动

LLM 审查(定性评估):

  • llm_as_a_judge:检查规格合规性和代码质量

3.3 最终分数

\[S_\text{final} = 0.8 \times S_\text{exec} + 0.2 \times S_\text{cr}\]

功能正确性占 80%——能跑对是最重要的。

4. 评估环境

Docker 容器(Ubuntu 24.04):

  • GCC-13, G++-13, CMake
  • Python 3.12
  • 8 GB 内存,4 核 CPU
  • 完整网络访问(用于智能体操作)

评估流水线

  1. 加载题目配置
  2. 初始化 Docker + Git 仓库
  3. 给智能体标准化提示
  4. 智能体自主编码 + 提交 OJ
  5. 收集判定结果 + 代码审查

5. 被评估的智能体

智能体 模型后端
Augment GPT-5, Sonnet-4.5
Codex CLI GPT-5, Sonnet-4.5
Gemini CLI Gemini-3-Pro-Preview
Cursor GPT-5, Sonnet-4.5, Gemini-3
GitHub Copilot GPT-5, Sonnet-4.5, Gemini-3
Claude Code GPT-5, Sonnet-4.5, DeepSeek-V3.2, GLM-4.6, Kimi-k2

实验结果

主要排名

智能体 模型 最终分 执行分 审查分
Codex GPT-5 77.85 76.73 82.31
Cursor Gemini-3 75.32 72.52 86.51
Augment GPT-5 72.35 72.13 73.26
Cursor GPT-5 71.85 69.26 82.23
Claude Code Sonnet-4.5 68.87 63.76 89.31
Copilot GPT-5 61.73 58.64 74.06

Claude Code 的代码审查分最高(89.31) 但执行分较低 → 代码规范好但功能不够完整。

整体提交状态分布

状态 数量 占比
AC(通过) 484 27.38%
WA(答案错误) 740 41.86%
TLE(超时) 246 13.91%
RE(运行时错误) 124 7.01%
CE(编译错误) 80 4.52%
Memory Leak 62 3.51%
MLE(超内存) 24 1.36%

不到三分之一的提交通过——AI 编程智能体距离可靠的项目开发还很远。

难度影响

难度 Codex+GPT-5 执行分 Copilot+Sonnet-4.5 执行分
简单(有部分代码) 79.24
困难(从零开始) 69.22 36.63

从零开始比补全已有代码难得多——Copilot 下降了近 35 分。

交互长度与性能的关系

变量对 Spearman $\rho$ 含义
Token 消耗 vs 分数 -0.734 Token 越多,分越低
交互轮次 vs 分数 -0.668 轮次越多,分越低
轮次 vs Token +0.898 高度正相关

关键发现:更多交互不代表更好结果——反而意味着智能体在”挣扎”。难题触发冗长的调试循环,但智能体往往无法将调试转化为进展

开源模型对比(Claude Code 框架下)

模型 最终分
Sonnet-4.5 68.87
GLM-4.6 57.95
Kimi-k2 52.77
DeepSeek-V3.2 50.33

开源模型落后闭源模型 10-18 分。

六大失败模式详析

1. 规格对齐失败(41.86%,最大类)

功能不完整

  • 火车票管理系统:所有智能体都实现了用户管理,但遗漏了关键的座位管理
  • 扫雷:智能体只访问了 3789/3825 个安全格子

结构误解

  • int2048:智能体在提交代码中包含了带 main() 的测试代码 → 与 OJ 的 main() 冲突
  • Mini-Aidiv-N:Softmax 对整个矩阵求和而非按行 → 准确率 0.02

2. 边界处理缺陷(RE + 部分 WA)

  • 空指针解引用(树实现中)
  • 数组越界
  • 未初始化变量导致段错误
  • 子串匹配 vs 精确匹配的混淆(书店系统)

3. 时间复杂度分析不足(13.91%)

  • ICPC 管理系统:每次解冻后重新排序所有队伍 $O(K \cdot N \log N)$,而非利用排名局部性 $O(K \log N)$
  • 使用 map($O(\log N)$)而非 unordered_map($O(1)$)
  • 无缓冲 I/O 导致连锁性能问题

4. 资源管理缺陷(3.51% + 1.36%)

  • BASIC 解释器:std::stoi() 抛异常后未释放已分配的表达式对象 → 25 处内存泄漏
  • 偏好手动 new/delete 而非 RAII 模式
  • 防御性编程不完整

5. 高级 C++ 概念不足(4.52%)

  • 模板编程:假设类型有默认构造函数
  • 命名空间/头文件管理:合并文件时出错
  • 开发环境 vs 提交环境的区别处理不当

6. 版本控制和工作流误解

  • 本地修改代码但忘记 push 到远程仓库
  • 遗漏必要文件
  • 违反构建系统规格

代码审查验证

指标
二元规则验证准确率 0.852
Cohen’s $\kappa$(与人类标注一致性) 0.710(实质性一致)
连续质量评分 与人类评分强相关

LLM 审查可靠地近似人类判断。

个人思考

  1. 27.38% 通过率是对 AI 编程能力的清醒评估——在完整项目开发中,AI 还远未达到”自动化程序员”的水平。
  2. “交互越多,分越低” 是最令人警醒的发现:说明当前智能体缺乏有效的自我纠错能力——遇到困难时陷入低效循环而非策略调整。
  3. 规格对齐是最大瓶颈(42%):AI 不是不会写代码,而是不能完整理解需求——这与人类初级程序员的最大问题惊人地一致。
  4. 复杂度优化失败(14%) 揭示了一个深层问题:AI 善于写”正确但低效”的代码,而高效算法需要对问题结构的深层理解——这目前还是人类的优势。
  5. 从零建项目 vs 补全代码的巨大差距说明:AI 在有”脚手架”时表现尚可,但架构设计能力严重不足——这正是资深工程师最重要的技能。
  6. Claude Code 审查分最高但执行分不高:暗示 Sonnet 模型更注重代码规范性但在功能实现上不如 GPT-5——不同模型有不同的”性格”。
← 返回列表