dsh-session-eval
Retrospective agent-session evaluation: deterministic grade cards and cross-session regression diffs from persisted logs — no benchmark runs, no LLM judges.
Install
dsh plugin --profile web add dsh-session-eval
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-session-eval
[English](README.md) | 中文




DeepSeek Harness 会话的回溯式评测:对已经发生的会话做确定性等级评定,跨会话回归对比,回答"换了插件 / prompt / 模型之后,我的 agent 是变好了还是变差了?"
不需要编写基准测试集,没有 LLM 裁判,不需要跑新任务。所有等级 = 持久化会话日志上的固定公开阈值——完全可复现。
安装
环境要求:Node.js 20 或 22 · 挂载了 commands 与 sessionQuery 服务的 DeepSeek Harness profile(官方 web / agent profile 均满足)。
dsh plugin --profile web add dsh-session-eval
或从 GitHub:
dsh plugin --profile web add github:kittimzhe/dsh-session-eval
bundle 覆盖层会挂上 /eval、/eval-diff、/eval-history。若你维护自己的 cordis.patch.yml,请保留这一行:
- insert:
- id: session-eval
name: 'dsh-session-eval'
试一次
在 DeepSeek Harness 里:
/eval
Session eval — a1b2c3d4… (dsh-session-eval v0.2.2) Overall: A Reliability A 2/87 tool results errored (2.3%) Re-ask A 1 re-ask signal(s) over 23 turns (0.4/10 turns) Tool load B 3.8 tool calls per turn Notes: • Wall time 41.2 min over 23 turns.
会话工具链的评测层
插件 · 层 · 回答的问题
dsh-session-export · 证据层 · "这个会话到底发生了什么?"
dsh-session-recall · 记忆层 · "我以前做过什么,在哪?"
dsh-session-eval · 评测层 · "刚才的会话好不好?趋势在变好吗?"
三者都通过同一个可信的 ctx.sessionQuery 缝读取,JSONL / SQLite 等任何持久化后端均可使用。
证据联动闭环(#8)
/eval --report 直接从 dsh-session-export 已写出的产物评分——不用抄会话 id,会话从存储中删除后依然可评:
recall "resume template font" → session session-ca62e005-… · report /proj/dsh-transcripts/bundle-ca62e005-20261104-120000.zip /eval --report /proj/dsh-transcripts/bundle-ca62e005-20261104-120000.zip
接受 bundle ZIP(内嵌 archive.zip 原始 JSONL)与裸 /archive ZIP。里面的 JSONL 就是权威事件日志——与 readSession 返回的是同一份字节——所以 --report 与 /eval --id 评分完全一致(用真实 dsh-session-export 写入器做过往返测试)。--id 与 --report 互斥。
贡献
- 本地开发:
npm ci && npm run typecheck && npm test && npm run bundle(Node 20 或 22)。 - 源码入口:[
src/grade.ts](src/grade.ts)(阈值与等级卡)、[src/metrics.ts](src/metrics.ts)(指标提取)、[src/trend.ts](src/trend.ts)(/eval-history趋势逻辑)。源码地图与第一次 PR 建议见 [CONTRIBUTING.md](CONTRIBUTING.md)。 - 当前缺口:#1(阈值可配置)与 #2(
/eval-history --since)已在 v0.3.0 落地——或浏览good first issue标签。 - 规矩:行为变更必须带测试;文档必须
README.md与README.zh.md同步改;版本发布由维护者执行。详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
与基准式评测(dsh-eval)的区别
· dsh-eval(基准) · dsh-session-eval(本插件)
评什么 · 预先发起的运行 · 已经发生的会话
准备 · 编写基准 YAML + 用例 · 零——直接读存量日志
裁判 · 跨 trial 的指标折叠 · 固定阈值,确定性
擅长 · 上线前基准 · 真实工作的回归追踪
两者互补而非竞争:基准测你预测到的场景,回溯评测看实际发生的工作。
命令
命令 · 效果
/eval · 当前会话等级卡
/eval --id <会话ID> · 指定会话
/eval --json · 机器可读指标 + 等级卡
/eval-diff <前ID> <后ID> · 回归对比(带噪声带)
/eval-diff … --json · 机器可读趋势报告
/eval-history [N] · 本工作区最近 N 个会话成绩单 + 首末趋势
/eval-history … --json · 机器可读历史报告
/eval-history --since 7d · 只评窗口内有活动的会话(也支持 24h、30d)
--since 按最新活动时间过滤,而非创建时间:很久前打开但一小时前还活跃的会话留在窗口内;刚创建但一直沉默的会被排除。--since 7d 下趋势对比的是窗口内首末两个会话;窗口为空时打印明确提示而不是崩溃。不加该参数时行为与从前完全一致(最近 N 个)。
使用 /eval-history --out report.md 将终端卡片保存为 Markdown,添加 --json 则保存 JSON。相对路径基于当前会话工作目录(缺失时使用进程工作目录)。父目录必须已存在;写入失败会返回错误,不会创建目录。已存在的输出文件会被覆盖。
/eval-history 通过与 /archive 相同的 sessionQuery 接缝自动找到会话(按当前工作区 cwd 过滤),逐个评级,并把首尾两个会话做趋势对比——不用再手动挑 id。已经知道两个关键 id 时用 /eval-diff。
典型用法:换插件或 prompt 前后各评十个会话;Reliability 持续回归 = 改动伤害了真实工作的早期预警。
配置等级阈值
阈值是默认值而非铁律。在插件配置节点下(天然按 profile 区分)加 gradeBands 块即可覆盖任意维度——值为 A–D 各档上限、升序:
session-eval:
gradeBands:
reliability: [4, 8, 15, 30] # 工具错误率百分比
reask: [0, 2, 4, 8] # 每 10 个用户轮次的纠错次数
toolLoad: [0.1, 0.5, 8, 20] # 每轮工具调用数:[lowC, lowB, highC, highD]
可只覆盖部分维度;未列出的保持文档默认值。未知键、元素个数不对、非数字、负数或非升序,都会在插件加载时以可读错误快速失败——绝不会对着没人选过的阈值评级。
维度与阈值(确定性,无裁判)
维度 · 指标 · A · B · C · D · E
Reliability · 工具错误率 · ≤5% · ≤10% · ≤20% · ≤35% · >35%
Re-ask · 每 10 轮纠正信号¹ · 0 · <1 · <2 · <4 · ≥4
Tool load · 每轮工具调用 · 0.5–8 · 0.1–0.5 · <0.1 或 8–20 · >20 · —
¹ 纠正信号 = 连续用户消息中多出的那条(agent 还没回复用户就重问)——"第一次没做对"的行为学代理指标。
总评 = 最差维度(保守设计)。阈值是 [src/grade.ts](src/grade.ts) 中的常量;可配置化在路线图上(见 issue)。
Diff 判定带噪声带(错误率 ±2pp、Re-ask ±0.5、工具负载 ±1),微小抖动不会误报回归。
确定性保证
同样的日志进 → 同样的等级出。没有模型在环、没有采样、指标不含时钟依赖(wall time 只报告不评级)。这是 /eval-diff 能作为回归信号被信任的原因。
开发
npm ci npm run typecheck # tsc --noEmit npm test # vitest run npm run bundle # tsdown → lib/
许可
[MIT](LICENSE)
社区
- [贡献指南](CONTRIBUTING.md) · [安全策略](SECURITY.md) · [行为准则](CODE_OF_CONDUCT.md)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::9,最后更新 2026-11-05