内容
# Coder Eval — 评估和基准测试 AI 编程代理和 Claude Code 技能
[](https://pypi.org/project/coder-eval/)
[](https://coder-eval.com)
[](https://coder-eval.com/docs)
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml)
**Coder Eval** (`pip install coder-eval` / `uv tool install coder-eval`) 是一个开源框架,用于**评估和基准测试 AI 编程代理及其技能** — 适用于 CLI 和技能构建者 — 具有沙盒、重现性和数据驱动分析。它运行一个真实的代理(**Claude Code**、**Codex** 或 **Google Antigravity / Gemini**)在沙盒中执行声明式 YAML 任务,然后评估其实际生成的代码和命令。不是一个“代理编码”基准测试:它衡量您的 CLI 和技能在使用编码代理时的有效性。
当您想要**测试 Claude Code 技能是否触发**、**A/B 测试 Claude Code 与 Codex 或 Gemini**(或模型与模型、提示与提示)或**在 CI 中控制编码代理质量**时,可以使用它。不像固定的数据集(SWE-bench、SkillsBench)那样对模型进行排名,Coder Eval 评估**您**的任务、技能和工作流程 — 具有加权 0.0-1.0 的标准、`skill_triggered` 激活检查、A/B 实验层和每个工具的成本遥测。请参阅 [比较](https://coder-eval.com/docs/comparison)。
<p align="center">
<img src="docs/assets/hero.gif" alt="Coder Eval 运行 hello_date 任务:沙盒代理编写并运行 YAML 任务的脚本,然后在 evalboard 中浏览计分结果" width="100%">
</p>
- **声明式 YAML 任务**,具有固定的依赖项和明确的成功标准
- **沙盒执行**,在具有资源限制的隔离环境中
- **加权连续评分**(0.0-1.0),具有分数信用和阈值
- **多种标准类型** — 从文件检查到代码相似性和 LLM 评分标准
- **代理抽象** — Claude Code、Codex 和 Antigravity(Gemini),通过插件 SPI 可扩展
- **实验层** — A/B 代理配置(模型、工具、提示)并行
- **完整遥测** — 每个工具调用、令牌计数和成本,均带有实时流式传输
## 您可以使用 Coder Eval 执行的操作
- **基准测试编码代理** — 在一组任务中评估代理,具有加权评分和通过/失败阈值
- **比较模型和配置** — A/B 测试 Claude 与 Codex 或 Gemini,模型与模型,工具开启与关闭,提示与提示
- **评估技能** — 验证代理是否实际参与目标技能(`skill_triggered`)并评估技能驱动的套件(类似 SkillsBench)
- **在 CI 中保持技能更新** — 在每次更改或按计划重新验证技能;当模型、提示或技能本身发生变化时捕获静默回归
- **在 CI 中控制代理质量** — 在 GitHub Actions 中运行套件,并在回归时失败构建
- **引入您自己的数据集** — 将一个任务扩展到多行以创建更大的基准测试套件
> **保持技能新鲜?** 将 Coder Eval 作为计划的 GitHub Actions 作业运行,以便您的技能能够持续针对最新模型重新评估 — 一个悄悄停止触发的技能将作为失败标准在用户遇到之前显示。参阅**[教程 02 — 在 CI 中运行 Coder Eval](docs/tutorials/02-ci-pipeline.md)**。
## 快速入门
**先决条件:** Python 3.13+、[uv](https://docs.astral.sh/uv/) 0.8+ 和 [Claude CLI](https://docs.anthropic.com/claude/docs/claude-code)(`brew install claude`)。在 macOS 上开发;CI 在 Linux 上运行。
```bash
git clone https://github.com/UiPath/coder_eval.git
cd coder_eval
uv sync --extra dev # 安装核心 + 开发工具
cp .env.example .env # 然后设置 ANTHROPIC_API_KEY — 或者跳过:自动拾取现有的 Claude Code 登录(`claude login`)
uv run coder-eval plan tasks/hello_date.yaml # 验证(不消耗令牌)
uv run coder-eval run tasks/hello_date.yaml # 运行您的第一个评估
uv run coder-eval report runs/latest # 查看结果
```
新来者?跟随 **[教程 01 — 您的第一个评估](docs/tutorials/01-first-evaluation.md)**。
可选的 `[uipath]` 额外功能(`uv sync --extra dev --extra uipath`)添加了主机上的 `uipath` SDK,用于本地沙盒对齐;它从公共 PyPI 安装(不需要凭证)。如果没有此功能,框架将运行端到端;依赖 `uipath` 的功能将在调度时失败,并带有明确的提示。
**在 CI 或其他项目中使用 Coder Eval?** 安装发布的包而不是克隆:
```bash
uv tool install coder-eval # 将 `coder-eval` CLI 放在您的 PATH 上,独立的环境中
# 在其自己的隔离环境中
uv tool install "coder-eval[codex,antigravity]" # 相同,带有代理额外功能
coder-eval --version # 验证安装
```
要将其作为项目依赖项添加:`uv add coder-eval` 或 `pip install coder-eval`。在真正的 CI 门控中,锁定到特定的发布版本,以免升级破坏您的结果。(示例 `tasks/` 存放在此仓库中 — 克隆它或将 CLI 指向您自己的任务文件。)参阅 **[教程 02 — 在 CI 中运行 Coder Eval](docs/tutorials/02-ci-pipeline.md)** 以获取完整设置。
## 作为 GitHub Action 使用
存储库根目录下的复合操作运行 `coder-eval` 作为 CI 门控 — 它安装固定的 CLI,运行您的任务,编写 JUnit XML 报告,并将 `run.md` 追加到作业摘要中,如果任何任务/门控失败,则失败步骤:
```yaml
- uses: UiPath/coder_eval@v0 # 成为 @v1 一旦 1.0.0 发布;@vX.Y.Z 精确匹配
with:
tasks: tests/tasks/**/*.yaml
model: claude-sonnet-5
env: |
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
```
| 输入 | 默认值 | 用途 |
| --- | --- | --- |
| `tasks` | *(所有 `tasks/`)* | 任务 YAML 路径/通配符 |
| `tags` | — | `--tags` 过滤器 |
| `model` | — | `--model` 覆盖 |
| `extra-args` | — | 字面额外参数 (`--experiment`, `-D …`, …) |
| `version` | 固定的发布版本 | PyPI 版本,或 `local` 从检出安装 |
| `run-dir` | `runs/ci` | 运行目录 |
| `junit-path` | `coder-eval-junit.xml` | 编写 JUnit 报告的位置 |
| `step-summary` | `true` | 将 `run.md` 追加到作业摘要 |
| `env` | — | 凭据/后端传递:换行分隔的 `NAME=VALUE` 对,仅在运行步骤中导出 |
| `minimum-task-score` | *(关闭)* | 严格的底线(0.0-1.0):如果任何任务的 `weighted_score` 低于它,则失败步骤 |
输出:`run-dir` 和 `junit-path`。将 JUnit 文件提供给平台的测试报告渲染器 — 例如在 GitHub Actions 上使用 [`mikepenz/action-junit-report`](https://github.com/mikepenz/action-junit-report):
```yaml
- uses: mikepenz/action-junit-report@v5
if: always()
with:
report_paths: coder-eval-junit.xml
```
**凭据和后端配置** 是 `env` 的唯一责任 — 仅为运行步骤导出,从不写入 `$GITHUB_ENV`,因此不会泄漏到后续步骤中。设置运行所需的内容,无论是 Anthropic 还是其他:
```yaml
- uses: UiPath/coder_eval@v0
with:
tasks: tests/tasks/**/*.yaml
minimum-task-score: "0.8" # 如果任何任务得分低于 0.8,则失败构建
env: |
API_BACKEND=bedrock
AWS_BEARER_TOKEN_BEDROCK=${{ secrets.BEDROCK_TOKEN }}
```
`minimum-task-score` 严格来讲是 **在** coder-eval 自身退出代码之上:** 如果 *either* coder-eval 以非零退出 *or* 任何任务的 `weighted_score` 低于底线,则步骤失败。留空以仅使用退出代码控制。
> **代理运行时由调用者负责。** 操作是代理无关的 — 它安装 `coder-eval` 但不安装代码代理运行时。默认使用 `claude-code` 代理的任务需要在操作运行之前在作业中安装 `claude` CLI(`actions/setup-node` + `npm install -g @anthropic-ai/claude-code`)。
> **安全性。** 评估的任务执行代理生成的代码。**不要** 在暴露给不受信任的复刻 PR 的 `pull_request_target` 下运行此操作 — 使用 `pull_request` 并在同一存储库条件下控制。
## 遥测
> 📊 **默认启用使用遥测。** `coder-eval` 发送 **匿名** 使用遥测(命令名称、结果、计数、持续时间和匿名安装 ID、平台信息)以帮助改进工具。它 **永远不会** 捕获提示、文件内容或存储库路径,并会在首次运行打印一次性通知。**要禁用它,请在 `.env` 或环境中设置 `TELEMETRY_ENABLED=false`。有关详细信息和路由到您自己的资源的方法,请参阅 [使用遥测](docs/USER_GUIDE.md#usage-telemetry)。
## 文档
<!-- docs-index:start -->
| 指南 | 内容 |
| --- | --- |
| [教程](docs/tutorials/README.md) | 分步式教程 — 从这里开始 |
| [用户指南](docs/USER_GUIDE.md) | 完整的 CLI、配置、输出和环境变量参考 |
| [任务定义指南](docs/TASK_DEFINITION_GUIDE.md) | 任务文件架构 — 所有标准类型、评分、模板 |
| [Claude Code](docs/agents/CLAUDE_CODE.md) | 配置和运行默认 Claude Code 代理 |
| [Codex](docs/agents/CODEX.md) | 运行 OpenAI Codex 代理 |
| [Antigravity (Gemini)](docs/agents/ANTIGRAVITY.md) | 运行 Google Antigravity / Gemini 代理 |
| [A/B 实验](docs/AB_EXPERIMENTS.md) | 在同一任务中比较模型 / 工具 / 提示 |
| [引入您自己的数据集](docs/DATASETS.md) | 将单个任务扩展到数据集 |
| [对话模式](docs/DIALOG_MODE.md) | 通过模拟用户在多轮对话中评估代理 |
| [Docker 隔离](docs/DOCKER_ISOLATION.md) | 容器沙盒驱动程序,具有自定义镜像 |
| [CI 门控和 GitHub 操作](docs/CI_GATE.md) | 运行 Coder Eval 作为 CI 门控 — 打包操作、JUnit 输出、得分底线 |
| [扩展 Coder Eval](docs/EXTENDING.md) | 通过插件 SPI 编写自定义代理、标准或模型定价 |
| [报告架构](docs/REPORT_SCHEMA.md) | 运行.json / variant.json / task.json 的字段级参考 |
| [比较](docs/comparison.md) | vs. SWE-bench、SkillsBench、Harbor、OpenAI Evals、手工编写的脚本 |
<!-- docs-index:end -->
| 仓库文档 | 内容 |
| --- | --- |
| [CLAUDE.md](CLAUDE.md) | 架构、关键模式和扩展点 |
| [CONTRIBUTING.md](CONTRIBUTING.md) | 开发设置、质量标准和贡献方式 |
## 比较
- **vs. 固定的基准测试(SWE-bench、SkillsBench)** — 它们评估规范数据集;Coder Eval 评估**您**的任务,具有连续的 0.0-1.0 加权标准(并且可以包装固定数据集)。
- **vs. 大规模 / RL 工具包(Harbor)** — Harbor 面向扩展和 RL 推广;Coder Eval 面向加权、技能感知套件在 CI 中。
- **vs. 模型输出评估工具(OpenAI Evals)** — 它们评估模型文本;Coder Eval 在沙盒中运行完整的代理,并评估生成的代码和命令。
- **vs. 手工编写的脚本** — 可复制的沙盒、加权标准、成本/令牌遥测、A/B 实验和 CI 就绪的通过/失败门控开箱即用。
查看完整的 **[比较 — 含来源](https://coder-eval.com/docs/comparison)**。
## 任务定义
任务是 YAML 文件:提示、代理配置、沙盒和成功标准。
```yaml
task_id: "hello_world"
description: "创建打印 Hello, World! 的 Python 脚本!"
initial_prompt: "创建打印 'Hello, World!' 的 hello.py"
agent:
type: "claude-code"
permission_mode: "acceptEdits"
allowed_tools: ["Read", "Write", "Bash"]
sandbox:
driver: "tempdir"
python: {}
success_criteria:
- type: "file_exists"
path: "hello.py"
description: "必须创建 hello.py"
- type: "run_command"
command: "python hello.py"
timeout: 10
description: "脚本必须成功执行"
```
任务可以省略 `agent` 部分 — 默认值将从实验层 (`experiments/default.yaml`) 解析。对于完整的架构和每个标准类型,请参阅 [任务定义指南](docs/TASK_DEFINITION_GUIDE.md)。
> **提示:** 在 Claude Code 中,使用 `/coder-eval-task-create` 从自然语言描述中搭建任务,并使用 `/coder-eval-run-analysis runs/latest` 从已完成的运行中获取改进建议。
## 开发
```bash
make install # 包 + 开发 + [uipath] 依赖 + 预提交钩子
make verify # 格式化 + lint + 类型检查 + 测试 + 覆盖率(CI 等价)
```
在推送前运行 `make verify` — 它镜像 CI(80% 覆盖率阈值)。有关完整的开发工作流程、提交约定和扩展点(新标准、新代理),请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 已知限制和非目标
- **不是固定的基准测试或排行榜** — Coder Eval 评估**您**的任务并提供示例任务,而不是规范的评估数据集。
- **任务执行真实代码** — 仅在容器驱动程序下运行不受信任的任务(参见 [Docker 隔离](docs/DOCKER_ISOLATION.md));`tempdir` 驱动程序不是安全边界。
- **提供您自己的模型凭证** — Anthropic、Bedrock 或 Gemini 密钥;Coder Eval 不代理或提供模型访问权限。
- **仅限 Python 3.13+**。
## 支持和安全
- **安全漏洞** — 通过 [SECURITY.md](SECURITY.md) 私密报告;永远不要公开公开问题。
- **错误和问题** — 开启 [GitHub 问题](https://github.com/UiPath/coder_eval/issues)。
- **其他** — 通过 **coder-eval@uipath.com** 联系维护人员。
## 许可证
© 2026 UiPath。遵循 Apache 2.0 许可证 — 请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
## 致谢
使用 [Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk)、[Pydantic](https://pydantic.dev/)、[Typer](https://typer.tiangolo.com/) 和 [Rich](https://rich.readthedocs.io/) 构建。
连接信息
猜你喜欢
暂无推荐服务器