Eigent 如何把 benchmark 任务转换为 Harbor 格式并用 Docker 环境运行评测
【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigent
Eigent 在backend/benchmark/目录下维护了一套自己的 benchmark:每个任务由一个 dataset JSON、一个 pass/fail 的 checker 脚本和一个按里程碑打分的 grader 脚本组成。如果你希望把这套任务放进 Harbor 框架里,用 Docker 容器隔离环境、用统一的harbor run命令评测不同 agent(例如 claude-code),就需要经过两个步骤:先用仓库自带的 adapter 把任务转换成 Harbor 任务目录,再用 Harbor CLI 在 Docker 环境中运行评测。本文基于 backend/benchmark/harbor/README.md 和 adapter 源码整理出完整操作路径,包括自定义权重、只跑单个任务、并发运行、强制重建镜像,以及结果落盘位置。
前置条件
按照 Harbor adapter README 的 Prerequisites,运行评测的机器上需要:
- 通过 uv 安装 Harbor CLI:
# Install Harbor CLI uv tool install harbor # Set your API key export ANTHROPIC_API_KEY=your-key-hereyour-key-here是文档中的占位符,替换为你自己的 Anthropic API key。评测使用--env docker,Harbor 会在首次运行时根据每个任务的environment/Dockerfile构建 Docker 镜像,因此机器上还需要可用的 Docker 环境。
第一步:生成 Harbor 任务目录
进入 adapter 所在目录后运行转换脚本:
cd backend/benchmark/harbor python run_adapter.pyrun_adapter.py 支持的参数:
# 自定义权重(70% checker,30% grader) python run_adapter.py --checker-weight 0.7 --grader-weight 0.3 # 限制生成的任务数量 python run_adapter.py --limit 2--checker-weight/--grader-weight:reward 中 checker 分数与 grader 分数的权重,默认都是 0.5,会在生成时写入每个任务的tests/config.json;--limit:最多生成多少个任务,适合先小规模验证;- 脚本默认把结果写到
backend/benchmark/harbor/datasets/eigent-bench,也可以用--output-dir指定其他输出目录,用--benchmark-dir指定backend/benchmark/的位置(不传时自动检测)。
adapter.py 的转换逻辑是:遍历backend/benchmark/dataset/下所有 JSON 配置,对每个任务复制template/目录、用配置里的data.question填充instruction.md、用metadata里的 difficulty 和 tags 填充task.toml、把对应的 checker/grader 脚本和answer/目录拷进任务目录。其中 grader 会被打补丁:移除 eigent 专有的浏览器日志检查(浏览器日志对其他 agent 不可用)并相应减少里程碑总数,同时把答案文件路径改为容器内相对路径。
生成的任务目录结构(README 中给出的布局):
eigent-bench-NNNN/ ├── task.toml # Harbor 元数据 ├── instruction.md # 任务问题 ├── environment/ │ ├── Dockerfile # Eigent 环境 + 评测依赖 │ └── workspace/ │ └── .env.development ├── tests/ │ ├── test.sh # 入口 → evaluate.py │ ├── evaluate.py # checker+grader → reward.txt │ ├── checker_N.py # 从 benchmark/checker/ 复制 │ ├── grader_N.py # 从 benchmark/grader/ 复制 │ └── config.json # 任务配置 + 权重 └── solution/ └── solve.sh # oracle 解决方案转换完成后终端会输出Done. Tasks written to <输出目录>,如果某个任务失败会记录失败计数(如Generation complete: 3 succeeded, 0 failed out of 3),生成日志中出现Failed to generate task时该任务的 JSON 配置需要单独检查。
第二步:用 oracle 验证环境正确性
跑真实 agent 之前,先用 oracle 跑一遍确认环境和评测链路没问题。README 给出的验证命令:
harbor run \ -p datasets/eigent-bench \ -a oracle \ --env docker-a oracle使用任务自带的solution/solve.sh(把 answer 文件拷进 workspace)作为标准答案。README 说明 oracle 验证的预期结果是score 1.0;如果 oracle 都跑不到满分,说明任务生成或 Docker 环境有问题,应先排查再评测真实 agent。
用 agent 运行评测
环境验证通过后,用指定模型运行评测:
harbor run \ -p datasets/eigent-bench \ -a claude-code \ -m anthropic/claude-sonnet-4-20250514 \ --env docker只跑单个任务时加-t指定任务 ID(README 示例只跑任务 0,即 hello world 任务):
harbor run \ -p datasets/eigent-bench \ -a claude-code \ -m anthropic/claude-haiku-4-5-20251001 \ -t "eigent-bench-0000" \ --env docker需要并发执行时加--n-concurrent:
harbor run \ -p datasets/eigent-bench \ -a claude-code \ -m anthropic/claude-sonnet-4-20250514 \ --env docker \ --n-concurrent 3Docker 环境与 reward 是如何计算的
每个任务的 Dockerfile 基于python:3.11-slim,安装sudo git curl,创建/tests /logs/verifier /solution /workspace四个目录,并把工作目录设为/workspace。task.toml 模板中还有几个直接影响运行资源的限制项:verifier 超时 120 秒、agent 超时 600 秒、镜像构建超时 600 秒、容器 2 CPU / 4096 MB 内存 / 5120 MB 存储。
评测入口是容器内的 test.sh:它执行python3 /tests/evaluate.py --config /tests/config.json --working-dir "$WORKING_DIR" --output-dir /logs/verifier(WORKING_DIR默认为/workspace)。evaluate.py 依次调用 config.json 里列出的 checker(逐个执行check(working_dir))和 grader(逐个执行grade(working_dir)返回(completed, total)),然后按公式计算 reward 并写入/logs/verifier/:
reward = checker_weight × checker_score + grader_weight × grader_scorechecker_score:checker 通过与否的得分(checker 失败时为 0.0);grader_score:completed_milestones / total_milestones,范围 0.0–1.0;- 权重即生成任务时传入的
--checker-weight/--grader-weight,默认 0.5 / 0.5。
reward.txt和metrics.json就写在这个输出目录里;如果 evaluate 以非零码退出且没有产生reward.txt,test.sh 会补写一个0.0。
读取结果
运行结束后,结果写入jobs/<timestamp>/目录:
jobs/<timestamp>/ ├── result.json # 总体结果 ├── job.log # 构建 + 运行日志 └── eigent-bench-NNNN__<id>/ ├── agent/ # agent 日志和轨迹 │ ├── claude-code.txt # agent 原始输出 │ └── trajectory.json # ATIF 轨迹 └── verifier/ ├── metrics.json # checker/grader 明细 └── test-stdout.txt # verifier 输出核对单个任务得分时看该 trial 的verifier/metrics.json(含 reward、checker_score、grader_score、每个脚本的明细),跨任务汇总看result.json,排查构建或运行问题看job.log。
强制重建 Docker 镜像
Harbor 会缓存 Docker 镜像。修改了任务的 Dockerfile 后想强制重建,先清理 Harbor 的构建缓存再重跑:
# Clear Harbor's Docker build cache docker builder prune -f # Then rerun — Harbor will rebuild the image harbor run -p datasets/eigent-bench -a oracle --env docker注意docker builder prune -f会清除本机构建缓存(不删除已构建的镜像),影响范围是机器上所有 builder 缓存,执行前确认没有其他依赖这些缓存的构建任务。
相关文档
- 任务格式与命令参考:backend/benchmark/harbor/README.md
- 原始 benchmark 的运行方式(直接调 Eigent API)与添加新任务的格式说明:backend/benchmark/README.md,其中的 dataset JSON 结构就是 adapter 的输入来源
【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考