跳转到内容

基准数据集方法论

Jarvis 的基准数据集不是单纯比较模型代码生成能力的排行榜。它要衡量的是一个完整编码工作台在真实工作流里的质量:模型、prompt、运行时适配器、Session OS、工具链、上下文策略和人工介入通道共同工作后的结果。

在自动化评测流水线之前,先建设数据集和文档有三个原因:

  • 定义要优化的产品行为:没有稳定任务和指标,流水线只能放大临时经验,不能回答“这次 prompt 或模型切换是否真的更好”。
  • 让指标可复查:每个任务都要说明来源、成功条件、排除项和局限,避免把一次 demo 成功误当作稳定能力。
  • 把 Session OS 纳入质量判断:Jarvis 的差异点不只是能写代码,而是能发现、复用、检查和协调多个编码会话;这些能力必须进入首批数据集。

这份方法论页面属于解释性文档。它说明为什么这么测、首批测什么、每个指标服务哪些产品决策;具体数据集和 runner 合同放在仓库 benchmarks/jarvis_eval/。当前公开 workflow 只在手动触发时运行 deterministic backend-contract smoke,不跑 live LLM。

每个分数都应明确指向“模型 + Jarvis scaffold + 工具 + 预算 + 环境”的组合,而不是归因给裸模型。

层级 评估对象 典型问题
任务级 单个任务是否完成 代码是否修好、文档是否写对、输出 artifact 是否存在、测试是否通过
轨迹级 Agent 是否走了合理路径 是否选对工具、是否先 inspect 再行动、是否避免无效重试、是否在阻塞时升级
会话级 Session OS 是否让工作可被发现和接续 find_sessions 是否找对会话、短 ref 是否解析正确、摘要和 digest 是否新鲜
平台级 成本、可靠性和回归风险 成功一次要花多少钱、是否依赖 fallback、同一任务重复运行是否稳定
  1. 从产品决策反推指标:每个指标都要能指导具体决策,例如模型选择、prompt 调整、Session OS 改造或回归拦截。
  2. 最终状态和执行轨迹都要看:只看最后答案会漏掉错误会话操作、无效工具链、过度 fallback 和不必要的人工打断。
  3. 可确定的先确定,不确定的显式人工审阅:代码测试、文件状态、事件序列和 DB fixture 可自动判定;含糊需求和解释质量要保留人工 rubric。
  4. 首批任务覆盖现有能力和关键缺口:已有 coding-agent benchmark 可复用,但必须补上 Session OS 的发现、复用、缓存、摘要、回放和交付物路径。
  5. 不把生产隐私变成测试样本:生产日志只能用来归纳失败模式,数据集任务要脱敏、可复现,并避免包含私人路径、会话正文或密钥。
  6. 版本化维护:任务、oracle、指标和排除规则都要有版本;报告必须写清 denominator、排除项、重复次数和环境版本。

首批任务按高信号路径选择,而不是按最容易自动化的路径选择。代码生成任务仍然重要,但 Jarvis 的核心风险更多出现在“找到对的会话、判断能不能接续、用对上下文、在正确时机叫人”这些工作台层行为上。

优先级 任务 要证明什么
P0 Harness integrity 评测框架能区分纯成功、fallback、成本、耗时和 GO/NO-GO,避免指标本身失真
P0 Completion discipline Agent 需要声明输出 artifact,并满足文件、测试或状态 oracle,而不是只说“已完成”
P0 Session inventory 能列出会话状态、运行时、来源、可用动作和分页边界
P0 Keyword search 能用一个短关键词调用 find_sessions,理解它是 substring search,并检查 matched_in
P0 Ref handling 能正确使用 cc1cx1oc1km1 等活会话短 ref,并在失效时回退完整 cs_ ID
P0 Inspection before action 对有风险的派发、停止、接管或回复操作,先检查会话 transcript、状态、workspace 和 interventions
P0 Digest accuracy 回答数量类问题时使用 digest 的 totals,不把当前页 page_count 当全量
P0 Reuse/control choice 能区分继续派发活托管会话、resume 已退出原生会话、takeover 空闲外部会话和新开会话
P0 External-read-only safety 不假设外部发现会话可写入终端、停止或中断;只按 allowed actions 行动
P1 Event replay/streaming 能按 after_seqlimitLast-Event-ID 处理事件回放,不重复也不漏判
P1 Deliverables 优先使用交付物投影和结构化 metadata,而不是从终端 transcript 猜 artifact
P1 Projection/cache awareness 能区分 durable session row/event 与摘要、短 ref、终端 tail、运行时扫描缓存等可重建投影

首批指标分成结果指标、轨迹指标、Session OS 指标和平台指标。它们可进入离线报告和回归门禁,但不同门禁可以只选择其中一部分。

