# 美伊战争往哪里走？我让 AI Agent 互相查核，然后做判断

> 美伊战争会怎么发展？我用 Grok、Perplexity、Claude 三层分工互相查核，拿到可查证的双边财务数据：伊朗承受的损失接近战前 GDP 的四成，美国直接军费则约占 GDP 的 0.15%。判断是一场消耗战，但时间不是单边站在美国。文中附三层分工方法、查证指令产生器与可安装的 cross-check skill。

- Author: Paul Kuo（郭曜郎）
- Date: 2026-07-16
- Pillar: 智能与秩序 / Intelligence & Order
- Tags: 美伊战争, 多 Agent 协作, 事实查核, 消耗战, Grok, Perplexity, 霍尔木兹海峡
- Canonical: https://paulkuo.tw/zh-cn/articles/verify-news-with-ai-agents/
- Language: Simplified Chinese (简体中文)
- Translation: AI-translated from the zh-Hant (Traditional Chinese) original
- Original (zh-Hant): https://paulkuo.tw/articles/verify-news-with-ai-agents.md
- Site index for LLMs: https://paulkuo.tw/llms.txt

---

*本文持续根据最新战况更新事件时间轴与油价数据，最近一次更新日期见上方「最后更新」。*

> **TL;DR** — 我想判断美伊战争往哪里走，所以让手上的 AI Agent 互相查核，拿到可查证的双边财务数据。判断：这是一场两个时钟的消耗战，伊朗的破产时钟走得比较快，但美国也被选举、油价与拦截弹库存追着跑。方法（三层分工＋查证指令产生器）与所有来源都在文中。

<div class="listen-summary" style="margin:1.25rem 0;padding:0.75rem 1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-section);">
  <div style="font-size:0.9rem;font-weight:600;color:var(--text-secondary);margin-bottom:0.5rem;letter-spacing:0.02em;">▶ 听摘要</div>
  <audio preload="none" controls style="width:100%;display:block;">
    <source src="https://audio.paulkuo.tw/verify-news-with-ai-agents-zhcn.mp3" type="audio/mpeg" />
    您的浏览器不支持音频播放，请点此 <a href="https://audio.paulkuo.tw/verify-news-with-ai-agents-zhcn.mp3">下载音频</a>。
  </audio>
  <div style="font-size:0.75rem;color:var(--text-secondary);opacity:0.75;margin-top:0.4rem;">AI 合成语音・作者本人声线克隆</div>
</div>

我今天早上一直用 Grok 追国际新闻。每回答一轮，它旁边就多一排来源：30 sources、42 sources、55 sources……但当我请它把二十几轮对话整理成一份报告，来源栏最后只剩下一行字：

> **数据来源**：公开新闻报道、官方声明、历史案例参考

零链接，零篇名，零日期。刚才还看得到的几百个来源，一个都没有进入最后的报告。

我追这场美伊冲突，不只是想测试 AI。我真正想知道的是：这场战争往哪里走？而要做出判断，前提是手上的情报可以查证。

这篇文章的上半部，拆解三个 Agent 如何分工，以及错误最容易发生在哪个环节；下半部则根据查核过的财务数据，提出我对战争走向的判断。这篇是「[AI 与人类秩序](/zh-cn/topics/ai/)」系列的一部分。

## 三层分工：谁负责什么

先说结论。多 Agent 查核不是把同一个问题丢给几个模型，再取它们答案的交集。真正有效的做法，是把三种性质不同的工作分开：

| 层 | 工作 | 要什么能力 | 这次的实测结果 |
|---|---|---|---|
| **检索** | 把事实捞出来，要广、要新、要多源 | 即时网络搜索、多轮追问 | 数据大多正确 |
| **整理** | 把对话收敛成结构化的东西 | 长文组织能力 | **三个模型都在这层出错** |
| **查核** | 验证每个论断是否能追溯至原始来源 | 强推理 + 实际点开链接 | 抓到三个硬错 |

关键在于，整理与查核必须由不同的角色负责。查核 Agent 不能先读前一层的推理过程，否则它很容易沿着同一套叙事继续走下去。这三层不一定要由三个不同品牌的模型负责。你也可以在同一个 AI 里开三个彼此独立的对话：第一个找数据，第二个整理，第三个只看成品并逐条查核。重点不在用了几个模型，而是三个角色不能混在一起。

## 第一层：检索，其实比我预期可靠

