# 结构反模式（跨语言）

> 本文件是解释、示例与操作细则；行为合同的单源是 `SKILL.md`，两处表述不一致时以 `SKILL.md` 为准。

> 这些模式不是某个词的问题，而是句子和段落层面的 AI 痕迹。中英文通用。

## 1. 二元对比假戏剧

**模式**：先否定 X，再肯定 Y，制造虚假的顿悟感。

```
❌ 这不是技术问题，而是管理问题。
❌ It's not about the code. It's about the culture.
```

```
✅ 管理流程比代码本身更容易出问题。
✅ Culture matters more than the code itself.
```

**检测**：看密度和分布，不看单次出现。**先按下面「保留条件」把豁免项剔除，再对剩下的计数**——豁免项不计入密度，也不因为密度超标被改；只有剩余项超标才处理。这样改完的输出重新过一遍规则不会再次命中。命中信号：

- 同段连续 2 组以上（含与价值拔高骨架混合叠加）
- 全文按长度归一（计数口径同 [严重度分级](./severity.md)：中文按字数，英文按词数，代码片段 / 路径 / 命令 / 版本号各计 1，标点和空白不计）：< 300 字/词 出现 2 处以上；300–1000 字/词 出现 3 处以上；> 1000 字/词 平均每 300 字/词 1 处以上
- 变体同样计入：`不像 A，像 B`、`要的是 X，不是 Y`、`X 不行，Y 才行`，以及连续多条以否定收尾的列表项或表格行
- 跨句变体和换字变体一样计入：`不是 A。而是 B`（句号断开）、`与其说 A，毋宁说 B`、`你以为 A，其实 B`、`我一直以为 A，后来才发现 B`、`回头才发现`、`大家都说 A，可真相是 B`、`答案恰恰相反`、`真正值钱的从来都与 A 无关`。这里管的是「先立一个读者并没有的误解，再推翻它抬价」这个动作，换任何字面都算；**判据和豁免口径不变**，仍按本条的密度阈值和豁免上限处理，不因为变体多就升级成一刀切
- 读到后面能预判下一句形状

**默认动作**：豁免项原样保留；剩余超标的骨架按 `in-place` 替代动作换成中性连接或直接陈述（`X 不够，Y 更重要`、`相比 X，Y 更能说明问题`），两边信息都要保留。只把 `不是 X，是 Y` 倒装成 `Y，不是 X` 不算完成降密度——骨架还在。不要见一个杀一个，也不要把豁免项一起抹平成同一种平铺句。

**保留条件**：豁免上限 2 处。超过 2 处都声称「承担论证」时不再逐条豁免——每一处都说得出理由，恰恰是骨架依赖的表现，仍按密度处理。逐条判据：

- **术语定义**（最多 1 处，通常在首句或定位句）：`X 不是 A，是 B` 用来纠正读者对 X 是什么的误读
- **论证骨架**（最多 1 处）：前半句是读者会真实持有的误解，且删掉它之后，后文的数据、结论或动作会失去依据——「读起来气势弱一点」不算
- **引用原文、被讨论对象**：不计入密度，也不受上述数量上限约束

SF-40 那类「作者刻意用对比结构承载全文论点」属于用例级例外，判据和理由记在 [benchmark-tiers.md](../evals/benchmark-tiers.md) 的例外表，不作为通用豁免口。

## 2. 否定式列举

**模式**：先说不是什么，再说是什么。绕了一圈。

```
❌ 它不是框架，不是库，也不是工具——它是一种思维方式。
❌ It's not a framework. It's not a library. It's a way of thinking.
```

```
✅ 把它当作一种思维方式，不是一个具体工具。
✅ Think of it as a mental model, not a tool.
```

## 3. 戏剧化碎句

**模式**：用句子碎片制造假的力量感。

```
❌ 三年。两个人。一个想法。最后做成了产品。
❌ Three years. Two people. One idea. It became a product.
```

```
✅ 两个人花了三年把这个想法做成了产品。
✅ Two people spent three years turning the idea into a product.
```

