| name | eval-report |
| description | 报告管理,包括从运行数据生成 HTML 报告、推送到 storage backend、从 storage backend 下载报告 |
| disable-model-invocation | false |
| context | fork |
Eval Report - 报告管理
管理 CLI 评测报告的完整生命周期:本地生成、上传到 storage backend、从 storage backend 下载。
命令
本地报告
/eval-report <run_id>
生成指定运行的报告:
evals report data "$1" > report-data.json
evals report data "$1" --run-dir <path> > report-data.json
运行目录默认在 ~/.doc-cli-evals/eval-runs/<run_id>;如需指定其他位置,用 --run-dir <path>。
evals report data 也会自动把 JSON 落盘到 <run_dir>/report/report-data.json。
/eval-report open <run_id>
打开已生成的报告:
evals report open "$1"
/eval-report list
列出所有可用的本地报告:
evals report list
上传到 storage backend
/eval-report push <run_id>
推送指定运行的报告到 storage backend(支持 Markdown 报告、截图附件和 trace 链接):
evals report push "$1"
/eval-report list-remote
列出 storage backend 中的远程报告:
evals report list-remote
/eval-report delete <item_id>
从 storage backend 删除远程报告:
evals report delete "$1"
从 storage backend 下载
/eval-report pull <item_id> [output_dir]
从 storage backend 下载报告:
evals report pull "$@"
/eval-report latest [output_dir]
下载最新的报告:
evals report latest "$@"
报告生成流程(本地)
- 输出数据:
evals report data <run_id> 输出包含所有运行数据的 JSON
- 读取模板:读取
skills/eval-report/references/report-template.html
- 填充模板:使用 JSON 数据填充模板中的占位符:
{{RUN_ID}} - 运行 ID
{{DATASET_NAME}} - 数据集名称
{{GENERATED_AT}} - 生成时间
{{TOTAL_CASES}} - 总用例数
- 各 CLI 的通过数与平均分 — 来自
stats.perCli[<cli>],按参与对比的 CLI 动态渲染
{{CASE_SECTIONS}} - 用例详情区块(见下方「用例区块结构」,逐用例逐 CLI 渲染)
{{FRAMEWORK_VERSION}} - 框架版本
注意(CLI 动态化):模板中的 CLI 面板(示例中为 DWS / Feishu)不再硬编码。渲染时应遍历 stats.perCli 与 cases[<case>] 下的实际 CLI 键名,为每个 CLI 生成一个面板/一列。模板中的两栏布局仅为参考样式,实际 CLI 数量以 manifest.clis / 运行数据为准。
用例区块结构({{CASE_SECTIONS}})
完整 HTML 结构示例见模板 report-template.html 中 {{CASE_SECTIONS}} 下方的注释块。生成时严格复用模板中的类名,勿自造新类名(CSS 仅为这些类名提供样式,自造会导致布局错乱)。填充要点:
- 每个用例一个
.case-block,其内每个 CLI 一个 .cli-panel(顺序按 cases[<case>] 的 CLI 键遍历)。
- 评分标准与理由同表:
.rubric-table 列为 类别 | 评分标准(0-5 分级) | 得分 | 理由;评分标准列合并标准名与 refinedRubrics[case][kind][criterion].standards 的 0-5 分级,实际得分档(rubricScores 的 score)对应 .std-level 加 .active 高亮。
- 得分颜色:≥4.5
score-green、≥3.5 score-yellow、否则 score-red;加权总分徽章同理映射 score-high/mid/low。
- 链接:
cases[case][cli].docUrl 渲染 .doc-link(无则省略)。
- 截图:读取
<case>/<cli>/screenshots/*.png 转 base64,doc.png 优先,其余按页码排序。
- 生成报告:将填充后的模板保存为
report.html
- 在浏览器中打开报告:
evals report open <run_id>
推送格式(上传)
Markdown 报告
推送的报告使用 Markdown 格式,包括摘要、详细结果、Traces 链接。
截图附件
截图以附件形式上传到 storage backend 的 Media API,在 metadata 中引用。
下载流程
1. 下载 Markdown 报告
evals report pull <item_id> [output_dir]
这会下载:
report.md - Markdown 报告
metadata.json - 元数据
screenshot-ids.txt - 截图 ID 列表(如果有)
screenshots/ - 原始截图文件(如果有)
2. 生成 HTML 报告(由 Skill 完成)
使用 skills/eval-report/references/report-template.html 模板,读取下载的 Markdown 和截图,生成完整的 HTML 报告。
下载输出结构
report-<run-id>/
├── report.md # Markdown 报告(由 CLI 下载)
├── report.html # 完整的 HTML 报告(由 Skill 生成)
├── metadata.json # 元数据
├── screenshot-ids.txt # 截图 ID 列表
└── screenshots/ # 原始截图文件
数据格式
evals report data 输出的 JSON 结构(CLI 键名均为动态):
{
"meta": { "runId": "...", "datasetName": "...", "...": "..." },
"stats": {
"totalCases": 10,
"perCli": {
"<cli_name>": { "passed": 8, "avgScore": 4.2, "scored": 10 }
}
},
"cases": {
"<case_name>": {
"<cli_name>": { "status": "completed", "rubricScores"
字段说明:
stats.perCli[<cli>] — 每个 CLI 的通过数 / 平均分 / 已评分数(按实际参与的 CLI 动态生成)。
cases[case][cli].docUrl — 文档链接;若 status 中无 docUrl,则由对应 CLI 插件从 docId/nodeId 解析,无法确定时省略。
cases[case][cli].rubricScores — 该 CLI 的评分结果(来自 rubric-scores.json)。
refinedRubrics[case] — case 级共享的 0-5 分细化评分标准(来自 shared-refined-rubrics.json)。
前置条件
/eval-run 已完成(本地报告生成)
- 各用例已有
rubric-scores.json(评分由 eval-run 中的 subAgent 自动完成)
/eval-config 已配置 storage backend(上传/下载)
参考 Skills
- eval-run - 运行评测
- eval-score - Rubric 打分
- eval-config - 配置管理