指标 定义 测量方式 指导决策
task_success_rate 任务在当前 oracle 下完成的比例 文件、测试、DB 状态、事件状态或人工 rubric 判断某个模型 / prompt / runtime 是否可作为默认路径
pure_success_rate 不依赖 fallback 的成功比例 成功结果中排除 fallback run 判断默认 runtime 是否真的可用,而不是被兜底掩盖
completion_oracle_pass_rate 输出 artifact 或最终状态满足任务规格的比例 file_contains、focused tests、状态断言、人工 rubric 防止“口头完成”进入回归数据
tool_selection_accuracy 第一步或关键步骤是否选对工具 trace 中的工具调用与 expected tool / chain 对比 调 prompt、工具描述和主会话工具暴露顺序
parameter_accuracy 工具参数是否正确、最小且可执行 对 session id、path、q、limit、after_seq 等参数打分 修正工具 schema、示例和模型路由
trajectory_required_step_rate 必需步骤是否出现 例如先 inspect_session 再 dispatch / stop / takeover 判断 agent 是否可靠地遵守工作台操作纪律
session_discovery_topk_recall 正确会话是否出现在 list/find 前 K 个候选中 固定 session fixture + expected session set 优化发现排序、摘要生成和搜索入口
wrong_session_action_rate 对错误会话执行写入、停止、接管或回复的比例 trace 中 mutating action 的 session id 校验 决定是否收紧确认、ref 解析和高风险动作门禁
session_ref_resolution_accuracy 短 ref 是否解析到正确活会话 cc1/cx1/oc1/km1 fixture + restart/stale 场景 决定短 ref 展示、过期提示和 fallback 交互
stale_ref_recovery_rate 短 ref 失效时是否停止并请求重新定位 stale alias fixture + expected recovery behavior 降低误操作风险,改善错误提示
session_utilization_rate 需要会话上下文的任务中实际使用 Session OS 的比例 trace 中 list/find/inspect/digest/replay 调用覆盖率 判断主会话是否真的把 Jarvis 当工作台,而不是裸聊天
session_reuse_rate 应复用已有会话时选择复用的比例 fixture 标注 expected action: dispatch/resume/takeover/new 决定默认策略是新开会话还是继续上下文
reuse_lift 复用会话相对新开会话带来的成功率、成本或耗时改善 A/B:reuse allowed vs forced new session 决定是否强化“找到并接续旧会话”的产品入口
summary_cache_fresh_rate 摘要投影与最新事件状态一致的比例 summary last event seq / age / semantic freshness check 决定摘要刷新策略、失效策略和是否展示置信状态
prompt_cache_hit_rate 支持缓存的运行时中 prompt/cache 被复用的比例 provider/runtime telemetry 或可观测用量 metadata 比较模型和上下文策略的成本效率
digest_total_accuracy 数量类回答是否使用真实 totals 固定 session count fixture + answer/rubric 防止分页误读导致错误运营判断
event_replay_integrity 回放和 stream 是否没有重复、缺失和顺序错误 event seq fixture、after_seqLast-Event-ID 检查 决定 SSE / replay 改动能否合入
deliverable_capture_rate 应产生交付物的任务是否写入结构化 deliverable deliverable projection 与 artifact metadata 校验 决定是否可以让主会话依赖交付物视图做验收
external_session_safety_rate 外部只读会话是否没有被错误写入或中断 allowed actions fixture + trace 检查 保护用户已有终端会话,降低破坏性误操作
blocked_escalation_latency 发现缺权限、缺决策或无上下文后多久升级 trace 时间戳:问题出现到 ask_human / notify_blocked 调整 worker prompt 和超时策略
cost_per_success 每个纯成功任务的平均成本 用量和成本 telemetry 除以 pure successes 指导 Sonnet、Opus、GPT、Kimi 等模型的默认选择
产品决策 主要看哪些指标
默认模型选型 pure_success_ratecost_per_successblocked_escalation_latencytrajectory_required_step_rate
prompt 和工具描述调优 tool_selection_accuracyparameter_accuracywrong_session_action_ratestale_ref_recovery_rate
Session OS 发现能力 session_discovery_topk_recallsession_utilization_ratedigest_total_accuracy
会话复用产品策略 session_reuse_ratereuse_liftsummary_cache_fresh_rateprompt_cache_hit_rate
高风险动作门禁 wrong_session_action_rateexternal_session_safety_ratetrajectory_required_step_rate
回归检测 task_success_ratecompletion_oracle_pass_rateevent_replay_integritydeliverable_capture_rate
发布前质量判断 pure_success_rate、fallback count、docs/build/test gate、关键 Session OS 指标

每个数据集任务都应像一张小型 datasheet,而不是只有一段 prompt。

字段 作用
idversiondifficulty 支持长期追踪、分层汇总和回归定位
product_decision 说明这个任务影响哪个真实决策
setup_fixture 固定仓库、文件、会话、事件、DB 或运行时前置状态
user_prompt Agent 实际看到的用户任务
allowed_tools / forbidden_actions 明确安全边界,尤其是外部会话和 destructive action
expected_trace 关键工具、顺序、参数和必须出现的检查步骤
expected_state 文件、测试、DB、事件、deliverable 或 UI 状态 oracle
rubric 自动 oracle 覆盖不了时的人工审阅标准
privacy_class 标记是否可公开、是否脱敏、是否禁止进入训练或外发
limitations 说明该任务不能证明什么

第一版可运行 harness 采用 ports + adapters,而不是让 runner core 直接依赖 Jarvis 数据集或后端实现。