## 4. 反问式铺垫

**模式**：用反问或"如果"开头吊胃口。

```
❌ 如果我告诉你，90% 的创业公司都在定价上犯同一个错误——按成本定价而不是按价值定价呢？
❌ What if I told you 90% of startups make the same pricing mistake, charging based on cost instead of value?
```

```
✅ 90% 的创业公司在定价上犯同一个错误：按成本定价而不是按价值定价。
✅ 90% of startups misprice their product, using cost-based pricing instead of value-based.
```

## 5. 虚假主语（False Agency）

**模式**：给无生命的事物安上人类动作（"赋能""助力""驱动"）。当句子抽象空泛、没有具体信息时优先改写。技术文档中描述系统行为的非人主语（"网关返回 504""缓存过期"）是合理的，不需要改。

```
❌ 该框架赋能开发者社区，让样板代码大幅减少。
❌ The framework empowers the developer community and dramatically reduces boilerplate.
```

```
✅ 开发者用这个框架能少写样板代码。
✅ Developers write less boilerplate with this framework.
✅ 网关在超时后返回 504。（技术描述，不改）
```

## 6. 被动语态堆砌

**模式**：连续使用被动语态，隐藏动作执行者。研究论文、实验报告或正式学术摘要里的常规被动不一定要改。

```
❌ 数据库查询被我们优化后，页面加载时间被显著缩短，用户体验被大幅改善。
❌ Database queries were optimized by us, page load time was shortened, and user experience was improved.
```

```
✅ 我们优化了数据库查询，页面加载变快了，体验也好了。
✅ We optimized database queries, so pages load faster and the experience improved.
```

```
✅ The experiment was conducted by researchers at MIT.（学术语体，可保留）
```

## 7. 三件套列举

**模式**：AI 偏爱三个一组。两个或一个往往更自然。

```
❌ 创新、协作、卓越。
❌ Innovation, collaboration, and excellence.
```

```
✅ 把东西做出来，做好。
✅ Build things. Build them well.
```

## 8. "首先…其次…最后…" 机械排列

**模式**：中文特有的机械递进，制造假的逻辑感。

```
❌ 首先，我们需要明确目标；其次，制定计划；最后，执行落地。
```

```
✅ 先把目标定清楚，然后排优先级，边做边调。
```

## 9. Wh- 开头句（英文特有）

**模式**：用 What/When/Where/Which/Who/Why/How 开头的句子在 AI 文本中过度集中。

```
❌ What makes this approach unique is its simplicity.
```

```
✅ This approach works because it's simple.
```

## 10. 总结式收尾

**模式**：每段或全文末尾用"总之""综上"做总结，重复已说过的内容。

```
❌ 综上所述，该方案在性能、安全性和可维护性方面都表现优异。
❌ In conclusion, this approach excels in performance, security, and maintainability.
```

```
✅ 删掉。前面说清楚了就不用再说一遍。
✅ Delete it. If you said it clearly above, don't repeat it.
```

## 11. 对称填充（Symmetry Padding）

**模式**：为了"平衡"而硬凑对仗，没有信息增量。

```
❌ 既要保证速度，又要保证质量；既要创新突破，又要稳定可靠。真要取舍的话，质量优先。
```

```
✅ 速度和质量之间我们优先质量。
```

## 12. 无源引用

**模式**：用"研究表明""数据显示""专家指出"但不给具体来源，制造假的权威感。

```
❌ 研究表明，远程办公能提高 30% 的生产力。
❌ Studies show that remote work increases productivity by 30%.
```

```
✅ rewrite-safe：整条论断删除；同段还有不依赖这条引用的判断时，只保留那部分。
✅ audit-only：远程办公能提高 30% 的生产力——这里没有给出来源。
✅ rewrite-safe: delete the claim outright; keep only the judgments in the paragraph that don't rest on it.
✅ audit-only: Remote work increases productivity by 30% — no source given.
```

