# 填充词:为什么能看见、会不会自我强化 > 2026-10-13。起因:维护者观察到「现在能看见 Hmm,但模型的思维输出并没有随着轮次增长 > 出现强化填充词的情况,好兆头」。本文记录**验证过程与两次自我证伪**。 ## 1. 本插件与填充词的关系(设计意图) 推理模型(R1 这一类)经 RL 涌现出 `Wait` / `Hmm` / `Actually` 这类反思标记。 它们有**两副面孔**: | | 生成时 | 进入上下文后 | |---|---|---| | 作用 | **增益**:延长思考、触发反思与重估 | **纯负担**:注意力被分散到填充词本身 | | 本插件 | **完全保留**(不干预生成) | **去掉**(进上下文的那一份被压成决策句) | ## 2. 为什么"能看见 Hmm"是**机制上必然的** `extract` 的实现(`index.js` 的 `extractReasoning`)是**按句式挑决策句**: ```js const picked = [] // 收集匹配 DECISION_RE 的句子 if (picked.length > 0) return picked.join(' ') return last.slice(-maxChars) // ← 抽不到就退回"最后一句" ``` ⇒ 填充词只要**粘在决策句里**(`"Hmm, let me check the config file."`,含 `let me`), 整句被保留 ⇒ **用户看得见 Hmm** ✓ 这与观察一致。 **实测佐证**(真实塑形后文本,1060 万字符):填充词密度 **2.00/千字**, 且 **25/25 个样本的填充词都出现在句中**(不是块首)。 ## 3. 我在这里**两次自我证伪**(必须记录) ### 证伪 ①:"浮空的填充词句会被丢掉 ⇒ 所以不强化" 小样本曾显示"8/9 保留、1/9 丢弃",看似支持。但用 9 个构造用例细看: ``` "Hmm." → "Hmm." (原样返回!没被丢) "Actually." → "Actually." (原样返回!) "Hmm, let me check the config." → 原样(决策句,保留) "Hmm, this is tricky. Wait, let me re-read it." → "Wait, let me re-read it."(前句被丢) ``` 原因:**短块护栏**(1.0.4 起"不比原文短就原样返回")⇒ 单句短块**整体原样返回**, 根本没进"挑决策句"的逻辑。⇒ **"浮空句会被丢掉"是错的** ✗ ### 证伪 ②:"最近的填充词密度 +149.8% ⇒ 自我强化" 用**出网抓包插件**记到的模型输出流分桶统计,得到后半密度 2.28 → 5.70(+149.8%)。 **但那是我自己造成的**:把最后几桶的原文打出来一看,全是**本次调试对话**的内容 —— 这段对话的主题就是"Hmm 这类填充词",所以模型当然会大量**提到**它们(带引号,22 次) 而不是**使用**它们。**测量被话题污染** ✗ 这已经是本项目里第 N 次同类错误:**先确认数据源的干净性,再谈结论。** ## 4. "会不会随轮次强化"——正确测法与当前结论 **正确测法**:比较**同一会话内**前半段与后半段的填充词密度(按 turn 顺序), 且必须**排除在讨论本插件/填充词的会话**(那些会话提到 Hmm 是必然的)。 实测(`check-filler4.mjs`,仅取干净会话): | 会话 | 推理块 | 前半密度 → 后半密度 | 趋势 | |---|---|---|---| | da7f1bfb | 31 | 0.52 → 0.47 | **−10%** | | 65d26e90 | 10 | 1.64 → 1.87 | +14% | | 53319d5b | 6 | 0.73 → 0.43 | **−40%** | | 752a0309 | 78 | 0.63 → 1.61 | +155% | ⇒ **样本太小且混杂,不足以定论** ⚠️ (752a0309 的 +155% 需要单独查;它可能是话题所致,也可能是真实的强化。) **因此本文的诚实结论是**: - ✅ **机制上成立**:塑形只保留决策句 ⇒ 模型看到的自己"过去的推理"大幅缩短, 其中**浮空的重复填充句会被压缩掉**(压缩率实测中文 96.0% / 英文 93.3%)。 - ✅ **"能看见 Hmm"是必然的**(决策句里粘着的会留下)。 - ⚠️ **"是否随轮次强化减弱"尚未定论** —— 需要**更长、更干净**的样本 (理想的测法:同一任务跑 A/B 两臂,一臂开插件一臂关,比填充词密度的轮次曲线)。 - ❌ **不做过度声明**:本插件没有做过该 A/B,所以"消除填充词强化"是**基于机制的推论**, 不是实测结论。README 里已按同一原则标注边界。 ## 5. ★ 实测发现:`Let me` 才是最大的那一类(2026-10-13) 维护者在长会话里**亲身观察到**:"注意力真的全被保留的 `Let me` 吃了"。 这句话引出一次测量,结果比预期严重得多。 ### 5.1 实时流是**原文**(先确认前提) | 环节 | 内容 | |---|---| | 界面实时渲染 | **原文** ✓(代理开启 ⇒ 流过滤让路 ⇒ chunk 原样流过) | | 写入会话 | **原文** ✓ | | **出网那一刻** | **塑形**(extract 后的决策句) | ⇒ 所以"能看见 `Hmm`"是必然的(原文里有);塑形只发生在**进出网的那一份**。 > 判据修正(踩过):`session.jsonl.zstd` 只存了 **1.498%** 的事件 > (seq 跨度 3,435,309 仅存 51,451 条)⇒ `assistant/chunk` 是**抽样**, > **不能**用它判断流形态。正确数据源是 `reasoning-chunks`(全量聚合,按 **`time0`** 排序)。 ### 5.2 测量:`extract` 保留下来的是什么? 对真实推理块跑 `extractReasoning`,统计**保留下来的句子**: ``` 保留句子总数 8764 其中"自我叙述式"(Let me / I will / Now I / I should…)= 6738 = 76.9% ✗ ``` 样本(全是保留下来的): ``` "Let me start by reading the two referenced files and globbing for .md files…" "Let me glob more specifically at the top level and in the project directories." "Now I have a good understanding." "Let me summarize the project understanding for the user." "I need to anchor patterns." ``` ### 5.3 结论:这是一个**设计缺陷**,不是调参问题 `DECISION_RE` 把 `let me` / `i will` / `now i` 当作"**决策句**标记"。 但它们与 `Hmm` 是**同一类东西** —— 自我叙述填充 —— 只是更长: | | `Hmm` | `Let me` | |---|---|---| | 性质 | 自我叙述填充 | **自我叙述填充**(同样) | | 长度 | 1 词 | 一整句 | | 信息量 | ≈0 | **≈0**(是"意图",不是"结论") | | 本插件 | 浮空句被压掉 ✓ | **系统性保留并回灌** ✗ | ⇒ **插件压掉了短的自我叙述,却系统性地留下了长的**。而长的那类占的 token 多得多 ⇒ 回灌进上下文的自我叙述噪音**不降反升**。 **根因**:判据是"**是不是决策句**",而不是"**有没有信息增量**"。 `"Let me check the config"` 是决策句,但真正的信息是结论(`"配置在 X 处,值是 Y"`)。 ### 5.4 这对"算法该怎么定"的启示 对 DeepSeek 这类模型的**行为模式**,这次实验给出一条可操作的判据: > **按"信息增量"筛,而不是按"句式角色"筛。** > 意图句(将来式:`Let me…` / `I will…` / `Now I…`)信息量最低却最容易匹配句式模板; > 结论句(完成态/事实陈述:`X is at Y` / `the bug is Z`)才是后续推理真正需要的。 候选实现方向(**未实施**,需先量化收益再决定默认值): 1. **剥离自我叙述前缀**:`"Let me check the config"` → `"check the config"` —— 保留动作、去掉主语框架; 2. **偏好结论句**:优先选完成态/事实句,而不是将来的意图句; 3. **新增可组合 pure op**(如 `stripNarration`):只去掉 `Let me / I will / Now I` 开头, 可与 `extract` 链式组合(`extract → stripNarration`)。 ⚠️ **注意**:3 条都只影响**出网那一份**,界面实时流仍是原文 ⇒ 不影响可读性与审计。 ## 6. 复现 ```powershell cd 'D:\DSH Desktop\.research' node check-stream-raw.mjs # 实时流形态 + 自我叙述占比(本文 5.1/5.2 的数) node check-live-form.mjs # 按时间看推理块是否带记账格式 node check-seq-density.mjs # 事件抽样率(1.498%) node check-mechanism.mjs # 决策句/短块护栏的行为 node check-filler-real.mjs # 塑形后文本里填充词的形态(1060 万字符) node check-filler4.mjs # 跨轮趋势(含"排除调试会话"的判据) node check-strict.mjs # 污染是否停止(严判据:输出是否**以**记账格式开头) ```