# 指标与实测记录 统计口径、原始命令、样本量、结论和局限都在这里。所有数字都可以用仓库里的 `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 条实质回复。 - 命令: ```powershell 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` 都同时命中主规则段与尾部提醒**。 - 命令: ```powershell node scripts/measure-prose.mjs --sessions "<12 个会话 id,逗号分隔>" node scripts/session-inspect.mjs --session --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. 复跑 ```powershell # 全量历史(注意 --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)。