只有作者手里真有出处时才写具体来源。skill 不替作者补来源，也不把无源数字换个说法留下来。

## 13. 加粗滥用

**模式**：机械地给每个要点加粗，制造假的层次感。

```
❌ **用户体验：** 界面全面升级。**性能优化：** 算法显著提升。**安全加固：** 新增端到端加密。
```

```
✅ 界面升级了，算法更快了，加了端到端加密。
```

## 14. 分条列点强迫症

**模式**：任何内容都要 1. 2. 3. 分条，连简单回复也列点，制造假的条理感。

```
❌ 关于这个问题，我的建议如下：
   1. 先检查配置文件里的 DB_HOST
   2. 确认环境变量
   3. 重启服务
```

```
✅ 配置文件里的 DB_HOST 可能写错了，先看一眼。不是的话重启一下服务试试。
```

## 15. 正能量收尾强迫症

**模式**：不管前面说了什么，最后一段必须上价值、给鸡汤、展望未来。

```
❌ ……总之，让我们拥抱变化，积极迎接 AI 时代的无限可能！未来可期！
```

```
✅ 删掉。前面说完了就结束。
```

## 16. 假口语化 / 硬凹网感

**模式**：AI 试图"接地气"时硬塞网络流行语（绝绝子、谁懂啊、真的会谢），反而更假。真人用这些词是随机的，AI 是批量的。

```
❌ 姐妹们！这个工具真的绝绝子！谁懂啊，批量处理速度直接拉满！狠狠省时间！
```

```
✅ 这个工具确实好用，主要是批量处理的速度快，省了不少时间。
```

## 17. 调试腔叙事

**模式**：AI 在编程场景中用 postmortem / SRE 口吻讲日常事务——"兜住""落盘""根因""收口"。把 debug 术语泛化到一切对话中。

```
❌ 我已经把差异收窄了，缓存过期这个根因基本坐实，接下来做一个更硬的排除法把问题打掉。
```

```
✅ 原因找到了：是缓存过期导致的。我把可能性排查了一遍，现在就剩这一个。
```

## 18. 节奏单调（统计信号）

**模式**：AI 文本的节奏比人类均匀得多。两个子信号：

- **句长均匀**：每句话长度几乎一样（句长标准差约 1.2，人类约 4.7+）。表现为"读起来很平，没有呼吸感"。
- **句式骨架重复**：同一种句法形状反复出现，最常见的是二元对比（`不是 X，是 Y`），其次是每一节末尾都落一个对仗短句。单句都成立，连着读能预判下一句形状。

**检测**：不是看单个词，而是看整段乃至全文的节奏。长短句应该交替出现；同型骨架的密度阈值见第 1 条。

**默认动作**：句长层面合并或拆分句子，制造长短交替；骨架层面按第 1 条先剔除豁免项，再改剩余超标的那几处。两个层面都不重写全文。

## 19. 价值拔高骨架

**模式**：先给一个事实，再用 `不仅仅是……更是……`、`真正的 X 不是……而是……`、`最后比拼的是……` 把句子抬高成“洞见”。

```
❌ 我们做的不仅仅是一个笔记应用，更是一种信念的传承。
❌ 真正的竞争力不是功能堆砌，而是体验细节。最后比拼的是执行效率。
```

```
✅ 我们做的就是一个笔记应用。（拔高部分底下没有可依托的事实，删掉）
✅ 产品做得再多，最后还是看体验细节和执行效率。
```

## 20. 标点腔（破折号过密）

**模式**：把英文 em-dash 的使用习惯带进中文——首句就用破折号起手，一段里连续多个 `——`，插入、转折、补充全靠破折号承接；常伴随分号连用、顿号乱炖和中英混排下的标点崩坏。跨模型现象，提示词往往压不住。

**检测**：看密度和位置，不看单次出现。计数单位是**插入处**，不是破折号符号：一对 `——插入内容——` 计一处，单个 `——` 承担转折或补充也计一处。命中信号：首句破折号起手、单段两处以上插入、连续多段都靠破折号承接。单个破折号不是问题，不要见一个杀一个。

