---
name: devils-advocate
description: >-
  结构化压力测试一个论点（devil's advocate / 魔鬼代言人）：把论点拆成显性断言与隐性假设（A1/A2 编号），
  逐条在用户给定的证据材料里检索带出处的反方论证，标 High/Medium/Low 风险等级，补基础比率外部视角，
  最后给出「可监测的证伪信号」清单；输出结构化 findings + 人读叙事双层结果。找不到反证时如实声明「未找到」，
  绝不编造。复刻自 LinqAlpha（对冲基金 AI 产品）公开的 Devil's Advocate 架构，叠加 CIA 结构化分析技术与
  RAND 假设规划。当用户要「压力测试 / 唱反调 / 找盲点 / 拆假设 / 挑战这个论点 / bear case / 红队这个方案 /
  上投委会前过一遍 / pressure test my thesis」，或拿着投资论点、IC memo、研究结论、商业决策要人挑刺时，
  用本 skill——即使用户没说出"魔鬼代言人"这个词。
---

# Devil's Advocate 结构化反方论证

把「唱反调」从一种态度变成一道有出处、可审计、可持续监测的工序。

## 为什么这样设计（读懂了才不会走样）

三个实证结论决定了本 skill 的形状：

1. **默认状态的 LLM 会讨好提问者。** 经 RLHF 训练的模型系统性倾向于迎合用户已表达的信念而非说真话（Sharma et al., ICLR 2024）。分析师直接问模型「我这个论点对吗」，得到的答案有结构性偏正。所以反方角色必须被显式赋予，不能指望模型自发唱反调。
2. **没有证据的唱反调不但没用，还会帮倒忙。** 社会心理学的经典结果：角色扮演式的「指派反方」效果不如真实异议（Nemeth et al., 2001）；后续研究进一步指出，不真实的异见反而让人更固守原判断（Nemeth, 2018）。所以本 skill 的每一条反方论证都必须锚定到具体材料的具体位置——证据锚定是「真实异议」的代理，自由发挥的抬杠被禁止。
3. **显式反方人设的多 agent 结构有量化增益。**「批评者」角色相对此前最优评估方法（G-Eval）有 6.4-12.5 个百分点的相关系数提升（DEBATE, ACL Findings 2024）；论文另以定性结论指出反方人设显著优于中立多 agent 基线；多个「中立」agent 互评反而可能互相强化错误共识。

两个 references 常规执行不需要读：需要向使用者解释设计依据、或对某一步的做法产生疑问时才加载——完整谱系与逐字步骤见 [references/structured_analytic_techniques.md](references/structured_analytic_techniques.md)；被复刻产品的原始 prompt 与 schema 见 [references/linqalpha_reference_implementation.md](references/linqalpha_reference_implementation.md)。

## 入口判断

| 用户给了什么 | 走哪条路 |
|---|---|
| 论点 + 证据材料（文件/目录/URL 清单） | 完整六步流程（下文） |
| 只有论点，没有材料 | 先问用户要材料；用户说没有 → 请用户在两个选项里选：①先做检索把材料建起来再回来跑（若有检索类 skill 可先用）②只交付 Step 1 的假设拆解 + Step 5 的信号标（这两步不依赖材料；此时无 risk_flag 可筛，信号标覆盖全部负重假设），并明确说明反证检索未做 |
| 论点含混（一段散文、一个 IC memo） | 先按 Step 0 提炼出核心断言让用户确认，再继续 |
| 假设超过 8 条，或材料超大（总量超过约 20 万字 / 单文件读不完） | 主会话中用 fan-out 模式（见文末），全部负重假设进入检索；在子代理里运行本 skill 时只能单上下文，按负重排序取前 8 条 |

## Step 0 · 输入确认

三样东西，缺一样就先补齐：

1. **论点**：一句核心断言 + 它的支撑推理。用户给的是长文时，提炼成「X 将因为 Y 而 Z」形态并请用户确认——拆错了论点，后面全白做。在子代理内运行、没有用户可确认时：写出规范化论点，放进两份产物的头部并标注「未经确认」，然后继续。
2. **证据材料清单**：具体的文件路径 / 目录 / URL。逐个确认可读；不可读的当场报告，不静默跳过。
3. **用途**：上会前自查、还是评估别人的方案？决定人读层的语气与详略。

## Step 1 · 拆假设

把论点分解为两类，统一编号 A1、A2、A3……：

- **显性断言**（explicit assertions）：论点里直接写出来的。
- **隐性假设**（implicit assumptions）：没写出来、但论点要成立就必须为真的前提。这一类才是盲点的主产区——确认偏误让人看不见自己依赖了什么。

每条假设标两个属性：

- **类型**：事实性（现在就能核对）/ 预测性（关于未来）/ 机制性（关于因果链）。类型决定 Step 2 用什么反证。
- **负重**（load-bearing，RAND ABP 的判据）：把这条假设推翻，结论会不会实质改变？不会 → 降级，不进入反证检索，只在附录列出。

