基于 OpenAI HumanEval 基准测试,评估大语言模型代码生成能力的工具。
.
├── evaluate_models.py # 评估脚本(支持全量/快速/自定义测试)
├── results/ # 评估结果输出目录
├── requirements.txt # 依赖清单
└── README.md
pip install -r requirements.txt先跑 5 道题验证生成+评测流程是否正常:
python evaluate_models.py \
--api-type anthropic \
--base-url YOUR_BASE_URL \
--api-key YOUR_API_KEY \
--models model-name \
--quick验证通过后跑完整的 164 题:
python evaluate_models.py \
--api-type anthropic \
--base-url YOUR_BASE_URL \
--api-key YOUR_API_KEY \
--models model1 model2 model3 \
--max-tokens 32768| 参数 | 说明 | 默认值 |
|---|---|---|
--models |
模型名称列表,可同时指定多个 | 必填 |
--channel |
模型渠道标识,用于区分不同供应商 | 空(不区分) |
--api-type |
API 类型:anthropic 或 openai |
anthropic |
--base-url |
API 服务地址(/v1 后缀可选,自动处理) |
必填 |
--api-key |
API 密钥 | 必填 |
--output-dir |
结果输出目录 | results |
--max-tokens |
每次生成允许的最大 token 数 | 16384 |
渠道参数用于对比同一模型在不同供应商的表现:
- 支持中英文渠道名称
- 文件名添加渠道标识,如
model_硅基流动_samples_{timestamp}.jsonl - 报告基本信息中显示渠道
| 参数 | 说明 | 示例 |
|---|---|---|
--tasks ID... |
指定具体题目,支持题号或全名 | --tasks 0 2 4 或 --tasks HumanEval/0 HumanEval/2 |
--num-problems N |
测试前 N 道题目 | --num-problems 10 |
--quick |
快速测试模式(固定 5 道题) | --quick |
若不指定以上参数,默认运行全部 164 道题目。
| 参数 | 说明 | 默认值 |
|---|---|---|
--retry-rounds N |
错误重试轮数,如 3 表示最多执行 3 轮,记录 pass@1/2/3 | 1(不重试) |
多轮重试模式下:
- 每轮执行后,收集错误题目,下一轮只跑这些错误题
- 记录每轮累计正确率(pass@1、pass@2、pass@3...)
- 报告中展示每轮结果和代码
| 参数 | 说明 | 默认值 |
|---|---|---|
--repeat N |
重复执行测试的次数,如 2 表示执行 2 次完整测试 | 1(不重复) |
重复执行模式下:
- 每次执行生成独立的数据文件和报告
- 文件名添加
run{N}标识,如model_samples_run1_{timestamp}.jsonl - 汇总报告中显示所有执行的 pass@1 及平均值
/v1 后缀可选,程序会根据 API 类型自动处理:
- OpenAI 类型:自动添加
/v1后缀(如https://api.example.com→https://api.example.com/v1) - Anthropic 类型:自动移除
/v1后缀(如https://api.example.com/v1→https://api.example.com)
示例:无论输入 https://api.example.com 还是 https://api.example.com/v1,均可正常使用。
python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --quickpython evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --num-problems 20# 使用题号
python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --tasks 0 2 4 10 21
# 使用全名
python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --tasks HumanEval/0 HumanEval/2 HumanEval/4python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o claude-4# 测试火山引擎渠道
python evaluate_models.py --api-type openai --base-url URL1 --api-key KEY1 --models minimax-m2.5 --channel volcengine
# 测试硅基流动渠道(中文渠道名)
python evaluate_models.py --api-type openai --base-url URL2 --api-key KEY2 --models minimax-m2.5 --channel 硅基流动
# 完整示例:多参数组合
python evaluate_models.py --api-type anthropic --base-url https://api.example.com --api-key sk-xxx --models minimax-m2.5 --channel 超算互联网 --max-tokens 16384 --tasks 0 2 4 --retry-rounds 3 --repeat 3# 最多执行 3 轮,记录 pass@1/2/3
python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --retry-rounds 3# 执行 2 次完整测试,生成 2 份报告
python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o --repeat 2python evaluate_models.py --api-type anthropic --base-url https://api.example.com --api-key sk-xxx --models claude-4python evaluate_models.py --api-type openai --base-url https://api.example.com --api-key sk-xxx --models gpt-4o支持所有兼容 OpenAI /v1/chat/completions 和 Anthropic /v1/messages 格式的服务。
评估结果保存在 results/ 目录下:
全量测试(164 题):
<模型名>_samples_{timestamp}.jsonl— 生成的代码补全<模型名>_samples_{timestamp}_results.jsonl— 逐题评测结果<模型名>_report_{timestamp}.md— Markdown 格式评估报告summary_{timestamp}.json— 多模型对比汇总
部分测试(如 5 题):
<模型名>_samples_5of164_{timestamp}.jsonl<模型名>_samples_5of164_{timestamp}_results.jsonl<模型名>_report_5of164_{timestamp}.md
多轮重试测试(如 3 轮):
<模型名>_samples_retry3_{timestamp}.jsonl<模型名>_report_retry3_{timestamp}.md— 包含每轮 pass@N 结果
重复执行测试(如 2 次):
<模型名>_samples_run1_{timestamp}.jsonl— 第 1 次执行<模型名>_samples_run2_{timestamp}.jsonl— 第 2 次执行<模型名>_report_run1_{timestamp}.md— 第 1 次报告<模型名>_report_run2_{timestamp}.md— 第 2 次报告
{timestamp}格式为yyyymmddhhmmss,如20260427210000
- Python >= 3.10
- pip(用于安装依赖)
建议使用环境变量传递 API Key,避免在命令行历史中暴露:
# Linux/macOS
export ANTHROPIC_API_KEY="your-api-key"
python evaluate_models.py --api-type anthropic --base-url YOUR_BASE_URL --models model-name
export OPENAI_API_KEY="your-api-key"
python evaluate_models.py --api-type openai --base-url YOUR_BASE_URL --models model-name
# Windows (PowerShell)
$env:ANTHROPIC_API_KEY="your-api-key"
python evaluate_models.py --api-type anthropic --base-url YOUR_BASE_URL --models model-name程序会自动读取对应的环境变量,无需通过 --api-key 参数传递。
A: 这是旧版本问题,新版本已自动处理部分测试场景。请确保使用最新代码。
A: 脚本会自动重试 3 次。如果仍然失败,可能是模型输出格式不符合预期,查看日志中的 [DEBUG] raw output 了解原始输出。
A: 使用 OpenAI 兼容的本地推理服务(如 LM Studio、Ollama),设置 --api-type openai 和对应的 --base-url。
- HumanEval - OpenAI 的代码生成基准测试数据集
- Chen, M., et al. "Evaluating Large Language Models Trained on Code", arXiv:2107.03374, 2021