```
❌ 这个工具最打动我的是速度——打开就是结果。搜索、启动、剪贴板——所有操作都在一个输入框里——你甚至不用记快捷键。
```

```
✅ 这个工具最打动我的是速度：打开就是结果。搜索、启动、剪贴板，所有操作都在一个输入框里，你甚至不用记快捷键。
```

```
✅ 配置支持环境变量覆盖——容器部署时不用改文件——其余场景直接编辑 `config.toml`。
```

最后一例只有**一处**成对插入（两个 `——` 符号构成一处），不命中密度信号，放行。

**默认动作**：多余的破折号按语义改回冒号、逗号、括号或直接断句；一段最多保留一处真正承担插入或递进的。

**保留条件**：标题和命名里的连接符（`todo — 终端待办`）；引用原文；破折号本身是讨论对象；全段仅一处且确实承担插入语气。

## 21. 动词名词化

**模式**：把动作压成"空动词 + 抽象名词"。句子变长，信息没变。`进行 / 实现 / 完成 / 开展 / 起到 / 具有` 后面跟一个动名词是典型信号。

```
❌ 我们对流程进行了优化，实现了效率的显著提升。
❌ 完成了对监控体系的梳理，对报警定位到具体服务起到了很好的支撑作用。
❌ The team performed an optimization of the deployment workflow.
```

```
✅ 我们把流程改顺了，效率提高了。
✅ 梳理了监控，现在报警能定位到具体服务。
✅ The team simplified the deployment workflow.
```

**检测**：`进行了 X` / `实现了 X 的 Y` / `完成了对 X 的 Y` / `起到了 X 的作用` / `具有 X 的意义` / `开展 X 工作`。英文对应 `perform an analysis of`、`conduct a review of`、`achieve an improvement in`。`automation/eval/hard_metrics.py --residual` 会报数（只报数不判死）。

**默认动作**：还原成直接的动词。还原后如果发现原句其实没说清谁做了什么，按「清理后的落点」合同处理，允许变短并标注缺口径，不补事实。

**保留条件**：法律、合同、公文、正式公告里的固定表述（`进行公示`、`予以受理`）；`docs` 里已经是稳定术语的名词化（`增量编译`、`执行计划生成`）；用户明确要求正式语体的对外材料。

## 22. 同义词躲避

**模式**：同一个东西在相邻几句里被迫换三种说法，而且一次比一次抽象。人写东西不怕重复关键词，模型第二次就换近义词、第三次再换一个，读起来发油。

```
❌ 他开始学修表。这门手艺上手比想象中慢，练了半年才敢接活。后来这项技能成了他主要的收入来源。
❌ The team shipped the parser. This component handles 4MB files. The module now runs in CI.
```

```
✅ 他开始学修表。修表上手比想象中慢，练了半年才敢接活。后来修表成了他主要的收入来源。
✅ The team shipped the parser. It handles 4MB files and now runs in CI.
```

**检测**：同一指称对象在相邻 2–3 句里换了 2 次以上说法，且换法是往上升格（`修表 → 这门手艺 → 这项技能`、`parser → component → module`）。代词（`它`、`这个`）不算——正常照应本来就该用代词。

**默认动作**：统一回最具体的那个说法，其余改成原词或代词。

**保留条件**：换的说法带来新信息或新限定（`修表 → 上门修表`）；两个说法指的其实不是同一个对象；术语与口语的对照本身就是文本在做的事（`索引 / index`）；引用原文。

**注意**：这一条同时约束改写动作本身。清理 [严重度分级](./severity.md) Tier 3 的高密度词时，不要用同义词轮换降密度——那会把密度问题换成这里的油滑感。

## 23. 连词过密

**模式**：`因为 / 所以 / 但是 / 同时 / 此外 / 然而 / 因此` 几乎每两句出现一个，条件连词 `如果 / 否则` 同属此类。中文小句靠语序和事理就能相接，连词堆砌是英文式显性衔接的搬运。

