对每个非平凡决策进行对抗性审查,防止Agent过度自信导致的错误。 当正确性比速度更重要时、在陌生领域工作时、高风险操作时触发。 触发场景:架构决策、非平凡代码提交、声称"这是安全的/可扩展的/符合规格的"、 不确定领域的工作、生产环境部署、数据迁移、不可逆操作。
编程
对抗性审查
试用对每个非平凡决策进行对抗性审查,防止Agent过度自信导致的错误。 当正确性比速度更重要时、在陌生领域工作时、高风险操作时触发。 触发场景:架构决策、非平凡代码提交、声称"这是安全的/可扩展的/符合规格的"、 不确定领域的工作、生产环境部署、数据迁移、不可逆操作。
它能做什么
对每个非平凡决策进行对抗性审查,防止Agent过度自信导致的错误。 当正确性比速度更重要时、在陌生领域工作时、高风险操作时触发。 触发场景:架构决策、非平凡代码提交、声称"这是安全的/可扩展的/符合规格的"、 不确定领域的工作、生产环境部署、数据迁移、不可逆操作。
技能文档
Doubt-Driven Development(对抗性审查开发)
Overview
自信的答案不等于正确的答案。长时间会话积累上下文,悄悄把假设变成"事实"而无人察觉。
Doubt-Driven Development 是在任何非平凡输出成立之前,引入一个偏向证伪而非批准的新鲜上下文审查者的纪律。
这不是最终审查(/review)。最终审查是对成品的裁决。这是飞行中的姿态:非平凡决策在纠正成本还很低时被交叉质询。
When to Use
决策在以下任一条件成立时为非平凡:
- 引入或修改分支逻辑
- 跨越模块或服务边界
- 断言类型系统无法验证的属性(线程安全、幂等性、顺序、不变量)
- 正确性依赖于未来读者看不到的上下文
- 影响范围不可逆(生产部署、数据迁移、公开API变更)
适用场景:
- 在不确定性下做架构决策
- 提交非平凡代码/方案
- 声称非显而易见的事实("这是安全的"、"这能扩展"、"这符合规格")
- 在不完全理解的领域工作
不适用场景:
- 机械操作(重命名、格式化、文件移动)
- 遵循明确无歧义的用户指令
- 阅读或总结现有代码
- 显而易见的单行修改
- 纯工具操作(运行测试、列文件)
- 用户明确要求速度优先于验证
The Process
复制此清单应用本技能:
Doubt cycle:
- [ ] Step 1: CLAIM — 写出决策 + 重要性
- [ ] Step 2: EXTRACT — 隔离工件 + 契约,剥离推理
- [ ] Step 3: DOUBT — 用对抗性prompt调用新鲜上下文审查者
- [ ] Step 4: RECONCILE — 对每个发现按工件文本分类
- [ ] Step 5: STOP — 满足停止条件(微小发现/3轮循环/用户覆盖)
Step 1: CLAIM — 明确立场
用2-3行命名决策及其重要性:
CLAIM: "新的缓存层在规格描述的读密集负载下是线程安全的。"
WHY THIS MATTERS: 这里的竞态条件会损坏用户数据,且QA难以检测。
如果无法如此简洁地写出声明,你有的只是直觉,不是决策。在审查之前先把它明确出来。
Step 2: EXTRACT — 最小可审查单元
新鲜上下文审查者需要的是工件和契约,不是推理过程。
- 代码:diff 或函数 — 不是整个文件
- 决策:3-5句提案 + 必须满足的约束
- 断言:声明 + 支持证据(与 Step 1 的 CLAIM 块分开保留)
剥离你的推理。 如果你交出了结论,你得到的只会是对你结论的验证。审查单元必须小到审查者一次阅读就能把握 — 如果是500行的PR,先分解。
Step 3: DOUBT — 调用新鲜上下文审查者
审查者的 prompt 必须是对抗性的。框架决定答案。
对抗性审查。找出这个工件的问题。
假设作者过度自信。寻找:
- 未声明的假设
- 未处理的边界情况
- 隐藏的耦合或共享状态
- 契约可能被违反的方式
- 可能打破的现有约定
- 意外输入下的失败模式
不要验证。不要总结。找问题,或者在彻底审查后明确声明找不到任何问题。
ARTIFACT: <粘贴工件>
CONTRACT: <粘贴契约>
只传 ARTIFACT + CONTRACT。不传 CLAIM。 把你的结论交给审查者会偏向同意。审查者必须独立判断工件是否满足契约。
在扣子平台中的实现方式
使用 sessions_spawn 创建子Agent作为审查者:
- 子Agent的指令中只包含 ARTIFACT + CONTRACT + 对抗性prompt
- 不传递主Agent的会话历史或推理过程
- 子Agent独立分析后返回发现
跨模型审查(可选)
单模型审查者与原始作者共享盲点。不同架构的模型能捕捉这些盲点。
在交互式会话中,始终提供跨模型审查选项,让用户决定是否值得:
"单模型审查完成。需要跨模型二次审查吗?"
注意:每次调用都需要用户明确授权。不要因为用户之前同意过一次就持续调用。
Step 4: RECONCILE — 折叠发现
审查者的输出是数据,不是裁决。你仍然是编排者。 在分类之前重新阅读工件文本 — 橡皮图章式同意审查者和忽略审查者是同样的失败模式。
对每个发现,按此优先级顺序分类(首个匹配的分类生效):
- 契约误读 — 审查者标记的问题是因为你提供的 CONTRACT 不清晰或不完整。先修复契约,下一轮重新分类。
- 有效且可操作 — 需要修改工件的真实问题。修改它,重新循环。
- 有效权衡 — 问题是真实的,但修复成本超过接受成本。明确记录权衡让用户看到。
- 噪音 — 审查者标记了实际上在审查者没有的上下文下正确的东西。记录下来,继续,并思考:如果在契约中加入该上下文,能否防止这个误报?
新鲜审查者可能因为缺少上下文而犯错。不要因为它是"新鲜的"就盲目服从。
Step 5: STOP — 有界循环,不是递归
满足以下条件时停止:
- 下一轮只返回微小或已考虑过的发现,或
- 完成3轮循环(向用户上报,不要独自磨第4轮),或
- 用户明确说"就这样"
如果3轮后审查者仍然提出实质性问题,工件可能还没准备好。向用户展示这个情况 — 三轮未解决是关于工件质量的信息,不是继续循环的理由。
如果3轮"明显不够"因为工件太大:工件太大了 — 回到 Step 2 分解。不要提升上限。
Common Rationalizations
| 借口 | 现实 |
|---|---|
| "我很自信,跳过审查" | 自信与正确性在新问题上相关性很低。确定感最强的时刻正是盲点隐藏的时刻。 |
| "生成审查者成本太高" | 在生产中调试一个错误的提交成本更高。检查是有界的;bug不是。 |
| "审查者只会挑刺" | 只有在不设范围时才会。把prompt约束在"会导致契约失败的问题"。 |
| "最后用 /review 做审查" | /review 是最终门控。Doubt-driven 在方向错误但纠正成本低时抓住它。到PR时就太晚了。 |
| "每步都审查就永远发不了" | 本技能只适用于非平凡决策,不是每次按键。重读"不适用场景"。 |
| "两个意见总比一个好" | 当第二个意见上下文更少且产生噪音时则不然。调和,不要盲从。 |
| "审查者不同意所以我是错的" | 审查者缺少你的上下文 — 不同意是信息,不是裁决。重读工件,分类,然后决定。 |
| "用户说过一次yes就可以一直调用" | 每次调用都是独立的授权。工件、prompt和标志在调用之间变化 — 每次运行前都要和用户确认。 |
Red Flags
- 为单行重命名或格式化变更生成审查者
- 不重读工件文本就把审查者输出当作权威
- 循环>3轮不向用户上报
- 用"这样好吗?"而不是"找问题"来提示审查者
- 在时间压力下对高风险决策跳过审查
- 对未变更的工件重新生成审查(你会得到相同发现;你在拖延)
- 审查剧场(可检查信号):跨2轮以上,审查者提出实质发现,但没有一个被分类为可操作。你在验证,不是在质疑。停止并上报。
- 只在提交后才质疑 — 那是 /review,不是 doubt-driven
- 不确认外部CLI工具是否存在/已配置/接受该语法就硬编码调用
- 在交互式循环中静默跳过跨模型审查选项
- 剥离审查者输入中的契约
- 把 CLAIM 传给审查者(偏向同意)
Interaction with Other Skills
code-review-and-quality:互补。code-review 是事后PR裁决;doubt-driven 是飞行中逐决策。两者都用。test-driven-development:TDD 的 RED 步骤是具体化的质疑 — 失败测试就是证伪尝试。subagent-driven-development:子Agent完成每个任务后,用 doubt-driven 审查非平凡决策。self-improvement-loop:当 doubt cycle 发现的错误模式重复出现时,触发 self-improvement-loop。
Verification
完成 doubt-driven development 后:
- 每个非平凡决策在成立前都被明确命名为 CLAIM
- 每个非平凡工件至少经过一次新鲜上下文审查
- 审查者收到 ARTIFACT + CONTRACT — 不是 CLAIM,不是推理
- 审查者的prompt是对抗性的("找问题"),不是验证性的("好吗")
- 发现按工件文本分类(不是橡皮图章),使用优先级:契约误读/可操作/权衡/噪音
- 满足停止条件(微小发现、3轮、或用户覆盖)
- 交互式模式下,跨模型审查选项已明确提供给用户
- 任何外部调用都经过了路径检查、工作测试、语法确认和用户授权
相关技能
多维度质量审查,覆盖五轴(正确性/可读性/架构/安全/性能)+ Agent Skill安全审计(NVIDIA SkillSpector 16类漏洞模式 + Palo Alto BIV声明-行为完整性验证 + MCP Server安全审计)。 26%的Agent技能含漏洞,5.2%含恶意代码,80%存在声明与行为偏...
给自主智能体/自动化流水线加一层「人类在环审核」:把中高危、不可逆、外发隐私、提权、支付等 有副作用的动作路由到人工审核队列,阻止无人值守 agent 越权执行。内置审核分级(needs_review)、 审核队列(add/pending/approve/reject/summary)、完整审计(提议者/风险/审核人/结论/理由/时间戳)。 与 safety-guardrails 互补:护栏做 ALLOW/CONFIRM/DENY 决策,本技能把 CONFIRM 类动作转人工队列。 触发词:人类在环、人工审核、审核队列、审批流、human-in-the-loop、操作确认、越权拦截、agent 审核。
Stress-test high-risk changes with fresh-context skepticism before implementation or release. Use when work involves production, permissions, security contro...
多维度质量审查,覆盖五轴(正确性/可读性/架构/安全/性能)+ Agent Skill安全审计(NVIDIA SkillSpector 16类漏洞模式 + Palo Alto BIV声明-行为完整性验证)。 26%的Agent技能含漏洞,5.2%含恶意代码,80%存在声明与行为偏差——安全轴升级为七维:代码安全+...
多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。