枚举不设上限，照实列全；「8 条」约束的是**进入反证检索**的条数。一条假设里若藏着结论可能相反的两个子命题（例如「壁垒存在」与「壁垒的收益归属某一家」——前者可能幸存、后者可能被反转），拆成两条分别检索，再一起参加负重排序。单上下文模式下超过 8 条进入检索时按负重取前 8，其余明确列为「未检索」——宁可深挖 6 条也不要浅扫 15 条；主会话 fan-out 模式不受此限，全部负重假设进入检索。

## Step 2 · 逐假设检索反证

对每条假设做两问（第二问是最容易漏的）：

1. **材料里有什么直接削弱、矛盾或引入不确定性的内容？**
2. **如果这条假设为真，材料里本应看到、却没看到的证据是什么？**（ACH 的核心一问——缺席的证据也是证据）

检索时按信源可信度排序采信（改编自 LinqAlpha 的 SEC > 专家访谈 > 券商报告）：

> 官方申报/公告/一手数据 → 专家访谈与电话会转录 → 券商/分析师报告 → 权威媒体报道 → 聚合转述/社媒（只能作线索，不能作反证锚点）

硬规则：

- **每条反方论证必须带引用**：来源文件（或 URL）+ 定位（页码/行号/章节）+ 逐字摘录。引语必须逐字，省略用省略号，禁止改写后仍加引号。
- **找不到就写「未在给定材料中找到反证」**，citations 置空。这是合法且有信息量的输出——但要在最终报告里注明它的含义只是「材料没覆盖」，不是「假设成立」。例外：材料里明确记录了「专门检索过且未找到」时，这本身是可引用的证据（「不存在的证据」强于「证据的不存在」），citations 指向那条记录。
- 一条证据归一个主家：放在它最直接反驳的那条假设下，其他假设需要时以引用编号指向它；只有当它对两条假设各自构成独立的直接反驳时才可重复出现。

## Step 3 · 结构化 findings（审计层）

默认写入当前工作目录的 `da_findings.json`（用户指定了位置则用用户的；供程序处理与复核）。顶层是一个**对象**而不是裸数组——覆盖面声明要有处安放（原厂 prompt 用裸数组，本 skill 为此改为对象）：

```json
{
  "run_metadata": { "thesis_normalized": "<规范化论点（无用户确认时标「未经确认」）>",
                    "materials": ["<材料清单与各自偏性>"],
                    "coverage": "<枚举 N 条 / 检索 M 条 / 未检索 K 条 / 降级 J 条>" },
  "findings": [ "<每条假设一个条目，结构见下>" ],
  "deferred_assumptions": [ "<降级与未检索的假设及理由>" ]
}
```

findings 里每条假设一个条目：

```json
{
  "assumption_id": "A1",
  "assumption": "<该假设的一句话精炼复述>",
  "type": "事实性 | 预测性 | 机制性",
  "counter_argument": "<证据支撑的反方论证，分析师文风，2-3 句>",
  "citations": [ { "doc": "<文件名或URL>", "loc": "<页/行/节>", "excerpt": "<逐字摘录>" } ],
  "rebuttal": "<材料中削弱本条反证的反-反证（如「打断者自己也延期了」），有则填；无则 null>",
  "missing_evidence": "<若假设为真本应看到却没看到的证据；无则 null>",
  "base_rate": "<外部视角：这类断言的历史成立率，有数据才写，无则 null>",
  "risk_flag": "High | Medium | Low",
  "signpost": "<可观测的证伪信号：什么事件/阈值出现说明这条假设正在失效，到哪里看>"
}
```

`risk_flag` 衡量的是这条反证对论点的杀伤力，不是发生概率。三档锚定：**High** = 该反证若成立，论点的核心结论不再成立；**Medium** = 结论仍立，但幅度或时间表显著折损；**Low** = 边际修正。防膨胀约束：若超过半数条目被判 High，先把全部条目按杀伤力互相排序再重新定档——全是 High 等于没有分级（首次实测第一版就判出了 6/8 个 High）。`citations` 至少一条（例外见 Step 2 的置空规则）；强反证常由多条独立事实叠加而成，全部列入而不是只挑一条。`base_rate` 是 Mauboussin 外部视角（LinqAlpha 没有的一层）：把假设放进参考类问「别人处在同样处境时结果如何」——只在**给定材料内**能构建参考类时填写（例如用材料自身记录的历史预测修正幅度），撑不起来就诚实置空。禁止编一个基础比率，也不为此另起检索：另查会破坏「论点 vs 给定材料」的检验边界，确需外部基础比率时明示使用者补充材料。

## Step 4 · 人读层渲染（交付层）

结构化条目不直接给人看（原厂的实际产品也是渲染成叙事层交付的）。人读层默认写入工作目录的 `da_report.md` 并同时在对话中交付。渲染规则：

