反合理化机制设计
反合理化机制设计
学习目标
- 理解反合理化表在 23 个技能中的共性模式
- 掌握反驳论证的四种设计原则(具体、量化、承认边界、区分跳过与静默跳过)
- 理解”1% 规则”和验证非协商性原则
- 学会将反合理化表与 Hard-Gate 配合使用
前置知识
本章涉及 Skill 驱动编排中的反合理化通用原理,建议先阅读:
下文直接聚焦 agent-skills 的具体实现模式。
项目实践
跨技能的共性反合理化模式
agent-skills 项目的 23 个技能,每个都包含一个 Common Rationalizations 表。通过分析全部 23 个表,可以提取出以下跨技能的共性模式:
| 反合理化模式 | 出现频率 | 典型借口 | 典型反驳 |
|---|---|---|---|
| ”太简单不需要 X” | 15+ 技能 | ”这个很简单” | 简单任务最容易被未检验的假设浪费 |
| ”稍后再做 X” | 10+ 技能 | ”我会稍后补” | Bug 会复合,稍后的代价更大 |
| ”一次全做更快” | 8+ 技能 | ”一次性写完再测” | 500 行中找 bug 比 50 行中找难得多 |
| ”我知道,不需要查” | 5+ 技能 | ”我对这个 API 有信心” | 信心不是证据,训练数据包含过时模式 |
| ”X 会拖慢我们” | 5+ 技能 | ”规格会拖慢速度” | 15 分钟规格防止数小时重做 |
| ”以后反正会变” | 3+ 技能 | ”需求反正会变化” | 这正是 X 应该是活文档的原因 |
反驳论证的四种设计原则
agent-skills 的反合理化表遵循以下设计原则,这些原则使其反驳论证比一般提示工程更有效:
1. 具体反驳,不是抽象说教
❌ "测试很重要"✅ "Bug 会复合。Slice 1 的 Bug 让 Slice 2-5 都错。每片都测试。"具体性使得 Agent 可以将反驳与实际场景关联,而不是当作空洞的口号忽略。
2. 量化代价,不是模糊警告
❌ "这会花费更多时间"✅ "15 分钟的规格防止数小时的重做。15 分钟内的瀑布胜过 15 小时的调试。"量化使得 Agent 可以进行成本比较,而不是陷入”这值得吗”的犹豫。
3. 承认有效边界,不是绝对化
❌ "永远不要跳过规格"✅ "简单任务不需要*长*规格,但仍需要验收标准。两行规格也可以。"承认边界防止了反合理化表本身成为被跳过的理由——“这个情况是例外”。
4. 区分跳过和静默跳过
"跳过没问题;静默跳过不行。"这是 agent-skills 反复出现的模式——允许用户做出决策(包括跳过某个步骤),但要求决策是显式的、可见的。
“1% 规则”
在 using-agent-skills 技能中定义了一条元规则:
在开始工作之前检查是否有适用的技能。即使只有 1% 的可能性适用,也必须检查。
这条规则的设计意图是覆盖 Agent 最常见的反合理化——“这个情况看起来不像需要 X 技能”。1% 是一个极低的阈值,几乎强制了检查行为本身。
反合理化表与 Hard-Gate 的配合
反合理化表和 Hard-Gate 是两种互补的防御机制:
| 维度 | 反合理化表 | Hard-Gate |
|---|---|---|
| 防御层面 | 认知层(改变推理) | 流程层(强制停止点) |
| 机制 | Rationalization → Reality 配对 | XML 标签标记的强制门控 |
| 失败模式 | Agent 找到绕过表格的理由 | Agent 在 Gate 之间跳过步骤 |
| 适用场景 | 每个技能 | 关键决策点(如规格批准前不写代码) |
两者缺一不可。agent-skills 的实践表明,单独使用任何一种防御都不足以阻止所有反合理化行为。
问题与规避
| 陷阱 | 表现 | 对策 |
|---|---|---|
| 反合理化表过长 | Agent 跳过阅读整个表 | 只列 3-5 条最常见的,不试图覆盖所有情况 |
| 反驳过于抽象 | ”这很重要” | 用具体场景和量化数据支撑反驳 |
| 绝对化表述 | ”永远不要” | 承认有效边界,给例外留出口 |
| 只有表格没有 Gate | Agent 在压力下仍然绕过 | 在关键决策点添加 Hard-Gate 标记 |
设计取舍
为什么不用硬编码规则阻止反合理化?
硬编码规则(如禁止编辑某些文件)在工具层面有效,但无法阻止 Agent 在推理层面找到绕过路径。反合理化表的目标是改变 Agent 的推理过程——让 Agent 自己意识到”这个借口在表格中被列为无效”。
为什么承认有效边界而不是绝对禁止?
绝对禁止的反合理化(“永远不要跳过规格”)本身就是一个可以被跳过的规则——Agent 可以论证”这个情况是例外,规则的精神不适用”。承认边界(“两行规格也可以”)消除了这个漏洞——如果 Agent 认为情况简单,它可以写两行规格,而不是跳过规格。
参考来源
- 源码验证: 23 个
skills/*/SKILL.md中的 Common Rationalizations 表 - 源码验证:
skills/using-agent-skills/SKILL.md— 1% 规则定义