跳转至

标题(粘贴到 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。

目标

  1. 多 runtime 输入(同一事件 schema)
  2. Claude Code:本地 JSONL(已有)
  3. OpenCode:兼容(见 eval_mvp/test_dataset/)
  4. 统一归一化事件 → 汇总完成率 / 错误率 / retry / blocker / 产物校验
  5. 精简默认产物(见下方「产物策略」),避免 6 文件全开造成冗余
  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 等)。