- 开头一小段：先给覆盖面声明（检索了哪些材料、多少条假设进入检索、多少条未检索、材料构成有何偏性——例如「三份研报全是买入评级」这类元问题），再用几句话点出最有杀伤力的 2-3 条反证与论点最薄弱的一面。不下「论点对/错」的整体判决。
- 正文**按主题分组**（分组维度默认跟随论点自身的推理链条、每个环节一组，几条相关假设合并成一个小标题），不按 A1/A2 流水罗列；行文里用行内编号 [1] [2] 挂引用——[n] 按引用在正文首次出现的顺序编号。
- 每条论证 2-3 句，机构分析师文风：事实、克制、聚焦实质风险（竞争、监管、利润率、技术替代），不用感叹号不用反问句。
- 文末三个清单：**References**（[n] 编号对应的来源与逐字摘录，每条注明它反驳的假设编号 A1/A2）、**幸存假设**（检索后未找到反证的条目，注明「未找到 ≠ 成立」）、**覆盖面附录**（降级的非负重假设 + 超限未检索的假设，给开头的覆盖面声明以明细支撑）。

## Step 5 · 信号标清单

报告的最后一节：每条 High/Medium 假设一行——「盯什么、到哪看、什么读数算警报」（无材料模式下无 risk_flag 可筛，覆盖全部负重假设）。假设的脆弱性随时间变化，这一步把一次性批判延伸成可持续监测，是本 skill 长期价值所在——建议使用者把它并入自己的监测例程。

## 红线

- 不替用户判断论点整体对错、不给买卖建议——本 skill 的产出是「压力清单」，决策留给人。
- 反证的强度以证据为限：材料只支持「引入不确定性」就不许写成「证伪」。
- 语气校准：全程事实中立。魔鬼代言人是一道工序，不是一种情绪。
- 覆盖面诚实：报告开头声明检索了哪些材料、多少条假设进入了检索、多少条未检索。

## 本 skill 不能做什么（写给使用者，也写给执行的模型）

- **它检验的是「论点 vs 给定材料」，不是「论点 vs 世界」。** 材料本身有偏（比如全是看多研报），反证自然贫瘠——报告要指出材料构成的偏性，必要时建议补什么类型的材料。
- **它不能替代真实的持仓反方。** Nemeth 的结果同样约束 AI：证据锚定缓解了「角色扮演无效」问题，但一个真金白银持反方仓位的人类对手仍是更强的测试（Buffett 请做空者上股东会是这个道理）。
- **一次运行是快照。** 假设的脆弱性随时间变化——所以信号标清单才是长期价值所在，建议用户把它并入自己的监测例程。

## Fan-out 模式（仅主会话可用）

材料量大或假设多时，主会话按此并行：

1. 主会话完成 Step 0-1（拆假设必须在主上下文做——它需要完整理解论点）。
2. 每条（或每 2-3 条）假设派一个子代理：prompt 给「假设原文 + 材料路径清单 + Step 2 的两问 + Step 3 的 JSON 结构与 risk_flag 三档锚定（逐字内联）+ 逐字引用与禁编造规则」，并指定各自的落盘绝对路径（工作目录下 `da_findings_A<编号>.json`），要求先落盘再返回摘要。
3. 主会话收齐后合并为 `da_findings.json`：去重（同一证据被多条假设引用时，归属给 risk_flag 更高的那条，其余条目改为指向同一引用编号）、按三档锚定复核 risk_flag，再做 Step 4-5 的渲染与信号标。
4. 子代理内运行本 skill 时不可再派代理——退回单上下文模式。

## 与其他 skill 的组合

- 材料不足时，先用检索/行业研究类 skill（如同套件的 daymade-sector-research）把证据库建起来，再回来跑本流程——本 skill 假定材料已在手。
- 压测完成后的自然下一步：把信号标清单并入用户的监测例程，或对修订后的论点 2.0 再跑一轮（版本化对比：哪些反证被吸收了、哪些被反驳了）。按需建议，不强推。

## 设计依据（速查）

| 设计元素 | 来源 |
|---|---|
| 四步流程、显性/隐性假设分类、citation 强制、风险分级、双层输出 | LinqAlpha Devil's Advocate（AWS 官方技术博客 2026-02 公开的生产 prompt 与 schema） |
| 「未说明但必须为真」的假设定义、逐条追问「为什么必须成立」 | CIA Key Assumptions Check（Tradecraft Primer, 2009） |
| 证伪优先、「该看到而没看到的证据」 | Analysis of Competing Hypotheses（Heuer / CIA Primer） |
| 负重假设、信号标（signpost） | RAND Assumption-Based Planning（1993/2002） |
| 外部视角 / 基础比率层 | Mauboussin & Callahan, The Base Rate Book（2016） |
| 证据锚定的必要性（角色扮演式异议无效） | Nemeth et al.（2001） |
| 显式反方人设优于中立多 agent | DEBATE（ACL Findings 2024）；Du et al. 多智能体辩论（2023） |
