- Benchmark 汇总说明评测完成了多少任务、得到哪些指标,对应
summary.md和.summary_counts.json。 - 分析器汇总说明轨迹、错误或运行指标中发现了哪些现象,对应
analysis_summary.json和analysis_summary.md。分析结果用于诊断,不会改变 Benchmark 的判定。
details/*.json 保存已经写入磁盘的逐任务记录,也是重新汇总和重新分析时的输入;评测结束时首次生成的 Benchmark 汇总则使用本次运行收集到的结果。
文件一览
运行尚未结束、在汇总前中断或 Benchmark 聚合失败时,
summary.md 可能不存在。启用分析也不一定产生 analysis_summary.*:如果没有任务详情、没有尝试记录,或所有尝试都没有 analysis_result,AgentCompass 不会写入分析汇总。
同一组 Markdown 和 JSON 文件共享一次聚合结果,但会依次写入,不会同时完成。如果进程恰好在写入期间退出,目录中可能只留下其中一个文件。此时可重新运行对应的 summary 或 analysis 命令。
Benchmark 汇总
summary.md
summary.md 是 Benchmark 汇总的可读版本。你可以先用它确认任务计数,再查看 Benchmark 指标及可选明细。
文件依次包含以下部分:
缩略结构如下:
counts、metrics 和 details。结果对象还包含 schema_version(结构版本)和 extra(Benchmark 提供的附加信息),但这两个字段不会写入 summary.md。
三个通用计数的含义如下:
不要假设
evaluated + error = total。Benchmark 还可能区分跳过、没有有效判定等状态,具体计数口径由对应 Benchmark 决定。指标名称、计算方式和数值范围也因 Benchmark 而异,请查阅对应的 Benchmark 文档。
评测正常收尾时,AgentCompass 汇总本次运行收集到的任务结果,其中可能包含尚未写入详情文件的早期错误。单独执行 agentcompass summary 时,它会改为读取 details/*.json。两种结果通常一致;但如果任务在详情写入前就失败,重新汇总时没有对应详情,计数就可能不同。
.summary_counts.json
.summary_counts.json 是三个通用计数的机器可读快照,不包含 Benchmark 指标或分组明细:
summary.md。agentcompass summary 会重新读取 details/*.json 并执行 Benchmark 聚合,不会直接采用这里保存的旧计数。
分析器汇总
分析器的输出先保存在每次尝试的attempts.<index>.analysis_result.<analyzer-family> 中,再按任务、类别和分析器系列汇总到运行级文件。
<analyzer-family> 通常是分析器 ID,也可以是多个分析器实现共用的系列 ID。下文表格中的 analyzer 字段均指这个 ID。
analysis_summary.json
analysis_summary.json 适合程序读取,也包含 Markdown 版本未展示的异常样本文件索引。顶层字段如下:
前四个字段中的统计行使用相同的基本结构:
缩略示例:
多次尝试如何合并
同一任务包含多次尝试时,AgentCompass 按以下规则得到该任务的分析结果:- 优先采用
solved_at指向的尝试;如果没有成功尝试,则采用最后一次已保存的尝试。 - 随后检查其他尝试。如果某个分析器返回
is_badcase=true,该分析器的任务级判定会设为true;只有首选尝试没有该分析器时,才会连同该次结果的score和details一并补入。其他尝试中的false或null不会补入。 - 同一任务在同一分析器的统计中最多计数一次。
badcase_count 表示至少被一个分析器标记的任务数,error_count 表示至少出现一个分析器错误的任务数,因此两者都不是各分析器对应计数的总和。计算合并行的 avg_score 时,每个任务贡献其所有可用分析器得分中的最大值。
汇总还会省略部分没有有效内容的行:
- 如果一个用于检查异常样本的分析器在整个运行中既没有发现异常样本也没有报告错误,该分析器不会出现在汇总中;只提供统计、不返回
is_badcase的分析器,以及包含错误的分析器仍会保留。 - 对于已经保留的分析器,如果某类别有布尔判定但结果全部为
false且没有错误,该类别行不会显示;如果该类别完全没有该分析器的结果,当前结构可能仍保留一行total: 0。
distributions
分析器可以通过 distribution_fields 声明需要汇总哪些结果字段。结果按 distributions.<analyzer-id>.<category>.<field> 组织,支持两种方式:
跨类别统计使用
__overall__ 作为类别键,没有类别的任务使用空字符串。对于已保留且声明了相应分布字段的分析器,value_counts 即使没有收集到值,也会显示 total: 0 和空的 distribution;numeric_stats 只有在收集到数值后才会出现。
同一次运行中的任务应统一使用类别:要么每条详情都有非空
category,要么全部不使用类别。自定义 Benchmark 如果混用这两种任务,分析汇总可能无法生成。analysis_summary.md
analysis_summary.md 是同一次分析聚合生成的可读版本,依次包含:
- Benchmark 和 model 标题;
Overall表,按分析器显示Total、Badcase、Error、Badcase Ratio和Avg Score,并包含合并所有分析器的__overall__行;- 每个任务类别的同结构表和
__overall__行; - 存在分布数据时显示的
Distributions部分,其中包含数值统计表和值频次表。
overall_per_analyzer[].items 中的全部详情文件名。如果需要按分析器定位异常样本,请读取 analysis_summary.json。
生成和重新生成结果
随评测生成
agentcompass run 和 agentcompass launch 会在每个评测请求成功完成 Benchmark 聚合后写入 summary.md 和 .summary_counts.json。如果启用了分析且存在可聚合结果,还会写入 analysis_summary.json 和 analysis_summary.md。
重新生成 Benchmark 汇总
agentcompass summary 读取已有的 details/*.json、运行元数据和恢复出的 Benchmark 配置,默认原地覆盖 summary.md 与 .summary_counts.json。它不会运行 agent、Benchmark 验证器或分析器,也不会修改任务详情。
使用 agentcompass summary --dry-run 时,命令只在终端输出 Markdown,不修改运行目录中的文件。
重新运行分析器
agentcompass analysis 从已保存的尝试字段、规范化轨迹及其步骤指标和错误中恢复输入,并对每个可读取的尝试运行分析器。有新输出时,命令会更新 analysis_result,然后生成两种分析汇总文件。
该命令不会重新运行 agent 或 Benchmark 验证器,也不会重新计算 summary.md。如果分析器跳过某次尝试,或分析流程在产生新结果前失败,原有的 analysis_result 可能保留。
默认情况下,agentcompass analysis 会复制输入运行,并把结果写入带时间戳的同级目录。使用 --output 可以指定副本位置;只有使用 --override 才会在原目录中更新分析字段和汇总。
重新分析会从已保存字段重建分析输入,但无法还原所有评测时的上下文,例如轨迹步骤中的工具定义、meta 和每次尝试的解析后计划。依赖这些信息的分析器可能得到与随评测运行时不同的结果。
如果本次分析没有产生可聚合结果,AgentCompass 不会删除目标目录中已有的
analysis_summary.*。因此,仅凭文件存在不能判断它是否在本次分析中更新。通过 --benchmark-params 中的 sample_ids 只会限制重新运行分析器的任务;生成最终汇总时仍会扫描目标目录中的全部详情,并可能纳入未选任务原有的 analysis_result。summary.md 不会重新运行分析器;重新分析也不会更新 Benchmark 指标。