责任
harness/core/ 通用 EvalTask、trace、evidence、score、runner、threshold,不 import Jarvis backend 或 v0 fixture
dataset adapter 读取 v0 manifest、跑 schema/static validator、把 case/fixture 映射成通用任务
environment adapter 为每个 case 创建隔离临时 SQLite DB,并写入合成 Session OS fixture
tool executor adapter 作为唯一明确边界调用真实 src.tools.* Session OS 工具模块
oracle adapter 根据 v0 rubric 检查工具调用、参数、输出事实和 forbidden action
report adapters 输出 JSON、Markdown 和 GitHub step summary

因此,MVP harness 的默认问题是:“Jarvis backend 在合成 Session OS fixture 上是否仍满足工具合同?”而不是“某个 live 模型是否会自己选对工具”。当前 shipped runner 只实现 backend-contractagent-live / http-contract 是保留模式名,必须等真实 adapter 落地后才能运行,且不进入普通 PR CI。

run_eval.py 会生成机器可读 JSON 和人类可读 Markdown;GitHub Actions 手动运行时,同一份 Markdown 也会写入 step summary。报告顶部会链接回本页、数据集卡和 harness README,因为单个报告只回答“这一次 run 的结果是什么”,不重复展开完整方法论。

字段 含义 阅读方式
Run ID 本次运行生成报告的 UTC 时间戳 用来对应 artifact、日志和手动 workflow run
Mode 当前 runner 模式 v0 只有 backend-contract 已实现;这不是 live LLM 评分
Dataset 数据集 ID 和版本 对比历史结果时必须确认 dataset 版本一致
Thresholds 所有配置阈值是否通过 pass 代表本次所选 split/trial 满足门禁,不代表覆盖所有 Jarvis 能力
Total cases 本次实际计入分母的 case 数 当前 CI smoke 是 10 个 public smoke case × 1 trial
Case pass rate 通过 case / 总 case 用来判断端到端 deterministic contract 是否保持
Oracle pass rate 自动 oracle 检查通过率 失败时优先看 case errors 和 JSON trace/evidence
Backend tool success rate 真实 Session OS tool adapter 调用成功率 用来区分 backend contract 破损和 oracle 不满足
Forbidden tool call rate 命中 forbidden tool/action 的比例 任何非零值都说明安全边界或 trace 约束需要复查

解读失败报告时先看 Cases 表中的失败 case,再打开 JSON artifact 查看该 case 的 traceevidencechecks。如果报告由 GitHub workflow 产生,artifact 只短期保留;需要长期比较时,把 JSON/Markdown 保存到明确的 benchmark evidence 或 release 记录中。

数据集和 harness 源文件位于仓库中的以下路径:

  • 数据集卡:benchmarks/jarvis_eval/DATASET_CARD.md
  • v0 manifest:benchmarks/jarvis_eval/v0/manifest.json
  • v0 cases:benchmarks/jarvis_eval/v0/cases/
  • harness core:benchmarks/jarvis_eval/harness/core/
  • Jarvis adapters:benchmarks/jarvis_eval/harness/adapters/
  • CI smoke config:benchmarks/jarvis_eval/configs/ci.smoke.toml
  • local dev config:benchmarks/jarvis_eval/configs/local.dev.toml

本地 smoke:

终端窗口
python3 benchmarks/jarvis_eval/scripts/validate_dataset.py benchmarks/jarvis_eval/v0/manifest.json
python3 benchmarks/jarvis_eval/scripts/run_eval.py \
--config benchmarks/jarvis_eval/configs/ci.smoke.toml

CI 文件是 .github/workflows/jarvis-eval.yml,使用 self-hosted jarvis-light runner,并且只通过 workflow_dispatch 手动触发。它不会在 PR 或 main push 上自动运行;手动运行会在临时 venv 中验证 public dataset、跑 focused benchmark unit tests、执行 backend-contract smoke harness、输出短期保留的 JSON/Markdown artifact,并把摘要写入 GitHub step summary。

首批 Jarvis benchmark 不应声称覆盖这些能力:

  • 广义软件工程能力或所有语言生态;
  • 长期无人值守自治;
  • 生产用户私人会话的真实成功率;
  • 未经校准的 LLM judge 结论;
  • 单一模型的纯能力,脱离 Jarvis scaffold、工具和预算单独比较。

这些边界不是弱点,而是保证指标能服务产品决策的前提。

这套设计吸收了几类公开最佳实践:

  • Diátaxis 区分教程、指南、参考和解释;本页放在“核心概念”,因为它解释评估设计的理由。
  • Datasheets for Datasets 和数据卡实践强调记录动机、组成、采集、用途、限制和维护责任。
  • OpenAI agent evalsLangSmith complex agent evaluation 都强调除最终答案外,还要评估 trace、工具调用、trajectory 和单步决策。
  • SWE-bench Verified 说明真实 issue 需要人工过滤,避免规格含糊和 oracle 不公平。
  • Terminal-Benchτ-benchWebArena 的共同经验是:agent benchmark 要提供可复现环境、工具或网站状态,并用最终状态和轨迹共同判断长链任务。