Skip to content

Latest commit

 

History

History
90 lines (63 loc) · 5.11 KB

METRICS.md

File metadata and controls

90 lines (63 loc) · 5.11 KB

指标与实测记录

统计口径、原始命令、样本量、结论和局限都在这里。所有数字都可以用仓库里的 scripts/measure-prose.mjs 复跑。

口径

  • 实质回复:去掉代码块后可见字符 ≥ 120,且句子数 ≥ 2。
  • 首屏结构化(主口径):回复前 300 个字符内出现 ≥2 行表格、≥2 个清单项、≥2 个标题,或 ≥1 个 dsh-ui 组件块。首屏在原文上截取;dsh-ui 计入结构,普通代码块内容不计(避免代码里的 | / - 误判)。
  • 散文违规:实质回复、首屏不结构化、且句子数 ≥ 3。
  • 散文率:散文违规数 ÷ 实质回复数。
  • 整篇口径(对照):只要回复任意位置出现上述结构就算结构化。两个口径同时输出,避免只挑好看的数。
  • 口径细节:句子按 。!?!?;;\n 与 . 切分后、长度 ≥6 字符的片段计数;表格按行计数(含表头与分隔行);--since-days 是相对时间窗,--before 按会话文件 mtime 过滤,因此 737/6159/5727 这组数只在窗口不变时可复现。
  • 与人工基线的差异:37.5% 是人工抽检 56 条的结果,38.7% 是全量脚本口径,相差 1.2 个百分点,视为同一量级。

为什么用首屏:需求是「老板点开就能扫到结论和组件」。结构埋在 800 字之后,整篇口径会算它合规,但阅读体验没有改善。首屏口径在历史语料上复现出接近人工审计的基线(见下)。

1. 改前基线(历史会话,插件未安装)

  • 时间窗:最近 30 天,写入时间早于 2026-10-20T21:35:00+08:00(插件首次安装时刻)。
  • 样本:737 个会话 / 6159 条最终回复 / 5727 条实质回复。
  • 命令:
node scripts/measure-prose.mjs --since-days 30 --before "2026-10-20T21:35:00+08:00"
node scripts/measure-prose.mjs --since-days 30 --before "2026-10-20T21:35:00+08:00" --whole
口径 结构化 散文 散文率
首屏(主) 3494 2216 38.7%
整篇(对照) 4746 964 16.8%

与任务书给定的人工审计基线 37.5%(21/56) 基本一致。差异来自样本不同(人工只挑「符合触发条件」的 56 条,脚本覆盖全部实质回复)。

2. 改后样本(插件开启,测试 profile)

  • profile:structured-test(dsh-base + dsh-headless + dsh-structured@0.1.2)。测试构建是 0.1.2;0.8.1 只改规则文本(清晰度约束,无运行时截断/字数统计),host 注入与统计口径未变;0.7.4 为上一发布版。
  • 模型:headless 默认 deepseek-flash。
  • 样本:12 个新会话,同一组 12 条问题;12/12 会话的 system/message 都同时命中主规则段与尾部提醒。
  • 命令:
node scripts/measure-prose.mjs --sessions "<12 个会话 id,逗号分隔>"
node scripts/session-inspect.mjs --session <id> --grep "结构化输出(本会话已启用"
口径 结构化 散文 散文率
首屏(主) 12 0 0.0%
整篇(对照) 12 0 0.0%

结论:改后 0/12,达到 <10% 的目标。

3. 同 prompt 配对对照(诚实披露)

同一测试 profile、同一组 12 条问题:

组 插件 实质回复 结构化 散文率
baseline 未安装 12 12 0.0%
after 0.1.2 开启 12 12 0.0%

这批问题是短问题(如「pnpm 和 npm 该怎么定」),~/.dsh/AGENTS.md 第 7 节本身已经足以让模型输出表格/清单,所以 同 prompt 的增量为 0。插件在这批样本上可证明的作用是「请求级保证」:12/12 请求的 system prompt 里都有规则段和尾部提醒,不依赖模型记得住 AGENTS.md。

真正需要插件兜底的是长上下文/复杂会话——那正是 38.7% 历史基线的来源。单轮 headless 压测无法稳定复现这种衰减,因此不把配对增量当作主要证据。

4. 长上下文试点(未复现衰减)

  • 构造约 9.9k 字符的周报记录,末尾问「现在什么情况?我该先处理哪一件?」。
  • 对照组:插件仍安装,但用 --patch 把 defaultEnabled 覆盖为 false。
  • 结果:两组都输出了首屏表格(control 664 字符,treatment 664 字符),按脚本口径都是 0% 违规。

结论:在当前模型/单轮 harness 下,长上下文本身没有把「结构化」压成散文,因此没有可报告的配对增量;这一点如实记录,不用合成数据凑效果。

5. 复跑

# 全量历史(注意 --before 选插件安装前的时刻)
node scripts/measure-prose.mjs --since-days 30 --before "2026-10-20T21:35:00+08:00" --verbose

# 某个会话
node scripts/measure-prose.mjs --sessions session-xxxx

# 换首屏阈值 / 换整篇口径
# 500 是视口高度像素,不是字数;0.8.1 起不设硬性篇幅上限
node scripts/measure-prose.mjs --first-screen 500
node scripts/measure-prose.mjs --whole

脚本只读 $DSH_HOME/sessions,不写任何状态;没有第三方依赖,Node ≥ 22(用内置 zstd)。