评测实验室 (Eval Lab)
Myrm 内置 评测实验室,让你在 WebUI 中运行测试用例、对比不同 Agent 配置的表现、追踪质量趋势。核心能力
- 单配置评测 — 对当前 Agent 配置运行测试套件,实时查看通过/失败结果。
- 跨配置矩阵评测 — 同一用例集在多个 Agent Profile 上运行,自动检测切换模型前的回归风险。
- 环境可复现性 — 每次评测运行生成冻结的
EvalManifest快照(模型、工具、配置、基准模式),确保结果可复现。 - 基准模式 — 一键切换,剥离用户自定义配置(技能、MCP、记忆、搜索),仅使用核心工具生成公平基线分数。
- 历史趋势追踪 — 通过交互式图表查看通过率趋势。历史表格展示 Profile、模型、通过率、平均耗时和 Token 用量。
- 点击查看详情 — 点击任意历史记录加载完整报告,包含逐用例结果、环境快照和 Diff 视图。
快速开始
- 从侧边栏导航到 评测实验室(或访问
/eval-lab)。 - 在 配置 标签页选择数据集,可选开启 基准模式。
- 点击 运行 开始评测,进度实时更新。
- 在 报告 标签页查看结果 — 摘要卡片、逐用例表格和环境快照。
- 切换到 历史 标签页对比不同运行的表现。
WorkBuddy Bench 基准评测
评测实验室内置 WorkBuddy Bench(腾讯多领域编码 Agent 基准)适配器,覆盖官方全部四个赛道,评分口径与论文一致:下载子集
- 打开 评测实验室 并切换到 WorkBuddy Bench 标签页。
- 每个赛道显示任务数、约体积和本地状态(
未下载/已下载)。 - 点击 下载 在后台从 Hugging Face 拉取归档。进度通过 SSE 实时推送,下载期间按钮禁用。
- 归档会按官方 SHA-256 校验和验证并原子安装——损坏或不完整的归档绝不会被使用。
- 随时点击 刷新 重新读取本地磁盘状态;刚完成的下载会立即把按钮切换为
已下载。
运行评测
- 在已下载的赛道上点击 运行,对该子集的每个任务进行评测。
- 运行期间提供 停止 控制——运行中和下载中均可中止。
- 完成后生成可复现报告(manifest 中记录模型、工具、Profile、评分模式)。
tests/scoring.py 原生评分(无 LLM 判官);Code/Web/Office 走组合验证器——与 WBBench 论文的验收分层一致。
:::
国际权威基准(BrowseComp)
除 WorkBuddy Bench 外,Eval Lab 还接入了 BrowseComp——OpenAI 官方基准,含 1,266 道需要多跳证据检索与网页浏览的真实研究考题。跑出的分数与顶级 AI 实验室引用的任务格式一致,是可以直接对外引用的权威成绩。- 先抽样试跑 — 大基准自动预填小样本(如 1266 题抽 20 题),先用零头 token 成本验证整条链路,再决定是否全量跑。清空样本即全量运行;报告用
sampled徽标如实标注真实抽样的运行,绝不误报。 - 公平基线 — 基准模式剥离你的技能/MCP/记忆,分数只反映「模型 + 核心工具」。
- 前置检查 — 运行前确认基准所需的搜索/嵌入服务已配置且可达,不浪费任何 token。
确定性判分:分层验收引擎(CompositeVerifier)
每个任务的判分由任务自带的测试套件驱动——通过/失败路径中不依赖黑箱 LLM 判分。组合验证器在干净的工作区内执行下载轨道中自带的tests/ 代码,把结果转化为真实的逐轮分数:
- 运行任务自带测试 —
test_suite断言对 agent 的工作区产物执行任务捆绑的测试。结果从 JUnit XML 或纯 reward 脚本退出码解析。 - 逐轮
pass_rate— 多轮对话逐轮判分,第 1 轮通过但后续退化的任务会被及早发现,不再浪费 token(支持可配置的on_turn_fail策略)。 - 无隐藏 LLM 判官 — 解析完全确定性:通过/失败来自测试运行器而非模型读输出,分数可复现且不受 judge prompt 漂移影响。
- 部分通过而非非黑即白 —
skipped测试不计入分母,单个不可收集的 flaky 测试不会拉低真实通过率;reward 脚本输出映射为渐变分数。 - 测试级可见性 — 每个赛道卡片同时显示运行通过率和测试通过率(各轮
avg_pass_rate均值),每份报告携带聚合的测试级均值。
test_suite 超时默认 600s,可按用例配置,因此耗时测试(如编译+运行)能完成而不会被过早终止。
判分模型配置
Semantic(LLM 裁判)断言从不硬编码某家判分模型。判分模型从你自己的配置解析——优先每次运行显式指定,其次断言级字段,最后兜底你的默认模型配置——用你已经在用的任何模型供应商都能判分。每份报告都记录实际参与判分的模型(judge_model),任务原生基准则如实标注 none(无 LLM 判官参与)。
判分诊断:失败不再沉默
判分运行可能在测试产生任何输出前就失败——判分命令可能被沙箱安全策略拦截、超时或崩溃。这些失败现在被精准归因并携带真实证据透出:- 失败归因 — 执行级失败(安全拦截、超时、崩溃)按真实原因报告,不再被误报为「reward 文件不可读」。你能立刻看出判分为何失败:策略拦截、超时还是命令本身报错。
- stdout 尾部透出 — 每条「命令失败」「reward 文件不可读」「JUnit 文件不可读」消息都携带判分命令最多 800 字符的真实 stdout,看到实际输出而非靠猜。
- 计数型 reward 回退 — 只携带
tests_passed/tests_total计数(或tests[]数组)而非完整score.json/reward.json结构的 reward payload,现在能被正确解析判分而非被拒绝为不可读。这镜像官方 WBBench runner 的计数语义,同时兼容轻量判分脚本。
分层评测:每一层能力到底贡献了多少?
「框架真的有用,还是只是模型更聪明了?」分层评测用一次运行回答这个问题:同一批任务沿能力递增链依次运行——从公平剥离的裸基线到完整 Agent 配置——报告展示每一层(Harness 核心、技能、记忆)的增量增益,用实测数据而非宣传话术说话。层链路
如何运行
- 打开 Eval Lab → Matrix 标签页。
- 选择一个已下载的基准,启动 分层 运行。
- 进度实时流式推送(下载字节 → 逐层 case 进度),报告在熟悉的矩阵视图中渲染,每次运行都会进入历史供后续对比。
为什么你可以信任这些数字
- 指纹锁定开关组合 — 每层的
benchmark_mode/skills_enabled/memory_enabled组合以 SHA-256 指纹固化进报告,层定义跨 harness 升级保持可比。 - 完整模型披露 — 报告记录
agent_model、judge_model与harness_version(与 Memory A/B、基准 manifest 同一诚实契约),分数曲线只可能在真实能力变化时漂移——绝不是尺子被挪动。 - 行为证据,不止分数 — 每层报告 Agent 真实调用记忆工具的次数(
memory_tool_calls),「记忆没帮上忙」与「记忆压根没被用」绝不混淆。 - 隔离度量 — 所有层关闭共享上下文、使用一次性记忆卷(SQLite + 嵌入式 Qdrant,跑完 evict 并删除);记忆层的增益反映记忆机制本身,而非你的真实共享记忆。
跨配置矩阵评测
对比不同 Agent 配置处理同一任务的表现:- 在 配置 标签页中,从芯片式多选器中选择 2 个或更多 Profile。
- 选中 2+ 个 Profile 后自动出现 Matrix 模式 标识。
- 点击 运行 Matrix 开始评测。仪表盘自动切换到 Matrix 标签页并显示实时进度:
- 当前正在评测的 Profile
- Profile 进度(如 2/3)
- 用例完成进度条
- 完成后 Matrix 标签页展示:
- 摘要卡片 — 总用例数、稳定率、回归数、总耗时
- Per-profile 表格 — 每个 Profile 的通过率、Token、成本、耗时
- Case × Profile 矩阵网格 — 色彩编码展示每个用例在每个 Profile 上的状态(绿 = 稳定,黄 = 回归,红 = 全失败)
- 用例分类:
- 稳定 — 在所有选中的 Profile 上都通过(可安全切换模型)
- 回归 — 在部分 Profile 上通过但在其他上失败(风险区域)
- 全失败 — 在所有 Profile 上都失败(无论如何需要排查)
记忆 A/B:用数字证明记忆的价值
开启记忆真的让 Agent 变强了吗?记忆 A/B 用并排对比实验回答这个问题,而不是靠营销话术。工作原理
- 打开 Eval Lab → WorkBuddy Bench,选择一个已下载的赛道。
- 点击赛道卡片上的 Memory A/B 按钮——确认对话框会清楚展示将要运行的内容。
- 对话框先探测 embedding 模型:记忆检索依赖 embedding,embedding 缺失或不可达会提前提示,避免浪费一次运行。
- Myrm 对同一批任务分别运行两遍——一遍
enable_memory=True,一遍enable_memory=False——其余配置完全一致。 - 运行进度通过 SSE 实时推送;顶部 Stop 按钮可中止运行并清理现场。
报告
矩阵报告并排展示双臂数据:- 通过率 — 开记忆 vs 关记忆的任务完成率
- Token 与成本 — 记住这些的代价
memory_tool_calls— 记忆工具实际被调用了多少次。如果记忆确实有用,你能看到它真的被用上了——杜绝「记忆已开启却从未被调用」的假阳性。
历史回看
每次记忆 A/B 运行都会写入 Run History 历史表(时间戳、数据集、双臂通过率与memory_tool_calls)。点击 View 可重开任意历史报告——持续跟踪记忆价值是否随产品迭代而变化。
隔离与安全
记忆 A/B 使用临时隔离记忆存储,运行结束后即丢弃——你的真实记忆数据永远不会被触碰或污染。测试覆盖
全链路 Chrome E2E 覆盖(真实浏览器 + 真实后端):卡片入口 + 确认对话框、预置双臂报告 + 历史表渲染、真实运行启动 + 中止——3 个 E2E 测试 + 12 个前端单测。评测工作区生命周期:隔离沙箱,用后即焚
每个评测用例都在物理隔离的工作区(.myrm/eval_workspaces/{case_id})中运行——并发用例永远不会竞争同一批文件,Agent 也只能读写自己的沙箱。生命周期完全自动化:
- 每次运行结束即焚——成功、失败、中止、崩溃全部落到同一条清理路径(
create_session与仅execute的运行同样覆盖),长跑服务永无磁盘堆积。 - 崩溃自愈——进程崩溃遗留的工作区会在下次服务启动时自动清扫,无需人工清理。
- 清理链路防故障——每一步清理(记忆卷释放、目录删除、每个 profile 的工作区)都独立防护,任何一步失败都不会让其余清理泄漏。
评测完整性与去污染:预算控制与轨迹披露
一个基准分数只有当「运行无法作弊」且「报告可以审计」时才值得信任。Eval Lab 把这两点做成结构性保证。去污染运行(HF 泄漏防护)
基准评测期间,Agent 被禁止访问存放标准答案的资源库——最重要的是 Hugging Face(WBBench 各赛道与大量答案数据都托管于此)。纵深防御:- 网页抓取——命中基准阻断名单的 hostname 会立即抛出
benchmark_blocked工具错误。 - 网页搜索——来自阻断 host 的结果在排序/格式化前被静默丢弃,命中阻断查询词的请求直接快速失败。
- Shell / 代码执行——网络策略默认无外网(或严格 allowlist 且不含 Hugging Face),不存在外带答案的旁路通道。
- 报告记录去污染是否开启(
decontam_active),Report 页以徽章展示——「干净的分数」是可证明的,而非假设的。
声明的运行预算
每个第三方基准声明自己的工具调用预算与迭代预算(max_tool_calls / max_iterations):
- 卡壳的 Agent 无法无限烧 token——tool-call 中间件与引擎递归预算强制截断。
- 触达上限立即停止,per-case 报告精确记录是哪个上限截断了运行(
limit_reached,如max_tool_calls/max_iterations)。被截断的用例永远不会与正常完成混淆。 - manifest 记录声明的预算,Report 页展示为 预算 · N 次调用 / M 轮迭代。
轨迹披露
每份报告都暴露分数背后的执行证据:- 工具调用明细——Agent 实际调用了多少次工具(
N×徽章 + tooltip)。 - 拦截次数——去污染守卫拦截了多少次尝试(
Blocked N徽章)。 - 触达上限——哪个预算停止了运行(
Limit徽章,tooltip 显示具体类型)。 - 判分透明——语义判分(LLM-as-a-judge)断言支持可配置的
judge_prompt并写入报告;每次运行都披露agent_model/judge_model(任务原生判分诚实标记none)。精确匹配的答案直接短路判官,琐碎命中从不消耗判分 token。
环境快照
每次评测运行记录EvalManifest:
快照显示在报告标签页的 环境 区域,以及历史表格的 Profile 和 模型 列。
基准模式
在配置标签页切换 基准模式 获取纯净基线:- 系统提示词 → 空
- 工具 → 仅核心工具(无 MCP、无技能、无子 Agent)
- 记忆、搜索、Replan、上下文压缩 → 禁用
编写测试用例
测试用例为 JSONL 文件,每行一个 JSON 对象:Skill 发布质量防线
当技能通过 Myrm 的 Skill Evolution 管线进化时,会经过 5 层防线 才能进入生产:- EvolutionScreener — 5 阶段筛选(锁定 → 强制重试 → 冷却期 → 拒绝历史 → LLM 确认),在消耗资源前阻止无效进化。
- EvalCase 回归门 — 对候选变体运行绑定的 EvalCase。根据失败用例比例施加分数惩罚;100% 失败的变体被直接过滤。
- 改进门 — 将原始技能作为 baseline 竞争者注入。只有真正优于原版的变体才能存活。
- 沙箱验证器 — 在隔离沙箱中执行候选变体,验证其实际可用。
- ConfidenceApprovalFlow — 多信号风控(diff 比率、有效率、置信度阈值)。任何红灯降级为人工 Diff Review。
历史与降级
- 旧报告(在 manifest 追踪之前创建)在 Profile 和模型列显示
-,不会丢失数据。 - 历史表格在窄屏上支持水平滚动。
- 报告加载失败时显示 toast 通知而非静默失败。