标题(粘贴到 Gitee Title)¶
feat(eval_mvp): 离线会话解析 SQL 工作流评测(Claude + OpenCode 只读兼容)
正文(从下一行开始整段粘贴到 Gitee Description)¶
从 Agent 运行留下的会话日志(Claude Code JSONL / 后续 OpenCode)离线推断 SQL 优化工作流是否跑完,产出可审计的事件与 case 级指标。
相关分支:feat/offline-eval-workflow
相关代码:eval_mvp/(已有 Claude JSONL reader PoC)
背景¶
SQL 优化 skill(sql-opt / sql-distributed)在 Agent 里按阶段执行(baseline → table_ctx → precheck → execute → write_result)。线上/离线跑完后,需要回答:
- 哪些 case 走完了必经阶段?
- 卡在哪一类 blocker?
{case}_result.json是否真实落盘且格式合法?- 工具失败 / 重试有多频繁?
Claude / OpenCode 自带的是平台会话与用量指标(token、工具次数等),没有「本 skill 五阶段是否完成」的业务语义。因此需要本仓的离线 reader:把历史会话投影成统一事件契约 sqlopt-workflow-event/v1,再汇总指标。
当前 PoC(eval_mvp/claude_trace_reader.py)已覆盖 Claude Code 主会话 + subagents/*.jsonl,全量事件标记 trace_quality=inferred。
目标¶
- 多 runtime 输入(同一事件 schema)
- Claude Code:本地 JSONL(已有)
- OpenCode:兼容(见
eval_mvp/test_dataset/) - 统一归一化事件 → 汇总完成率 / 错误率 / retry / blocker / 产物校验
- 精简默认产物(见下方「产物策略」),避免 6 文件全开造成冗余
- 可复现测试:固定输入 fixture → 默认精简产物 → 仓内期望输出文件 → unittest diff
说明¶
- OpenCode 会话落在其自带 SQLite(
opencode.db)。本工具若触达该库,仅 只读 投影为统一事件,不写回、不改 schema、不另建会话库。 - 历史日志无稳定业务事件 schema,归一化结果统一标
trace_quality=inferred;产物校验以评测时本地可见的{case}_result.json为准。
产物策略(精简)¶
当前 PoC 默认写出 6 个文件,粒度重复:
| 文件 | 粒度 | 建议 |
|---|---|---|
workflow_events.jsonl |
每次 tool_call | 默认保留(明细真相) |
artifact_checks.csv |
每 case 的 result 校验 | 默认保留(或并入 report 列) |
workflow_report.csv |
每 case 汇总 | 默认保留(人眼主看板) |
workflow_metrics.json |
整次 run KPI | 落盘 或 仅 stdout;二选一 |
tool_calls.csv |
events 的 CSV 镜像 | 默认关闭(--full 再开) |
trace_manifest.json |
输入文件 sha256 | 建议保留(复现审计,体量小) |
关联键:run_id + case_id。不要强行压成一张无冗余扁表(tool 行与 case 行粒度不同);需要单文件时再提供可选 denorm 宽表。
验收标准¶
- OpenCode 输入可跑通,README 写明只读边界
- 事件带
trace_quality=inferred -
case_id识别覆盖现网命名(含gcsdb_NNNN等,不限于\d{4}tdsql_...) - 默认产物 ≤ 4 个文件(events + report + artifacts/manifest;metrics 策略写清)
- 用
eval_mvp/test_dataset/session_full_export.jsonl跑默认精简产物,期望结果检入eval_mvp/tests/fixtures/expected/,unittest 做稳定字段 diff(路径/run_id/时间戳先归一化) - README 写清:输入格式、默认/完整导出、OpenCode 只读边界、字段说明
测试数据¶
已提供(eval_mvp/test_dataset/):
| 文件 | 用途 |
|---|---|
session_full_export.jsonl |
OpenCode 会话完整导出,测试输入 fixture |
opencode-db.txt |
opencode.db 表结构说明(文档,不参与自动对比) |
期望输出(待生成并检入):eval_mvp/tests/fixtures/expected/ 下对应默认产物(events / report / manifest 等)。