```
❌ 因为店里生意不好，所以他决定把下午的时间用来学修表，同时也能多一门手艺。
```

```
✅ 店里生意不好，他下午闲着，就学起了修表，多一门手艺总没坏处。
```

**检测**：**只在 `public-writing` 的叙事、观点、随笔类文本上判，`docs` / `status` / `code-context` 不判。** 这一条没有全局密度阈值，原因是实测数据直接否掉了全局判据。`automation/eval/hard_metrics.py --calibrate` 在 95 条语料上跑出：SNF（不该改）连词密度中位 5.26 / 千字，高于 SF（该改）的 0.00；**SNF 的最高值 81.08 还高于 SF 的最高值 80.00**。最硬的证据是 benchmark 里的一对同密度用例——SF-50（`public-writing` 叙事）80.00 / 千字该删一半，SNF-39（`docs` 迁移说明）81.08 / 千字一个都不能删。技术文本靠 `如果…否则`、`因为…所以` 承担条件和因果，按密度一刀切会优先误伤它们。

在适用场景内看分布，不看总量：连续三句每句都以连词开头，或同一个连词在一段里出现 3 次以上。

**默认动作**：删掉一半，读得断的地方不补回来。删完通读一遍，事理接不上的地方再放回最必要的那个。

**保留条件**：连词真的在承担转折、让步或因果，删掉会读错；`docs` 里的条件说明和步骤衔接；法律与规范文本；`status` 里的时间线因果。

## 24. 装饰性细节

**模式**：用具体的时间、天气、动作、物件伪造现场感。这些细节没有来源，也不改变后文任何判断，只负责让画面显得真实。假细节越具体，AI 味越重。

```
❌ 凌晨三点，办公室只剩他一个人。窗外下着雨，桌上的咖啡早就凉了。他点了第三根烟，盯着屏幕上那行报错——时区配置在容器里没生效，这个 bug 已经卡了他两天，本地怎么测都测不出来。
```

```
✅ 那个 bug 卡了他两天。最后发现是时区配置在容器里没生效，本地怎么测都测不出来。
```

**检测**：两条同时成立才算命中——细节**没有来源**（不是用户提供的、不是可核验的），并且**删掉后文不变**（事实、判断、因果都不受影响）。只满足一条不算。这一条和第 16 条「假口语化」不同：那条抓的是硬塞网络流行语，这条抓的是伪造的生活细节。

**默认动作**：删掉。删完段落如果没了落点，用原文已有的信息重组，不补新细节。

**保留条件**：用户自己提供的经历细节，哪怕琐碎也保留；细节确实改变后文（`那天是周日，维修点没开门`）；虚构、小说、剧本里属于人物视角和行动的细节；`docs` 里的复现条件、环境说明和时间戳。

## 25. 借喻场混用

**模式**：同一段里从多套不相干的比喻系统借词。常见七套：道路竞赛、战争攻防、建筑灾害、温度、仓储、海洋航行、机器器官。单独一套用得准没问题，多套混在一起说明在用比喻替代说明。

```
❌ 这个赛道的护城河正在坍塌，去年还得自研的部分现在遍地是开源方案，团队需要重新点燃引擎，才能在这波浪潮里活下来。
```

```
✅ 这个方向的门槛在降低，去年还得自研的部分现在有开源方案了。团队得找新的差异点。
```

**检测**：短距离内（约 800 字窗口）命中 3 套以上借喻场。`hard_metrics.py --residual` 会统计，并已排除字面用法（`搜索引擎`、`代码仓库`、`商品库存` 不计）。

**默认动作**：先全部还原成本义。还原后意思已经清楚的，一个比喻也不用放回。

**保留条件**：所写对象本身就是这些东西（真的在讲仓库、温度、船）；行业稳定术语（金融的 `杠杆`、投资语境的 `护城河`）；用户明确要求的修辞风格；小说、诗歌和抒情写作按意象是否属于同一套感受判断，不按数量机械删。
