跳转到内容

反合理化机制设计

反合理化机制设计

学习目标

  • 理解反合理化表在 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 条最常见的,不试图覆盖所有情况
反驳过于抽象”这很重要”用具体场景和量化数据支撑反驳
绝对化表述”永远不要”承认有效边界,给例外留出口
只有表格没有 GateAgent 在压力下仍然绕过在关键决策点添加 Hard-Gate 标记

设计取舍

为什么不用硬编码规则阻止反合理化?

硬编码规则(如禁止编辑某些文件)在工具层面有效,但无法阻止 Agent 在推理层面找到绕过路径。反合理化表的目标是改变 Agent 的推理过程——让 Agent 自己意识到”这个借口在表格中被列为无效”。

为什么承认有效边界而不是绝对禁止?

绝对禁止的反合理化(“永远不要跳过规格”)本身就是一个可以被跳过的规则——Agent 可以论证”这个情况是例外,规则的精神不适用”。承认边界(“两行规格也可以”)消除了这个漏洞——如果 Agent 认为情况简单,它可以写两行规格,而不是跳过规格。

参考来源

  • 源码验证: 23 个 skills/*/SKILL.md 中的 Common Rationalizations 表
  • 源码验证: skills/using-agent-skills/SKILL.md — 1% 规则定义