引言

代码生成是 LLM 最成功的落地场景之一,但「能写代码」和「能解决工程问题」之间有巨大鸿沟。HumanEval 上的 90% 通过率并不意味着模型能胜任真实的软件工程工作。本文系统梳理 2026 年代码 LLM 评估从基础到工程级的完整体系。

一、基础代码生成评估

1.1 HumanEval

HumanEval 由 OpenAI 在 2021 年发布,是代码 LLM 评估的元老级 Benchmark。包含 164 个 Python 编程任务,每个任务包含函数签名、docstring 和测试用例。

评估方式: 给定函数签名和 docstring,模型生成函数体,用测试用例验证正确性。

Pass@k 指标:

Pass@k = 1 - C(n-c, k) / C(n, k)

其中 n 是总采样数,c 是通过测试的采样数,k 是允许的尝试次数。

2026 年头部模型 Pass@1:

模型HumanEval Pass@1
GPT-596.2%
Claude 4 Opus95.8%
Gemini 2.5 Ultra94.1%
DeepSeek-Coder V2.593.5%
Llama 3.3 70B88.7%

问题: HumanEval 已严重饱和,头部模型差距不到 8 个百分点,基本失去区分度。

1.2 MBPP

MBPP (Mostly Basic Python Problems) 包含 974 个基础 Python 编程题:

  • 难度:入门级,比 HumanEval 更简单
  • 饱和度:头部模型已达 95%+,基本无区分度
  • 价值:仅适合评估小模型或作为 sanity check

1.3 MultiPL-E

MultiPL-E 将 HumanEval 和 MBPP 翻译到 18 种编程语言:

语言GPT-5 Pass@1Claude 4 Pass@1说明
Python96.2%95.8%最强
JavaScript94.5%93.8%优秀
Java92.1%91.5%良好
C++91.8%90.2%良好
Go89.3%88.7%良好
Rust85.7%84.2%中等
R78.5%76.8%较弱
Haskell72.3%68.5%

关键发现: 模型在 Python/JavaScript 上最强,在函数式语言(Haskell)上最弱。差距主要来自训练数据中的语言分布。

二、进阶代码评估

2.1 HumanEval+

HumanEval+ 在 HumanEval 基础上大幅扩展测试用例(平均每个任务从 8 个扩展到 100+ 个):

模型HumanEval Pass@1HumanEval+ Pass@1下降幅度
GPT-596.2%89.5%-6.7%
Claude 4 Opus95.8%88.2%-7.6%
Gemini 2.5 Ultra94.1%84.3%-9.8%

分析: 下降幅度反映了模型代码的鲁棒性——通过基本测试不代表通过了边界条件测试。Gemini 下降最多,说明其代码的边界情况处理最差。

2.2 BigCodeBench

BigCodeBench 包含 1140 个更具挑战性的编程任务:

  • 涉及标准库和第三方库的复杂使用
  • 要求多步骤推理
  • 测试用例更严格

头部模型表现:

模型BigCodeBench Pass@1
GPT-578.5%
Claude 4 Opus76.2%
Gemini 2.5 Ultra71.8%
DeepSeek-Coder V2.569.3%

2.3 LiveCodeBench

LiveCodeBench 持续从 LeetCode、Codeforces 等平台获取新题,避免数据污染:

  • 更新频率:每月
  • 核心价值:测量真实编码能力而非记忆
  • 时间分界:可以按模型训练截止日期分组评估

2026 年 LiveCodeBench 表现:

模型训练截止日期后题目训练截止日期前题目差距
GPT-568.5%82.3%-13.8%
Claude 4 Opus65.2%79.8%-14.6%
Gemini 2.5 Ultra62.1%76.5%-14.4%

关键发现: 所有模型在训练截止日期后的题目上表现下降约 14 个百分点,说明之前的 Benchmark 分数有约 14% 的「水分」来自数据记忆。

三、SWE-Bench:工程级评估

3.1 SWE-Bench 概述

SWE-Bench 是代码评估的革命性 Benchmark,要求模型修复真实开源项目中的 GitHub issue:

  • 任务:给定 issue 描述和仓库代码,生成修复补丁
  • 验证:运行项目的测试套件验证补丁
  • 难度:需要理解大型代码库、定位问题、修改代码

SWE-Bench 版本对比:

版本任务数特点头部得分
SWE-Bench Full2294完整版,含所有难度30-38%
SWE-Bench Lite300简化版,单文件修改55-68%
SWE-Bench Verified500人工验证,难度均衡65-72%
SWE-Bench Pro800多文件修改,高难度25-40%

3.2 SWE-Bench 详细分析

按难度分布

难度SWE-Bench Verified 占比GPT-5 通过率Claude 4 通过率
Easy (单文件,明确提示)35%82%85%
Medium (单文件,需推理)40%68%72%
Hard (多文件交互)20%45%48%
Expert (架构级理解)5%22%25%

按项目分布

项目通过率 (GPT-5)难度因素
django72%代码库大但结构清晰
scikit-learn68%数学/算法理解要求
sympy55%符号计算复杂
matplotlib58%可视化逻辑复杂
requests78%代码库小且清晰

3.3 SWE-Bench Pro 的挑战