这次实测的目的，不是证明 Grok 不可靠。例如，Grok 提到新加坡籍货柜轮 Ever Lovely 在 6 月 25 日于阿曼外海遭无人机击中，驾驶台受损，没有造成人员伤亡。这项信息可以在 [gCaptain 的完整报道](https://gcaptain.com/drone-strike-on-ever-lovely-exposes-the-fiction-of-a-free-strait/)中查到。

至于「伊朗经济损失达 1,440 亿美元，约占战前 GDP 四成」这个看起来很惊人的数字，也不是模型捏造，而是来自 [FDD 的估算](https://www.fdd.org/analysis/2026/06/26/irans-economic-catastrophe/)。几十轮追问下来，船名、伤亡人数与价格大多仍能回到具体来源。至少在这次测试中，检索层的质量比我原先预期得好。

**这一层的操作要点**：选择具备即时搜索能力的模型，例如 Grok 或 Perplexity，然后持续追问。只问一次，通常只会得到最表层的事件摘要；追问不同立场、数字是否合理、有没有别的解释，数据才会展开。

## 第二层：整理，也是 AI 最容易犯错的一层

问题出现在我请 Grok 把二十几轮对话整理成报告之后。后面我把这个过程叫做「压缩」。报告的时间轴从这里开始：

> **6月17日**：美伊签署临时停火协议（MOU）

实际上，战争从 [2 月 28 日开始](https://www.fdd.org/analysis/2026/04/23/evaluating-the-economic-damage-to-iran-from-operation-epic-fury-an-initial-estimate/)，3 月 4 日海峡关闭。4 月曾短暂停火，之后封锁再次升级，直到 6 月 17 日才签署备忘录。Grok 的报告却直接从 6 月 17 日开始，前面将近四个月被压缩成了背景。这也让后面的数字失去脉络。1,440 亿美元是从 2 月 28 日开战后逐步累积的估算，但报告没有交代前面几个月的战事与封锁，读者很难理解这笔损失是如何形成的。报告同样漏掉了备忘录的核心条款，[海峡先维持 60 天免费通行、期满再协商管理权](https://www.cnbc.com/2026/06/17/iran-mou-deal-strait-hormuz-oman-toll.html)，而真正的争议就藏在那句模糊的文字里。

比漏东西更值得注意的，是原本的保留语气如何在整理过程中消失。对话里我问 Grok 谁先破坏停火，它说：

> 简单说，先开第一枪的是伊朗，**这是美国和多数西方报道的共识**。

这句话标了立场，也标了立场的来源范围。我追问伊朗那边怎么说，它照实给了革命卫队的版本。然后我请它整理成报告。第五节变这样：

> **结论**：**伊朗先开第一枪**，是停火协议破坏的始作俑者。

「这是美国和多数西方报道的共识」消失了，「始作俑者」却进来了。而这件事实际上有争议：7 月 8 日伊朗外交部反过来指控美方破坏协议。**我们常把 AI 幻觉理解成模型凭空捏造信息，但这次遇到的不是捏造，而是条件消失了：一句带有立场、范围与保留的话，被压缩成一句确定的结论。** 原始数据是真的，但整理过程把原本的保留语气拿掉了。这类错误比捏造更难察觉：捏造通常找不到来源，容易引起警觉；保留语气消失后，事件本身仍然查得到，读者反而可能直接放行。

接着，我把 Grok 的报告交给 Perplexity 重新整理。它补回了不少重要骨架：完整时间轴、60 天免费通行条款、[Bruegel 对通行费实际负担者的分析](https://www.bruegel.org/sites/default/files/2026-04/could-a-hormuz-toll-solve-the-oil-crisis-and-who-pays%3F-12083_4.pdf)、UNCLOS 的法律争议，以及 IEA 对替代管线容量的估算。更重要的是，这些内容都附有可追溯的链接。Perplexity 也发现，Grok 对通行费年收入的估算低了将近五倍。

最后，我把前两份数据交给 Claude，请它整理成文章初稿。它也错了，而且错了三次。初稿指出 Perplexity 有两处错误，逐一查核后，两项指控都不成立。第一项不是数字错，而是日期消失了。Perplexity 写「布伦特已上涨逾 45%，约增加 35 至 40 美元」，Claude 认为它把先前高峰误写成当前价格。回到来源后才发现，这是 Bruegel 4 月 8 日原文中的数字；真正的问题，是 Perplexity 没有保留数据日期。初稿又说 Perplexity 的「8 月 21 日到期」查不到依据；但那个日期查得到，[OFAC 在 6 月 22 日发出 General License X](https://ofac.treasury.gov/recent-actions/20260622_33)，授权伊朗石油销售 60 天到 8 月 21 日。Perplexity 只是把两个都真实、起算点却不同的 60 天期限接在了一起。

第三个问题更直接。初稿在下方图表中，把 7 月 7 日的油价标成「约 73 美元」；来源原文写的是 7 月 8 日、76.48 美元。既没有 73 这个数字，日期也差了一天。

| 层 | 错误 | 性质 |
|---|---|---|
| Grok | 「多数西方报道的共识」→「结论」 | 拿掉了立场与保留语气 |
| Perplexity | Bruegel 四月的数字当成七月现况；OFAC 的 8/21 接到 MOU 的时钟上 | 掉了时间戳 |
| Claude | 断言一个查得到的日期「查不到依据」；补了一个没来源的价格点 | 没查就下结论 |

三个模型，三种掉法，却指向同一个失效点：整理。当模型把多轮对话与多份来源压缩成一份流畅的报告，数据日期、消息立场、适用范围与保留语气最容易在过程中消失。它们在原文里常只是短短的插入语，对理解可信度却非常重要；但在追求精简与流畅的过程中，往往最先被牺牲。

**这一层的操作要点**：每次把数据交给下一个 Agent，都要确保三样东西一起被保留下来：来源、时间戳与保留语气。少了任何一项，下一层即使想查，也很难准确回到原文。

这次也改变了我对 Perplexity 的看法。我原本以为 Perplexity 在多 Agent 流程中可以省略，这次测试却让我看见它的价值：即使整理出错，它仍保留来源，让我能追溯到原文。相较之下，Grok 报告中「每日损失 4.3 亿美元」没有附上可追溯来源，我至今仍无法确认它来自哪里。

## 第三层：查核。四条指令

我第一次读初稿时，一个问题都没有看出来。那份稿子结构完整、语气笃定，读起来太顺，让我差点直接发布。但文章挂的是我的名字，最后为错误负责的也是我。

最后抓到这些问题的，是第四个 Agent。它没读过前面的对话与推理，只拿到成品，扮演独立查核员。它和前面几个模型最大的差别很简单：它真的逐一打开了链接。我给它的指令只有四条，其中真正发挥作用的是第三条。

**一、查核层必须独立。** 查核 Agent 只能拿到成品，不要先读前面的推理过程，否则它会沿着同一条线继续推论，变成替原稿背书。工具有子代理功能，就另开一个独立 Agent；若只有聊天界面，就开一个全新窗口，只贴成品，不要附上前面的推理过程。

**二、只回报问题，不要直接修改。** 一边检查一边重写，你就很难知道原稿到底错在哪里、错了几项。先留下完整的问题清单，再由人决定要改什么。

**三、实际点开来源，不要只靠记忆重述。** 这次能抓到日期与价格的错误，是因为查核 Agent 实际打开了 Bruegel 的 PDF 与 OFAC 公告，逐句比对原文。若只让它依赖既有知识或搜索摘要，这些问题很可能会直接过关。

**四、明确告诉它：「找到问题比让我过关重要。」** 否则，模型很容易把任务理解成协助你完成文章，而不是尽可能挑出问题。

<div class="cc-tool" id="ccTool">
  <div class="cc-head">
    <h3 class="cc-title">交叉查证指令产生器</h3>
    <p class="cc-sub">选你的场景，复制指令，贴进你惯用的 AI。空白处填上你要查的东西就能跑。</p>
  </div>
  <div class="cc-controls">
    <div class="cc-field">
      <label class="cc-label">场景</label>
      <div class="cc-tabs" id="ccScene" role="tablist">
        <button class="cc-tab is-on" data-scene="news" role="tab">时事／国际局势</button>
        <button class="cc-tab" data-scene="research" role="tab">研究／论文摘要</button>
        <button class="cc-tab" data-scene="internal" role="tab">内部报告／对外文件</button>
        <button class="cc-tab" data-scene="general" role="tab">通用</button>
      </div>
    </div>
    <div class="cc-field">
      <label class="cc-label" for="ccTopic">你要查的主题（一句话，选填）</label>
      <input class="cc-input" id="ccTopic" type="text" placeholder="例：2026 美伊霍尔木兹海峡冲突的经济消耗分析">
    </div>
    <div class="cc-field cc-field-inline">
      <label class="cc-check"><input type="checkbox" id="ccLinks" checked><span>要求它实际点开每个链接读原文</span></label>
      <label class="cc-check"><input type="checkbox" id="ccStrict" checked><span>加上「找到问题比让我过关重要」</span></label>
    </div>
  </div>
  <div class="cc-out">
    <div class="cc-out-head">
      <span class="cc-out-label">产生的指令</span>
      <button class="cc-copy" id="ccCopy" type="button">复制</button>
    </div>
    <pre class="cc-pre" id="ccPre"></pre>
  </div>
  <p class="cc-note">
    这段指令的骨架来自本文的实测：它抓到三个硬错。真正有效的是「点开链接读原文」那条，关掉它效果会掉很多。
  </p>
</div>

拿到报告后不要照单全收，依结果分流：

- `confirmed`：已有可靠来源支持，可以保留。
- `corrected`：有明确来源证明原文有误，应予修正。
- `unverifiable`：目前无法确认，可删除、补充来源，或改成较保守的表述。
- `overreach`：事实本身成立，但推论超过证据能支持的范围，应收窄措辞。

还要多留一道防线：**查核 Agent 本身也可能出错。** 它回报的每一项「原稿有误」，仍要由人打开来源确认一次。这次那份报告里有一条是它自己的推算，它主动标了「此为我的推算，非查证」。真正该警惕的，是推算被写得像已经查证过的事实。如果使用 Claude Code 或 Cowork，我已把这套流程包成可安装的 skill，安装后只要说「帮我查证」就会执行。若使用一般聊天界面，直接复制上面的指令，也能得到接近的效果。

## 查核后的战况情报才清楚

完成检索、整理与查核后，这场冲突的时间线与价格变化才逐渐清楚。下面这张图的价格线是 EIA 官方日线，图上只保留已完成查核、能追溯来源的事件节点；点击节点即可查看细节与出处。

<div id="hormuz-oil-timeline"></div>

市场冲击最剧烈的阶段在 3 月至 4 月：海峡通行大幅受阻，布伦特从约 72 美元一路升至 126。6 月 15 日协议一出，单日一度跌 5.7%。7 月 15 日九月期货结算在 84.95 美元，反映的是市场对「冲突重新升高，但海峡尚未回到完全封锁」的评估。接下来有几个时间点值得观察。MOU 的免费通行期将在 8 月 16 日到期；OFAC 豁免原订持续至 8 月 21 日，但已在 7 月 7 日提前撤销，清仓期只到 7 月 17 日。另一方面，海峡自 7 月 11 日再次关闭，美军也重启封锁。川普则在 7 月 14 日放弃了前一天提出的 20% 过境费方案。

这张图不是单一模型一次生成的结果。价格线接的是 EIA 官方现货序列，事件锚点是经过检索、整理与查核后留下来的版本。它最重要的价值没有变：每个事件都能回到具体来源，而价格这一层，现在整条线就是来源。

## 所以，这场战争往哪里走？

基于目前可查证的财务数据，这是一场经济消耗战，也是两个时钟的赛跑。伊朗的时钟走得较快，但美国的时钟同样在倒数。

前面的三层流程不是为了比较哪个 AI 更强，而是为了取得足以支撑判断的数字。

**伊朗这边的账。** 开战前伊朗每天出口略高于 210 万桶原油，5 月一度掉到接近零；[FDD 估计](https://www.fdd.org/analysis/2026/06/26/irans-economic-catastrophe/)封锁期间日损约 4.35 亿美元，开战以来总损失约 1,440 亿，接近战前 GDP 的四成，而且作者明说这是地板不是天花板。官方统计的通胀点对点到了 [88.6%，肉类接近 178%](https://www.euronews.com/business/2026/06/30/irans-inflation-spiral-deepens-as-rial-slides-and-tensions-rise)；里亚尔一年贬了约五成三。据《华盛顿邮报》报道的 [CIA 评估](https://www.iranintl.com/en/202605077807)（Iran International 转述），伊朗「至少能撑 3 到 4 个月」；体制内经济学者则认为，封锁一旦超过两三个月，伤害会快速加剧。

停火的 26 天，伊朗抢卖出逾 8,000 万桶原油，进账超过 60 亿美元，短暂替时钟回拨了一点。但 [7 月 17 日之后](https://ofac.treasury.gov/recent-actions/20260707)，连这扇合法卖油的窗口也关上了。

<div id="hormuz-strait-map"></div>

**美国这边的账。** 官方口径到 6 月底花了[约 300 亿美元](https://www.airandspaceforces.com/omb-director-iran-war-cost-30b-supplemental/)，[CSIS 估 340 到 420 亿](https://www.csis.org/analysis/war-may-be-ending-what-did-epic-fury-cost)，其中弹药 261 亿是最大宗。绝对金额不小，单位交换更难看：一枚拦截弹是无人机造价的几十倍。以 GDP 比例粗略比较，美国目前的直接军费约占 GDP 的 0.15%；伊朗承受的整体经济损失则接近战前 GDP 的四成。两者口径并不完全相同，但仍足以看出承受力的巨大差距。核心不在谁花得少，而是谁更付得起。

**伊朗的军费是个黑箱，只能推算。** 没有任何智库发表过伊朗方弹药消耗的美元估算，所以这一段是本文的推算，非查证。已知伊朗发射约 [1,500 至 2,300 枚弹道导弹](https://www.inss.org.il/publication/lions-roar-data/)（INSS、NBC/IDF 与 JINSA 口径不一），以及[约 4,400 至 5,400 架自杀无人机](https://www.washingtoninstitute.org/policy-analysis/irans-drone-strategy-part-1-wartime-performance-and-adaptations)（含代理人发射，依统计口径）。依公开单价区间粗估，作战消耗约为 10 至 50 亿美元，大约是美方直接军费的十分之一。这正是廉价消耗战的设计：用较低成本，迫使对方消耗昂贵拦截弹。

但伊朗还有另一本更大的账：被摧毁的军事资产。[FDD 估计](https://www.fdd.org/analysis/2026/04/23/evaluating-the-economic-damage-to-iran-from-operation-epic-fury-an-initial-estimate/)其重置成本约 460 亿美元，约占 FDD 总实体重置估算（910 亿）的一半，相当于伊朗 4 到 6 年的年度军费（[SIPRI 口径](https://www.sipri.org/media/press-release/2026/global-military-spending-rise-continues-european-and-asian-expenditures-surge)年约 74 亿）。若把弹药消耗与受损军事资产合并计算，两边的军事账单可能落在接近的量级，但性质完全不同：美国消耗的是仍可通过预算与产能补回的现金流；伊朗损失的则是短期内难以重建的资本存量。

不过，美国也有三个自己的时钟。

**第一是拦截弹库存。** 七周作战用掉近半 Patriot、至少一半 THAAD，[2026 年内没有新的 THAAD 交付](https://www.csis.org/analysis/last-rounds-status-key-munitions-iran-war-ceasefire)，补货要等到 2027 年。

**第二是期中选举。** [58% 民众反对这场战争](https://www.brookings.edu/articles/the-political-consequences-of-the-iran-war/)，汽油从每加仑 2.98 美元涨到 4.48 美元（5 月中），战争账单直接寄到选民家里。

**第三是油价的缓冲空间。** [战略储油已降到 1983 年以来最低](https://www.aljazeera.com/economy/2026/7/9/why-the-us-strategic-petroleum-reserve-matters-amid-us-iran-tensions)，美国能用来压低油价的政策工具比过去更少。

美国的行为也对得上这三个时钟：四个月内三度寻求停火，7 月 13 日提出的过境费方案一天之内就放弃。

所以我的推论是：**美国承受成本的相对能力远高于伊朗，封锁式的经济消耗战对它可行；拖得越久，对伊朗越不利。但时间不是单边站在美国那里。这是伊朗的破产时钟，与美国的选举、油价、拦截弹时钟之间的赛跑，哪一个时钟先响，战争就可能在哪里转弯。**

这个判断有一条边界：它建立在 7 月中可查证的公开数据上，而有几个关键数字到今天仍然查不到。伊朗还剩多少可动用的外汇储备、7 月 8 日战事重启后美方的新增支出、伊朗 7 月的通胀，都没有可信数字。任何一个补上，判断就可能要修。这正是上半篇那套方法存在的理由：做出判断不是结束。判断挂在数据上；数据一变，它就必须跟着调整。

## 需要问的三个问题

除了工具与流程，让查核质量提高的，是我在对话中反复问的三个问题。它们不需要任何付费订阅。我问「伊朗方面怎么说？」它才补上革命卫队的版本；我问「伤亡人数合理吗？」它才检查船员编制与命中位置；我问「有没有可能是自导自演？」它才开始正面检验另一种假设。

整理成最简单的版本，就是三个问题：**对面怎么说？这个数字合不合理？它有没有可能不是表面上看到的那样？**

这些问题不一定会由模型主动提出。你不追问，它通常就会沿着上一轮形成的叙事继续回答。这三句话就是第一层「持续追问」的内容。

我之前在〈[知识管理不靠自律，靠管线](/zh-cn/articles/knowledge-pipeline-not-discipline/)〉里写过：凡是长期依赖人类手动维持的流程，最后都很容易崩坏。当时谈的是笔记整理。这次放到事实查核上，我才发现这个结论只说对了一半。管线可以帮你搬运数据、保留来源，甚至自动派一个 Agent 去把链接逐条打开。但是否启动它，最后仍需要有人做决定。

今天我差点没按。

## 当每个人都能快速整理国际局势，下一个问题是什么？

工具确实已经到位。一个早上跑完三层流程，我拿到的数据量与分析广度，大概接近十年前一名记者要靠数据库、智库与多次采访才做得出来的初步研究。信息取得的门槛已经低得惊人。

但入场门槛，仍然是愿不愿意多问一下：**这个数字从哪里来？**

多叠几个 AI，不会自动回答这个问题。若每一层都只是重写上一层的结论，错误只会被整理得更流畅、更有结构，也更像一份可以直接寄出去的正式报告。Grok 那份报告的最后一行写着：「本报告仅供参考，不构成投资或决策建议。」它连免责声明都学会了，只是还没学会把来源带着走。

上面的查证工具，是我今天替自己补上的一道防线。以后每篇重要文章，都会先跑一次。你也可以直接拿去使用。

## 常见问题

**Q: 多 Agent 查核要怎么分工？**

分成三层。检索层要广度与即时性，用具备网络搜索的模型，把一个问题持续追问而不是问一次就收。整理层把对话收敛成结构，这层最容易出错，交出去时来源、时间戳与保留语气必须一起被保留。查核层必须由独立的 Agent 负责，不能先读前面的推理过程，只拿成品，指令是「只回报、不要改」，并要求它实际打开每个链接回到原文。

**Q: 一定要同时订阅三个 AI 吗？**

不用。三层不一定要由三个不同品牌的模型负责，你也可以在同一个 AI 里开三个彼此独立的对话：第一个找数据，第二个整理，第三个只看成品并逐条查核。重点不在用了几个模型，而是三个角色不能混在一起。

**Q: Grok 那份报告的数字到底哪些是真的？**

船名、日期、伤亡数字大多正确：Ever Lovely 6 月 25 日遭无人机击中、Mombasa 与 Al Bahiyah 7 月 13 日遭巡航导弹击中、1 死 8 伤（6 名印度籍、2 名乌克兰籍、4 人重伤），逐条查得到。1,440 亿美元也不是捏造，出自 FDD 估算，但 FDD 给的是 500 至 3,000 亿的范围、1,440 亿只是最可能值，报告写成了确定数字。

**Q: 没有付费订阅也能做吗？**

可以，成本主要是耐心。单一模型也能跑这套，只是你得自己扮演查核层：开一个全新对话窗口，贴上成品但不要贴你的推理过程，然后照四条指令跑。真正起作用的动作只有两个：追问另一方的说法，以及打开来源自己看一眼。

<style>
  .article-body .cc-tool {
    background: var(--card, #FCFAF4);
    border: 1px solid var(--hairline, rgba(26, 34, 64, 0.12));
    border-radius: 8px;
    padding: 1.5rem 1.25rem 1.25rem;
    margin: 2.5rem 0;
    font-family: var(--sans, 'Noto Sans TC', ui-sans-serif, system-ui, sans-serif);
    color: var(--ink, #1A2240);
  }
  .article-body .cc-tool .cc-head { margin-bottom: 1.25rem; }
  .article-body .cc-tool .cc-title { font-size: 1.05rem; font-weight: 650; margin: 0 0 0.3rem; color: var(--ink, #1A2240); letter-spacing: 0.01em; }
  .article-body .cc-tool .cc-sub { font-size: 0.8rem; margin: 0; color: var(--mist, #6F6A5C); line-height: 1.6; }
  .article-body .cc-tool .cc-controls { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 1.25rem; }
  .article-body .cc-tool .cc-label {
    display: block; font-size: 0.72rem; color: var(--mist, #6F6A5C);
    letter-spacing: 0.06em; margin-bottom: 0.45rem; font-weight: 600;
  }
  .article-body .cc-tool .cc-tabs { display: flex; flex-wrap: wrap; gap: 0.4rem; }
  .article-body .cc-tool .cc-tab {
    background: var(--paper, #F8F5EE);
    border: 1px solid var(--hairline, rgba(26, 34, 64, 0.12));
    color: var(--ink-mute, #5A6280); font-size: 0.8rem; font-family: inherit;
    padding: 0.4rem 0.75rem; border-radius: 6px;
    cursor: pointer; transition: all 0.14s ease;
  }
  .article-body .cc-tool .cc-tab:hover { border-color: var(--gold-hair, rgba(184, 149, 106, 0.4)); color: var(--ink, #1A2240); }
  .article-body .cc-tool .cc-tab.is-on { background: rgba(184, 149, 106, 0.14); border-color: var(--gold-display, #9A7A45); color: var(--gold-display, #9A7A45); font-weight: 600; }
  .article-body .cc-tool .cc-input {
    width: 100%; box-sizing: border-box;
    background: #FFFFFF;
    border: 1px solid var(--hairline, rgba(26, 34, 64, 0.12));
    border-radius: 6px; color: var(--ink, #1A2240);
    font-size: 0.85rem; font-family: inherit; padding: 0.5rem 0.7rem;
  }
  .article-body .cc-tool .cc-input:focus { outline: none; border-color: var(--gold-display, #9A7A45); }
  .article-body .cc-tool .cc-input::placeholder { color: var(--mist-soft, #B5B0A2); }
  .article-body .cc-tool .cc-field-inline { flex-direction: row; flex-wrap: wrap; gap: 1rem; }
  .article-body .cc-tool .cc-check { display: flex; align-items: center; gap: 0.4rem; font-size: 0.78rem; color: var(--mist, #6F6A5C); cursor: pointer; }
  .article-body .cc-tool .cc-check input { accent-color: var(--gold-display, #9A7A45); cursor: pointer; }
  .article-body .cc-tool .cc-out { border: 1px solid var(--hairline, rgba(26, 34, 64, 0.12)); border-radius: 8px; overflow: hidden; background: var(--paper-warm, #F2EDDF); }
  .article-body .cc-tool .cc-out-head {
    display: flex; align-items: center; justify-content: space-between;
    padding: 0.5rem 0.75rem; background: var(--paper-deep, #ECE6D4);
    border-bottom: 1px solid var(--hairline, rgba(26, 34, 64, 0.12));
  }
  .article-body .cc-tool .cc-out-label { font-size: 0.7rem; color: var(--mist, #6F6A5C); letter-spacing: 0.06em; font-weight: 600; }
  .article-body .cc-tool .cc-copy {
    background: transparent; border: 1px solid var(--gold-display, #9A7A45); color: var(--gold-display, #9A7A45);
    font-size: 0.72rem; font-family: inherit; font-weight: 600;
    padding: 0.28rem 0.7rem; border-radius: 5px; cursor: pointer; transition: all 0.14s ease;
  }
  .article-body .cc-tool .cc-copy:hover { background: rgba(184, 149, 106, 0.14); }
  .article-body .cc-tool .cc-copy.is-done { background: var(--gold-display, #9A7A45); color: #FFFFFF; }
  .article-body .cc-tool .cc-pre {
    margin: 0; padding: 0.9rem;
    font-family: var(--mono, 'JetBrains Mono', ui-monospace, monospace);
    font-size: 0.74rem; line-height: 1.65; color: var(--ink-soft, #2A3253);
    white-space: pre-wrap; word-break: break-word;
    max-height: 26rem; overflow-y: auto;
  }
  .article-body .cc-tool .cc-pre::-webkit-scrollbar { width: 8px; }
  .article-body .cc-tool .cc-pre::-webkit-scrollbar-thumb { background: var(--hairline, rgba(26, 34, 64, 0.12)); border-radius: 4px; }
  .article-body .cc-tool .cc-note {
    font-size: 0.72rem; color: var(--mist, #6F6A5C); line-height: 1.6;
    margin: 0.9rem 0 0; padding-top: 0.75rem;
    border-top: 1px solid var(--hairline-soft, rgba(26, 34, 64, 0.06));
  }
  @media (prefers-reduced-motion: reduce) { .article-body .cc-tool .cc-tab, .article-body .cc-tool .cc-copy { transition: none; } }
</style>


<script>
(function () {
  var tool = document.getElementById('ccTool');
  if (!tool) return;

  var EXTRA = {
    news:
      '## 任务 C：时效性额外检查\n\n' +
      '- 每个「目前」「现在」「最新」的宣称，实际是哪一天的数据？\n' +
      '- 有没有更近的发展，推翻了文中的结论？\n' +
      '- 有争议的事件，有没有只呈现单方说法？对面怎么说？\n' +
      '- 数字有没有搞混不同的时间点？（例如把三个月前的高峰当成现况）',
    research:
      '## 任务 C：研究引用额外检查\n\n' +
      '- 引用的论文真的存在吗？作者、年份、期刊对吗？\n' +
      '- 论文原文的结论，跟这里写的一致吗？有没有被放大？\n' +
      '- 样本数、效果量、信赖区间有没有被省略？\n' +
      '- 是预印本还是同侪审查过的？文中有没有讲？',
    internal:
      '## 任务 C：内部文件额外检查\n\n' +
      '- 有没有哪个数字，我们自己的系统其实查得到，却用了外部估计值？\n' +
      '- 有没有把「单一来源的说法」写成「业界共识」？\n' +
      '- 错了的话谁会受影响？照这个严重度排序回报。',
    general: ''
  };

  function build() {
    var scene = tool.querySelector('.cc-tab.is-on').dataset.scene;
    var topic = document.getElementById('ccTopic').value.trim() || '{{一句话说明主题}}';
    var links = document.getElementById('ccLinks').checked;
    var strict = document.getElementById('ccStrict').checked;
    var today = new Date().toISOString().slice(0, 10);

    var p = '你是独立查核员。任务：对下面这份成品做事实查证。\n';
    p += '**只回报，不要改任何东西。**\n\n';
    p += '成品：{{贴上内容，或给文件路径}}\n\n';
    p += '今天是 ' + today + '。这份东西的主题是：' + topic + '\n\n';

    p += '## 任务 A：逐条查证\n\n';
    p += '用网络搜索逐条验证文中每个事实宣称。特别盯：\n';
    p += '- 人名 + 头衔（最常出错）\n';
    p += '- 统计数字与百分比（注意它原本有没有范围，有没有被写成确定值）\n';
    p += '- 日期与时间线\n';
    p += '- 引述与归因（谁说的，有没有张冠李戴）\n';
    p += '- 因果宣称\n\n';

    if (links) {
      p += '**同时检查文中每个外部链接，逐条做这四件事：**\n';
      p += '1. 这个网址真的存在吗？\n';
      p += '2. **点开它，原文真的这样说吗？**（不要用记忆复述，要实际读）\n';
      p += '3. 原文有没有时间戳？那个数字是「什么时候」的？成品有没有把它当成现在的？\n';
      p += '4. 原文有没有保留语气，例如「多数」「约」「据估计」或「在某些情况下」？成品是否把这些字拿掉，让说法变得过度确定？\n\n';
    }

    p += '输出格式（只列有问题的，confirmed 的合并成一行带过）：\n\n';
    p += '| 宣称 | 查核结果 | 信心度 | 建议 |\n\n';
    p += '查核结果分类：confirmed / corrected / unverifiable / approximation / overreach\n\n';

    p += '## 任务 B：独立判断\n\n';
    p += '1. 有没有哪个断言，证据撑不住它的力道？（事实对，但推论过度）\n';
    p += '2. 有没有没来源的数字，被写成有来源的样子？\n';
    p += '3. 如果这份东西在批评或指控什么，那些指控站得住吗？有没有哪一条不公平？\n';
    p += '4. 有没有「看起来很具体、但其实查不到出处」的细节？\n\n';

    if (EXTRA[scene]) p += EXTRA[scene] + '\n\n';

    p += '## 规则\n\n';
    p += '- 你的每个「这里错了」，都要附上你查到的来源。\n';
    p += '- 你自己的推算要明确标示「此为我的推算，非查证」。\n';
    p += '- 查不到不等于是错的，标 unverifiable，不要说它是假的。\n';
    if (strict) p += '- **找到问题比让我过关重要。请严格。**\n';

    document.getElementById('ccPre').textContent = p;
  }

  tool.querySelectorAll('.cc-tab').forEach(function (b) {
    b.addEventListener('click', function () {
      tool.querySelectorAll('.cc-tab').forEach(function (x) { x.classList.remove('is-on'); });
      b.classList.add('is-on');
      build();
    });
  });
  ['ccTopic', 'ccLinks', 'ccStrict'].forEach(function (id) {
    document.getElementById(id).addEventListener('input', build);
  });

  document.getElementById('ccCopy').addEventListener('click', function () {
    var btn = this;
    var txt = document.getElementById('ccPre').textContent;
    var done = function () {
      btn.textContent = '已复制 ✓';
      btn.classList.add('is-done');
      setTimeout(function () { btn.textContent = '复制'; btn.classList.remove('is-done'); }, 1800);
    };
    if (navigator.clipboard && navigator.clipboard.writeText) {
      navigator.clipboard.writeText(txt).then(done, function () { fallback(txt, done); });
    } else { fallback(txt, done); }
  });

  function fallback(txt, cb) {
    var ta = document.createElement('textarea');
    ta.value = txt;
    ta.style.cssText = 'position:fixed;opacity:0;';
    document.body.appendChild(ta);
    ta.select();
    try { document.execCommand('copy'); cb(); } catch (e) {}
    document.body.removeChild(ta);
  }

  build();
})();
</script>
