
而在本地、Docker 与各类云沙箱之间来回适配,又容易陷入写不完胶水代码的泥潭。
针对这一问题,浙江大学 ZJU-REAL 团队开源了ageval(agent eval)。它的核心思路是将待测 Agent 与运行环境通过插件彻底解耦:在配置文件中修改一行,同一份 dataset 就能在不同环境、不同 Agent 间自由切换运行。
配合专用的 CLI 与 skills,ageval 还能让 coding agent 自主编写 benchmark、迁移已有测试集并执行自动化评测。
△演示视频:配置一次评测,任意切换运行功能一览:从本地调试到 Hub 协作
做 Agent 评测,开发者常遇到两个痛点:一是换个 Agent 或换套环境就得重写一遍适配脚手架;二是跑完只给出一个笼统的分数,中间卡在哪一步完全无法追溯。ageval覆盖了从本地复盘调试到云端结果共享的完整工作流。
本地轻量复盘:逐轮交互轨迹回放
评测未通过时,定位问题最需要看清 Agent 的实际执行轨迹。
在终端执行 ageval view,即可在本地启动轻量 Web 轨迹查看器,按照Jobs → Tasks层级完整复盘每一次运行:
阶段耗时清晰可见:明确展示环境准备(environment)、任务循环(run)与评分(evaluate)各个阶段的精确耗时;
交互事件逐轮展开:完整对照 Agent 输入、工具调用(Tool Calls)、终端输出与模型回复,无需再在终端漫无目的地翻看滚屏日志;
单任务直接复现:每个失败 task 均附带完整的重跑命令,方便在终端针对单一用例单独复现和单步调试。

ageval 将运行环境与 Agent 运行时均封装为标准插件,免去重复编写适配胶水代码的成本:
环境插件(Environment):支持 Docker、E2B、Daytona 以及 Local 本地宿主环境;
Agent 运行时插件(Executor):默认支持通过 ACP 接入通用 coding agent(如 pi、Codex、Claude Code、OpenCode 等),同时也原生收录了各类特化执行栈(如 DeepSeek 官方 dsh、NVIDIA nooa、SWE-agent miniswe)。
如果需要切换执行环境或待测 Agent,只需在配置文件 profiles.yaml 中修改对应声明,原有的 dataset 无需任何改动即可直接运行。

点击进入任意插件详情页,可以直观查看该插件对外 export 的服务、所依赖的环境 capabilities,以及安装命令与参数配置示例:


许多公开 benchmark 往往只公布模型名称与得分,既没有说明使用的是哪套 Harness,也没有标明沙箱环境版本与 Prompt 模版,外界往往难以真正复现。
在 ageval Hub 的公开榜单上:
每一项成绩都明确绑定了具体的 Agent 运行时版本与执行环境(如 Docker、E2B);
无论是更换底层沙箱还是调整工具调用策略,得分与资源消耗的变化都可以在榜单中横向对照;
每次提交均附带不可变的 lock.json 与完整轨迹文件,其他开发者可以直接拉取配置一键复现。

在实际业务中,调优出一套好用的 Agent(包括 Prompt 模版、工具链编排与执行逻辑)通常需要投入大量的工程精力。
在 ageval Hub 上,团队可以直接将调优好的方案打包发布为 Agent 包:
完整包含 Prompt 模版、Tool 定义以及底层插件依赖声明;
其他成员在运行评测时,只需指定 --agent<org/name@version>,即可直接拉取并在任意 dataset 上开箱即用。

点击进入单个 Agent 主页,可以进一步查看该 Agent 的配置详情、参与测评的模型列表与 dataset 历史记录。

在针对业务场景进行模型选型时,团队通常关注两个核心问题:
该模型在不同的评测任务和不同的 Agent 架构下的整体表现如何?
在固定当前自研 Agent 架构的前提下,换用哪个模型能在成功率与调用成本之间取得最优平衡?
Models Hub:以模型为维度的综合画像
在Models Tab 中,可以按照模型维度查看其在各类 dataset 与 Agent 组合下的解题成功率和调用成本:

点击具体模型进入详情页,可以进一步查看该模型在不同 dataset 和不同 Agent 下的表现明细:

在 Agent 详情页中,可以固定同一套 Agent 运行时(保持相同的 Prompt 策略与工具调度链),横向对比不同模型在同一个 dataset 下的代码生成质量与解题通过率:

在本地开发环境中,只需为 coding agent 安装 ageval CLI 和配套 skills:
uv tool install ageval-cli
npx skills add ZJU-REAL/ageval
安装完成后,你的 coding agent 就能理解 ageval 的 CLI 指令与数据结构规范。你可以直接吩咐它完成原本繁琐的工程操作:
自主编写新的 benchmark,自动生成各 task 所需的 run.py 与 evaluator.py;
将团队现有的评测脚本迁移为标准的 ageval dataset;
自动拉起测试环境跑完指定评测矩阵,并汇总输出不同配置的对比分析报告。