SWE-Bench Pro 在 SWE-Bench 基础上增加了:

  1. 多文件修改:平均需要修改 3-5 个文件
  2. 架构理解:需要理解项目整体架构才能修复
  3. 依赖推理:修改一处可能影响多处,需要全面考虑
  4. 测试不完整:有时需要自己写测试验证修复

SWE-Bench Pro 2026 年头部模型:

模型SWE-Bench ProSWE-Bench Verified差距
Claude 4 Opus38.2%71.5%-33.3%
GPT-535.7%68.2%-32.5%
Gemini 2.5 Ultra31.8%63.4%-31.6%

分析: 从 Verified 到 Pro 的下降超过 30 个百分点,说明当前模型在复杂工程任务上仍有巨大提升空间。

四、代码补全 vs 代码生成

4.1 两种评估范式

维度代码补全代码生成
输入前缀代码 + 光标位置自然语言描述
输出续写代码完整函数/程序
评估方式精确匹配 / 编辑相似度测试用例通过率
代表 BenchmarkHumanEval-Infill, CrossCodeEvalHumanEval, MBPP
实际场景IDE 中的 CopilotChat 式编程助手

4.2 代码补全 Benchmark

CrossCodeEval: 跨文件代码补全评估,要求模型理解项目中其他文件的内容:

模型CrossCodeEval (Python)CrossCodeEval (Java)
GPT-562.3%58.7%
Claude 4 Opus60.1%56.8%
Gemini 2.5 Ultra55.4%52.3%

DevEval: 基于真实开发场景的代码补全评估:

  • 包含项目上下文(不只是单文件)
  • 评估代码风格一致性
  • 检查 API 使用是否符合项目约定

4.3 补全 vs 生成的能力差异

有趣的是,模型在代码补全上的表现通常低于代码生成:

模型代码生成 (HumanEval)代码补全 (CrossCodeEval)差距
GPT-596.2%62.3%-33.9%
Claude 4 Opus95.8%60.1%-35.7%

原因分析:

  1. 代码补全需要理解已有代码的上下文和风格
  2. 补全的约束更多——需要与已有代码无缝衔接
  3. 补全评估使用精确匹配,比测试用例通过更严格

五、实际工程能力评测

5.1 超越测试用例的评估

测试用例通过不等于工程质量好。完整的工程评估应包含:

评估维度指标方法
功能正确性测试通过率自动化测试
代码质量Linting 分数ESLint/Pylint
可读性复杂度/命名规范静态分析
性能时间/空间复杂度Benchmark
安全性漏洞检测Semgrep/CodeQL
可维护性修改难度人工评估
文档完整注释/文档质量人工评估

5.2 工程场景评估

CodeRepairBench: 评估模型修复代码 bug 的能力:

  • 给定有 bug 的代码和错误描述
  • 模型需要定位并修复 bug
  • 评估修复正确性和是否引入新 bug

CodeReviewBench: 评估模型做 Code Review 的能力:

  • 给定代码 diff,模型需要识别问题
  • 评估问题召回率和误报率
  • 评估建议的实用性

DevBench-2026: 端到端开发能力评估:

  • 给定需求文档,模型完成设计、编码、测试
  • 评估最终交付物的功能完整性和质量
  • 包含 50+ 真实开发场景

六、代码评估的数据污染问题

6.1 污染途径

代码评估的数据污染比文本更严重,因为:

  • GitHub 仓库是公开的,几乎必然在训练数据中
  • LeetCode 题目和解答广泛流传
  • StackOverflow 代码片段被大量引用

6.2 检测与缓解

检测方法:

  • 时间分界测试(LiveCodeBench 方法)
  • Canary Token 注入
  • 题目改写后对比性能变化

缓解策略:

  • 优先使用 LiveCodeBench 等动态 Benchmark
  • 对 HumanEval 等经典 Benchmark 的结果打折看待
  • 创建私有评估集(不公开题目和测试用例)

七、评估实践建议

7.1 Benchmark 组合推荐

代码 LLM 评估组合(2026 推荐):
├── 基础能力
│   ├── HumanEval+ (基础生成,含扩展测试)
│   └── MultiPL-E (多语言)
├── 进阶能力
│   ├── BigCodeBench (复杂任务)
│   └── LiveCodeBench (无污染,最新题目)
├── 工程能力
│   ├── SWE-Bench Verified (工程修复)
│   └── SWE-Bench Pro (复杂工程)
├── 补全能力
│   └── CrossCodeEval (跨文件补全)
└── 领域特定
    └── 按需选择(安全/性能/特定语言)

7.2 评估注意事项

  1. 不要只看 Pass@1:报告 Pass@1/5/10,了解模型的多样性和可靠性
  2. 区分补全和生成:两种能力不等效,需要分别评估
  3. 关注测试质量:通过测试不等于代码正确,需要扩展测试用例
  4. 评估真实场景:IDE 补全、Chat 编程、PR Review 的评估方法不同
  5. 检测数据污染:对经典 Benchmark 结果保持警惕

结语

代码 LLM 评估已从「能不能写出正确的函数」演进到「能不能解决真实的工程问题」。HumanEval 的时代已经过去,SWE-Bench Pro 和 LiveCodeBench 代表了未来方向。但即使是最先进的 Benchmark,也只能覆盖工程能力的一部分——真正的工程能力评估需要在真实项目中长期观察。选择评估组合时,确保覆盖基础能力、工程能力和补全能力三个维度,才能形成对代码 LLM 的全面判断。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。