从会话轨迹离线评测 Agent 工作流¶
- 沉淀时间:2026-09-09
- 来源:IK600G / PR #6;
offline-eval-workflow-review.md - 成熟度:
provisional - 适用范围:需要从 Claude Code、OpenCode 等运行日志判断业务流程完成度的场景
定位¶
平台日志能回答 token 和工具调用次数,却不知道 SQL 优化的 baseline、table context、precheck、execute、write result 是否按顺序完成。离线评测器应把不同运行时日志投影到统一业务事件,再计算 case 级指标。
Claude JSONL ─┐
├─ 只读适配器 → sqlopt-workflow-event/v1 → case 报告
OpenCode JSONL┘ └→ artifact 校验
设计原则¶
- 对源会话只读,不写回平台数据库或修改其 schema。
- 运行时适配与业务事件分离;Claude 和 OpenCode 使用同一事件 schema。
- 历史日志推断出的事件统一标记
trace_quality=inferred。 event_id和tool_call_id必须包含 session / agent 维度,避免多 Agent 冲突。- trace 侧 blocker 与产物侧 terminal status 分开记录,两者可能不一致。
- artifact 校验以评测时可见的正式结果文件为准。
默认产物¶
默认输出控制在少量且不同粒度的文件:
| 产物 | 粒度 | 作用 |
|---|---|---|
workflow_events.jsonl |
tool / stage 事件 | 可审计明细 |
workflow_report.csv |
case | 人眼看板与完成度 |
trace_manifest.json |
run | 输入 hash、格式与产物清单 |
工具调用 CSV、全局 metrics 和独立 artifact 表可放入 --full 模式,避免默认产物互相重复。
测试方法¶
- 固定输入 fixture,生成 golden 输出。
- 对路径、run_id、时间戳等易变字段归一化。
- 比较阶段分布、完成状态、blocker、artifact 校验等稳定字段。
- case_id 识别覆盖生产命名,不能只匹配单一前缀或固定数字长度。
- fixture 必须脱敏,不能把生产凭据或内网连接信息带入仓库。
反模式¶
- 从工具调用次数直接推断业务流程成功。
- 将不同粒度的数据强行压成一张无冗余宽表。
- 为适配 OpenCode 而直接修改其数据库。
- 固化解析错误却不记录 known issue。
- 测试只断言文件存在,不比较业务字段。
限制与待验收¶
本地审查记录显示主路径和测试已跑通,但 PR #6 仍开放;敏感 fixture、事件文件命名和 OpenCode 数据库直读仍有未关闭事项。合入前应先完成这些门禁。