要既能无缝适配多种执行环境(本机、Docker、云沙箱),又能兼容完全不同的 Agent 运行时,关键在于底层两项核心设计:一次运行的五个标准阶段以及基于服务契约的插件机制。
一次运行的五个阶段
ageval 的执行底座是一条确定性的单向流水线:
lock → environment → run → evaluate → record
无论运行过程是成功、失败、超时还是被外部中断,cleanup 钩子都会在 finally 阶段可靠执行,彻底清理容器实例、注销网络并擦除临时凭证。

ageval lock:在执行前静态拦截配置问题:在实际拉起运行环境之前,系统会静态解析出依赖图(ExtensionGraph)。比对环境是否满足 Agent 插件声明的 capabilities 要求,并检查宿主 Docker 守护进程与 API Key 凭证。一旦校验未通过,在 lock 阶段就会直接报错终止,避免运行到半途才因环境缺失而崩溃。
独立评分与参考答案隔离(gold 延迟上传):评分逻辑统一收敛在 valuator.py 中,支持程序化断言测试、产物 diff 校验或 LLM-as-a-judge。参考答案(gold)存放在 tasks//evaluation/ 目录中,在 Agent 执行阶段环境内完全不可见;直到 evaluate 阶段才会挂载上传至打分环境。同时打分容器可以配置为 network: none 断开外网连接,彻底防止模型提前泄题或作弊。
不可变证据链归档(Evidence):运行结束后,执行配置与拓扑快照 lock.json、评分细节 result.json、完整交互事件轨迹 trajectory.jsonl 会被一体化封存归档,确保每一次评测结果都有据可查、可精确复现。
插件机制:基于 export 与 inject 的服务契约
框架内部没有面向特定环境或特定 Agent 的硬编码 if/else 分支,所有组件均通过声明式的服务契约实现解耦:

环境插件(如 docker、e2b、local):对外export提供 environment 服务,并声明自身支持的基础 capabilities(如命令执行 exec、文件上传 upload、终端交互 attach_stdio);
Agent 插件(如 acp、dsh、nooa):通过inject声明自身需要的服务与 capabilities(例如 dsh 声明需要环境提供 exec 与 upload)。
在 lock 阶段校验并编排依赖拓扑:
静态检查 requires capabilities 契约是否成立;
检查通过后生成调度拓扑,运行时基座严格依照拓扑关系分发调用,从而实现 " 基座代码完全不变,环境与 Agent 自由插拔替换 "。
实战:零侵入接入 DeepSeek 官方 harness
以 DeepSeek 开源的 deepseek-harness(dsh)为例。接入 dsh不需要改动 ageval 框架的一行源码,只需要提供一份简明直观的插件声明:
plugins/dsh/plugin.yaml —— Agent 插件声明(节选)
plugin_id: dsh
slots:
exclusive:
- id: executor Agent 执行器
inject:
- service: environment
capabilities: [ exec, upload ]
对于使用者而言,调用 dsh 与运行普通 Agent 完全一致。原有的 dataset 保持原样不动,切换对应的配置文件即可直接执行:
#1. 安装带 dsh 支持的 extras
uv tool install 'ageval-cli [ dsh ] '
#2.dataset 保持不动,指定 dsh 配置开跑
ageval run <dataset> --task <task-id> --profiles profiles.dsh.yaml
快速开始
ageval 现已正式开源。你可以通过 pip/uv 安装 CLI,也可以直接从源码编译体验。
方式一:直接安装 CLI(推荐)
CLI
uv tool install ageval-cli
(含 e2b,dsh,daytona 等)
uv tool install 'ageval-cli [ all ] '
ageval -V
npx skills add ZJU-REAL/ageval
直接运行公开的 dataset,或本地 dataset 目录:
ageval registry list
ageval run <org>/<name>@<version> --task <task-id>
ageval view <org>/<name>@<version>
方式二:从源码体验最小示例
git clone https://github.com/ZJU-REAL/ageval.git
cd ageval
uv sync --frozen --all-packages
uv run ageval run examples/datasets/minimal-demo --task terminal-jsonl-agg
uv run ageval view examples/datasets/minimal-demo
GitHub 仓库:https://github.com/ZJU-REAL/ageval
项目主页:https://zju-real.github.io/ageval
文档与插件指南:https://zju-real.github.io/ageval/docs/
一键三连「点赞」「转发」「小心心」
欢迎在评论区留下你的想法!
— 完 —
【学术投稿】请在工作日发送邮件至:ai@qbitai.com,标题注明【投稿】,并告诉我们:你是谁,从哪来,投稿内容附上项目 / 主页链接,以及联系方式。
我们会 ( 尽量 ) 及时回复你 : )
点亮星标
科技前沿进展每日见