Ctrl K
ComunidadGuías…

docs/zh/strategic-risk.mdx

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
---
title: "战略风险"
description: "将所有情报模块合成为统一战略评估的综合风险评分,包含独具特色的 Pentagon Pizza Index 与完整的服务端风险计算流程 —— 战略风险层融合冲突、经济、能源、网络与舆情信号,为分析师提供跨领域、可追溯的单一分数,用于监控地缘紧张升级与全球系统性风险拐点。"
---
Strategic Risk 系统提供一个用于全球风险分诊的综合仪表盘。其服务端发布的头条评分是前 5 名国家不稳定指数(CII)的汇总,面板在该头条周围叠加额外的聚合、基础设施、战区姿态、突发新闻、制裁和辐射监测上下文。

## Strategic Risk 概览

Strategic Risk 概览显示服务端 Strategic Risk 头条以及来自浏览器面板的附近运营上下文。

### 服务端评分与浏览器回退(0-100)

显示的/服务端头条评分来自 `GetRiskScores.strategicRisks[0]`。
服务端按 `combinedScore` 加权前 5 名 CII 国家推导它,
而非由累加式面板上下文公式得出:

```
topScores = top 5 countries by combinedScore
weights = [1.00, 0.85, 0.70, 0.55, 0.40]
weightedAvg = sum(topScores[i] * weights[i]) / sum(weights)
headline = round(weightedAvg * 0.70 + 15)
```

具体的 top-5 窗口、缩放因子、下限和严重性等级,请参见
[CII Risk Scoring Methodology](/zh/methodology/cii-risk-scores#3-战略风险汇总)。

当缓存的服务端分数不可用时,浏览器可渲染一个本地
回退概览,综合地图侧的聚合、基础设施、战区
姿态、突发新闻、制裁、辐射监测信号,以及本地可用的
CII 摘要:

```
compositeScore =
    convergenceScore * 0.30
  + ciiRiskScore     * 0.50
  + infraScore       * 0.20
  + theaterBoost
  + breakingBoost
  + sanctionsScore
  + radiationScore
```

这些累加项是本地回退上下文,而非服务端 Strategic Risk
合约。`sanctionsScore` 上限为 10,来自新增制裁条目、
最大国家进入量和受制裁船舶/航空器计数;
`radiationScore` 上限为 12,来自辐射监测峰值、升高读数
与佐证观测,并会被低置信度或相互矛盾的观测下调。

### 风险等级

浏览器面板与服务端 API 有意为同一 0-100 头条评分暴露两套
相关但不同的等级方案。

**面板可见的显示标签**使用与国家风险行相同的五个 CII 对齐等级:

| 头条评分 | 面板标签 | 含义 |
|----------------|-------------|---------|
| >=81 | **严重** | 活跃危机或重大升级 |
| 66-80 | **高** | 需密切监测的显著不稳定性 |
| 51-65 | **升高** | 高于常态的活动模式 |
| 31-50 | **正常** | 基线地缘政治活动 |
| <31 | **低** | 异常平静期 |

**服务端/在线枚举标签**保持 `GetRiskScores` 返回的三级
`StrategicRisk.level` 合约:

| 头条评分 | `StrategicRisk.level` | 含义 |
|----------------|-----------------------|---------|
| 70-100 | `SEVERITY_LEVEL_HIGH` | 多重聚合危机 |
| 40-69 | `SEVERITY_LEVEL_MEDIUM` | 全球紧张加剧 |
| 0-39 | `SEVERITY_LEVEL_LOW` | 较低的全球战略压力 |

API 客户端应将 `StrategicRisk.level` 视为服务端严重性枚举,
将 Strategic Risk 面板标签视为 `StrategicRisk.score` 的显示映射。

### 统一告警系统

来自所有模块的告警通过**时空去重**合并:

- **时间窗口**:2 小时内的告警可合并
- **距离阈值**:200 公里内的告警可合并
- **同一国家**:影响同一国家的告警可合并

当告警合并时,它们成为**复合告警**,展示完整全貌:

```
Type: Composite Alert
Title: Convergence + CII + Infrastructure: Ukraine
Components:
  - Geographic Convergence: 4 event types in Kyiv region
  - CII Spike: Ukraine +15 points (Critical)
  - Infrastructure: Black Sea cables at risk
Priority: Critical
```

### 告警优先级

告警优先级与服务端 Strategic Risk High/Medium/Low
等级分离。下文对 Critical 和 High CII 的引用使用
[国家不稳定指数](/zh/country-instability-index#不稳定性等级) 中记录的国家不稳定指数国家评分等级。

| 优先级 | 判定条件 |
|----------|----------|
| **严重** | CII 国家严重等级(81-100)、聚合有 4+ 类型或评分 ≥90、级联严重影响、高影响辐射/制裁信号 |
| **高** | CII 国家高等级(66-80)或 CII 变动 ≥30 分、聚合有 3+ 类型或评分 ≥70、级联影响 ≥5 个国家 |
| **中** | CII 国家升高等级或 CII 变动 ≥15 分、聚合评分 ≥50、级联中等影响或 ≥3 个国家 |
| **低** | 轻微变动与低影响事件 |

### 趋势检测

国家级 CII 行通过 `dynamicScore` 追踪约 24 小时变动:

- `dynamicScore` 是范围 -100 到 100 的有符号 delta,基准为最近有效的 CII 前序快照。
- 正值表示评分上升,负值表示下降,`0` 表示稳定或无有效前序快照。
- 趋势标签使用服务器死区:大于 `+1` 为上升,小于 `-1` 为下降,`-1` 到 `+1` 之间为稳定。

服务端发布的全球 `StrategicRisk` 头条不同:它目前
在发布前 5 名 CII 汇总评分时将 `trend` 设为稳定。如果缓存
服务端分数不可用,浏览器回退会从本地累加上下文计算自己的
升级/稳定/降级面板趋势;该
回退趋势是 UI 连续性信号,而非权威服务端
Strategic Risk 趋势合约。

## Pentagon Pizza Index(PizzINT)

仪表盘集成了来自政府与军事设施附近战略地点的实时人流数据。这一"Pizza Index"概念通过追踪五角大楼、兰利及其他设施附近餐厅的深夜活动峰值,提供一种非传统的危机活动指标。

### 工作原理

系统对受监测地点聚合"相对于平常的百分比"指标:

1. **地点**:五角大楼、CIA、NSA、国务院及其他设施附近的快餐店、披萨店与便利店
2. **聚合**:活动百分比取平均,上限为 100%
3. **峰值检测**:超过基线的地点会被标记

### DEFCON 式告警

聚合活动映射到 5 级战备量表:

| 等级 | 阈值 | 标签 | 含义 |
|-------|-----------|-------|---------|
| **DEFCON 1** | ≥85% | 最高活动 | 最高战备;危机响应已激活 |
| **DEFCON 2** | 70% – 84% | 高活动 | 高活动度;重大事件进行中 |
| **DEFCON 3** | 50% – 69% | 升高活动 | 升高;高于常态运作 |
| **DEFCON 4** | 25% – 49% | 高于正常 | 提高警戒 |
| **DEFCON 5** | <25% | 正常活动 | 正常和平时期运作 |

### World Monitor 紧张对

该指标还显示 World Monitor 根据 GDELT 事件导出数据独立计算的紧张度评分:

| 对 | 监测关系 |
|------|----------------------|
| 美国 ↔ 俄罗斯 | 主要核对手 |
| 俄罗斯 ↔ 乌克兰 | 活跃冲突区 |
| 美国 ↔ 中国 | 经济与军事竞争 |
| 中国 ↔ 台湾 | 跨海峡军事与政治压力 |
| 美国 ↔ 伊朗 | 中东地区紧张 |
| 以色列 ↔ 伊朗 | 直接打击与代理人冲突 |
| 伊朗 ↔ 海合会 | 伊朗与海湾国家:沙特阿拉伯、阿联酋、卡塔尔、科威特、巴林、阿曼 |
| 沙特阿拉伯 ↔ 也门 | 跨境袭击,计入所有也门行为体 |

每对显示:

- **当前紧张度评分**(World Monitor 的归一化评分)
- **趋势**(上升、下降、稳定),相对该对自身通常的周波动
- **百分比变化**:最近七天相对之前七天
- **佐证**(如有):最多三条高于通常水平的非新闻读数,例如机场关闭或该地区的军用飞机

这为活动等级提供了背景。评分与数据可用性规则见下文的国家对紧张度一节,读数见下文的"评分旁的佐证"一节。

### 支撑端点

| 面 | 端点 | 备注 |
|---|---|---|
| Pentagon Pizza Index + GDELT 对 | `GET /api/intelligence/v1/get-pizzint-status` | 读取披萨活动;`include_gdelt=true` 时附带 World Monitor 独立计算的紧张对,每对带有其显著的 `evidence`。 |
| GPS/GNSS 干扰 | `GET /api/intelligence/v1/list-gps-interference` | 读取归一化的 GPSJam Redis 键,可选 `region` 过滤。 |
| 用于 CII 上下文的 OREF 警报 | `GET /api/intelligence/v1/list-oref-alerts` | 实时或历史 OREF 数据的直接 RPC;面板中继路径见 [以色列警报](/zh/panels/oref-sirens)。 |
| 安全警示 | `GET /api/intelligence/v1/list-security-advisories` | Redis 支撑的警示源,供 CII 加成与下限使用。 |
| 国家能源画像 | `GET /api/intelligence/v1/get-country-energy-profile` | 国家级能源上下文,供国家深入分析与战略风险分析。 |
| 能源冲击场景 | `GET /api/intelligence/v1/compute-energy-shock` | 按需的国家 + 咽喉要道产品供应冲击。 |

### World Monitor 国家对紧张度

紧张度使用 GDELT 事件导出数据,而非 PizzINT 的 GPR 量表。物化器对
`shared/gdelt-tension-pairs.json` 中的国家对双向计数:美国–俄罗斯、俄罗斯–乌克兰、
美国–中国、中国–台湾、美国–伊朗、以色列–伊朗、伊朗–海合会、沙特阿拉伯–也门。一方
可以是一个组:伊朗–海合会把伊朗与每个海湾合作委员会成员国(沙特阿拉伯、阿联酋、
卡塔尔、科威特、巴林、阿曼)之间的事件合并为一个桶;成员国之间的事件不计入。GDELT
将胡塞武装行为体编码为普通的也门(`YEM`),因此沙特阿拉伯–也门计入所有也门行为体,
无论是胡塞武装还是政府。美国–委内瑞拉未达到最初每天 20 起冲突事件的测量门槛,
因此被排除。不使用任何 GDELT 查询 API。

新加入列表的国家对在其 90 天历史重建完成(见下文)之前显示**数据不足**,即
worker 首次带着它运行后 11 到 22 小时。进行中的那一天不会为新国家对建桶,因为它会
缺少更早的批次;该日完成后会被重建。中国–台湾、以色列–伊朗和沙特阿拉伯–也门与
十五天的小时窗口同时加入,因此该次部署后的最初几次运行会按从新到旧的顺序重建每个
已存储的日期。在最近十四个完整日补齐小时数据之前(两到四小时),原有国家对从完整日读取。

对每个 UTC 日,冲突强度为 QuadClass 3 或 4 事件的
`NumMentions × max(0, −GoldsteinScale)` 之和。每日桶还保留事件总数、冲突事件数以及
语调总和与计数(平均语调为两者之商)。事件归入其导出批次所在的 UTC 日。最近十五天
的每一天还按小时保存冲突计数与强度,因此评分可以跟随实时数据流,而不必等到午夜。

评分是实时七天均值在该对 90 个完整日强度中的百分位。实时均值为最近 168 个完整小时
除以七;一个小时在其全部四个 15 分钟导出批次到齐后才算完整,因此进行中的小时不计入。
如果最近 336 个小时中有任何一个缺失或不完整,该对回退到完整日:最近七天用于评分,
最近十四天用于变化。百分位为 `100 × (低于均值的天数 + 0.5 × 等于均值的天数) / 90`。
非平坦历史的最大值得 100;平坦历史得 50。它衡量的是相对事件强度,而非冲突发生的概率。
被评分的七天(实时或完整日)必须至少包含 140 起冲突事件(20 × 7)。全部 90 天都必须
具备全部 96 个导出批次。缺失或不完整的日期不算作平静日。在初始历史收集期间,或这些
条件不满足时,存储的 `insufficientPairs` 会列出该对;API 省略其数值评分,面板显示
**数据不足**。

变化为 `100 × (最近七天 − 之前七天) / 之前七天`,基于强度之和。实时情况下,两周为
最近 336 个完整小时在第 168 小时处切分,因此激增在一小时内即可显示;在完整日回退中,
两周为最近十四个完整日。每周恰好包含每个星期几各一次,因此新闻量的周末下降(周六和
周日约为 0.7 倍)会相互抵消,而不会被读作下降。

每对的趋势阈值是它自身通常的周波动:在其 90 个完整日中,每个十四天区间的七天相对
前七天变化绝对值的第 75 百分位(线性插值),且不低于 10%。变化高于阈值为上升,低于
其负值为下降,恰在边界上为稳定,因此波动大的国家对需要更大的变动。前一周为零而最近
强度为正时,百分比变化没有有限值,因此该对同样被隐藏。两周都为零时变化为零。

独立的 `gdelt:bulk:dyad-tension:v1` 快照保留 90 个完整日加上当天的桶,TTL 为 92 天,
并有自己的回放游标。健康检查以 45 分钟预算检查 15 分钟 worker 的
`seed-meta:gdelt:bulk:dyad-tension`。即使历史仍在存储中,API 也会隐藏超过 45 分钟的
快照。包含紧张度的响应绕过 HTTP 缓存,浏览器也不会为缓存回退保留紧张度响应。摄取
正常并不代表 90 天评分历史已就绪。在首次成功发布数据与元数据并设置其持久激活标记之前,
该探针保持待定状态;此后永久执行新鲜度检查。披萨数据中断不会隐藏可用的紧张度。

每次 worker 运行还会修复历史。它按从新到旧的顺序遍历窗口内缺失、缺少 96 个批次中任何
一个、缺少当天开始后才加入的国家对的桶,或(在最近十五天内)缺少完整小时数据的过去
日期,并从该日的 GDELT 导出文件中最多重建两个。重建的日期替换已存储的日期,而不是
叠加,因此收集的首个不完整日只计一次。只修复回放游标所在日之前的日期,因此实时合并
永远不会叠加到重建日上。只有当 GDELT 主文件列表列出某日全部 96 个导出文件时,worker
才会下载该日,并按列出的大小与 MD5 校验每个文件。存在上游缺口的日期会被跳过、不下载,
也不计入两个名额。下载或校验失败的日期会记录在快照的 `repairFailures` 中并跳过六小时,
以免它占用名额而让更早的日期等待。之后成功重建会清除其记录。修复每次运行有 60 秒预算。
预算耗尽时,worker 中止进行中的下载且不再开始新的下载。失败或超时会保留已完成的日期,
且绝不会延迟或导致实时发布失败。一次运行通常重建两天,下载较慢时有时只重建一天,
因此空窗口需要 45 到 90 次运行(11 到 22 小时)才能填满。

### 评分旁的佐证

GDELT 评分衡量的是新闻报道量。在某对的评分下方,弹窗还会显示来自非新闻数据源、且高于
其通常水平的读数。这些读数永远不会改变评分。

| 读数 | 国家对(读取的国家) | 来源键 | 当前计数 | 通常水平 |
|---|---|---|---|---|
| 报告的打击 | 以色列–伊朗(以色列、伊朗);伊朗–海合会(六个海合会成员国);沙特阿拉伯–也门(沙特阿拉伯、也门) | `conflict:iran-events:v1`、`conflict:strike-pressure:v1` | 最近 72 小时内的打击报告,按落点所在国家统计 | 打击统计中从首个存储日到 72 小时之前一天的日均计数的三倍;需要 7 天 |
| 机场 | 美国–伊朗(伊朗);以色列–伊朗;伊朗–海合会(海合会成员国与伊朗);沙特阿拉伯–也门;中国–台湾(台湾);俄罗斯–乌克兰(俄罗斯) | `aviation:notam:closures:v2`、`aviation:delays:intl:v3` | 受监测机场关闭(NOTAM 关闭,或至少 80% 的到期航班取消)、大多数航班取消(至少 50%),或被 NOTAM 限制 | 佐证历史中的日峰值均值;需要 7 天 |
| 军用飞机 | 见下文 | `military:surges:history:v1` | 最新快照中某一运营国在该对战区内的飞机 | 来自同一 ADS-B 数据源的更早快照的均值,约六小时;需要 12 个快照 |
| 台湾附近的中国军机、中国海军舰艇 | 中国–台湾 | `military:cross-strait-activity-bootstrap:v1` | 台湾国防部每日报告,不超过两天 | 其 90 天中位数,待该窗口有足够的报告日 |
| 美国新制裁 | 美国–伊朗(伊朗);美国–俄罗斯(俄罗斯);美国–中国(中国) | `sanctions:changes:v1` | 最近 7 天内 SDN、Consolidated 和商务部 CSL 名单中涉及该国的新增条目 | 每个名单在其变更被记录的更早各周内的周速率,再按名单求和;需要 21 天 |

军用飞机读数针对一个地区内的一个运营国,因此在战区重叠处一架飞机只计一次:美国–伊朗
计入伊朗战区内的美国飞机,以色列–伊朗计入其中的以色列飞机;美国–中国计入台湾战区内的
美国飞机,中国–台湾计入其中的中国飞机;美国–俄罗斯计入波罗的海与黑海战区内的美国飞机;
俄罗斯–乌克兰计入黑海战区内的俄罗斯飞机;沙特阿拉伯–也门计入也门与红海战区内的沙特飞机。

读数达到其下限且至少为通常水平的 1.5 倍时显示。下限分别为 3 次打击、1 个受扰机场、6 架
军用飞机、20 架中国军机、10 艘中国舰艇和 3 条制裁新增。受扰机场在尚无通常水平时即可
显示;其他读数都需等到有通常水平。弹窗每对最多显示三条读数,并在括号中附上通常水平。

局限:

- 打击报告记录的是打击落点,而非发射方,并包括拦截与声称。沙特阿拉伯同时属于伊朗–海合会
  与沙特阿拉伯–也门,因此对利雅得的打击两者都计入。该数据源仅覆盖中东。
- 打击数据源只保留最新的 400 条事件。当它们全部落在 72 小时之内时,窗口内更早的打击
  已经缺失,因此在数据源重新覆盖到窗口之外之前,打击读数不予显示。
- 制裁名单可能被暂时跳过(不可用,或可疑快照被暂扣)。那段时间的变更永远不会被记录,
  因此这段时间不计入该名单的通常速率。保留型缺口会保存上一份快照,名单恢复时会补记
  其变更,因此这段时间仍然计入。
- 飞机计数只能看到广播 ADS-B 的飞机。在 2026-10-25 检查的六小时快照中没有出现中国、
  俄罗斯或沙特军用飞机,因此这些读数通常为零。
- 乌克兰没有受监测的机场。机场名称为英文城市名。
- 打击统计保留 30 天,始于 2026-10-19;制裁日志始于 2026-10-18。在各自达到最低历史
  之前,打击与制裁没有通常水平,不会显示。

派生信号包每 15 分钟运行一次 `scripts/seed-tension-evidence.mjs`。它以
`{ updatedAt, live, days }` 写入 `intelligence:tension-evidence:v1`:`live` 保存每对的
当前读数,`days` 为每对、每种读数、每个 UTC 日保留一个值,共 90 天(机场与军用飞机取
日峰值,其余取最新值)。打击统计中仍保存的每一天都会被复制,因此错过的运行会被修复。
该键 TTL 为 100 天。每个数据源都必须在其自身的健康预算之内
(打击 45 分钟、机场延误 90、NOTAM 关闭 240、军用飞机 30、台湾海峡 720、制裁 720);
过期或格式错误的数据源只会丢弃它自己的读数,完全没有读数的运行会保留上一份数据。首次
发布设置 `seed-activated:intelligence:tension-evidence` 后,健康检查以 45 分钟预算检查
`seed-meta:intelligence:tension-evidence`。API 只附加显著读数,忽略超过 45 分钟的佐证,
佐证缺失时原样提供评分。

## 相关资产

新闻聚类会自动用附近的关键基础设施进行增强。当一条报道提及某个地理区域时,系统会识别 600 公里范围内的相关资产,提供即时运营背景。

### 资产类型

| 类型 | 来源 | 示例 |
|------|--------|----------|
| **管道** | 88 条全球路线 | Nord Stream、Keystone、Trans-Siberian |
| **海底电缆** | 86 条主要电缆 | TAT-14、SEA-ME-WE、Pacific Crossing |
| **AI 数据中心** | Epoch AI 注册表 | Azure East US、GCP Council Bluffs |
| **军事基地** | 226 处设施 | Ramstein、Diego Garcia、Guam |
| **核设施** | 100+ 处地点 | 核电站、武器实验室、浓缩设施 |

### 地点推断

系统通过以下方式推断新闻报道的地理焦点:

1. **关键词匹配**:根据热点关键词列表扫描标题(例如 "Taiwan" 映射到台湾海峡热点)
2. **置信度评分**:多个关键词匹配会提高地点置信度
3. **回退到冲突**:若无热点匹配,则检查活跃冲突区

### 距离计算

资产按与推断地点的 Haversine 距离排序:

```
d = 2r × arcsin(√(sin²(Δφ/2) + cos(φ₁) × cos(φ₂) × sin²(Δλ/2)))
```

每类资产最多显示 3 个,按距离排序。

### 示例背景

一条关于"德国管道爆炸"的新闻聚类会显示:

- **管道**:Nord Stream(23 公里)、Yamal-Europe(156 公里)
- **电缆**:TAT-14 登陆点(89 公里)
- **基地**:Ramstein(234 公里)

点击某项资产可将地图缩放至其位置并显示详细信息。

## 服务端风险评分 API

Strategic Risk 与国家不稳定指数(CII)评分在服务端预计算,而非在浏览器中计算。这消除了"冷启动"问题 — 新用户无需等待系统累积足够信息以生成评分即可看到数据。

### 工作原理

`GetRiskScores` RPC 处理器(`get-risk-scores.ts`):

1. 从 ACLED 拉取近期的抗议/骚乱/战斗/爆炸/针对平民的暴力数据。当 ACLED 不返回事件时(WorldMonitor 没有 ACLED 访问权限),冲突与动荡改为读取 `gdelt:bulk:country-events:v1` 中的 GDELT 项(升级或持续水平)。
2. 从 Redis 拉取辅助数据源,包括 UCDP 冲突、中断、气候、火灾、GPS 干扰、伊朗事件、OREF 警报、警示、流离失所、机密新闻摘要、航空警报、地震、制裁以及军事/AIS CII 聚合数据。
3. 使用 [CII Risk Scoring Methodology](/zh/methodology/cii-risk-scores) 中记录的共享系数表为 31 个 Tier-1 国家计算 CII v14 评分。
4. 从按权重排名前 5 的 CII 评分推导 Strategic Risk。
5. 将结果缓存到 Redis,使用与当前 CII 公式版本绑定的带版本号的 live 与 stale 键。

### CII 评分计算

每个国家的评分将静态基线(40%)与动态事件评分(60%)相结合,外加补充加成与下限。

**基线风险**(0-50 分):反映结构性脆弱性的静态地缘政治风险。按国家的权威数值位于 [CII Risk Scoring Methodology](/zh/methodology/cii-risk-scores#2-各国-baselinerisk-和-eventmultiplier)。

**事件评分**融合四个子组成:

| 子组成 | 权重 | 评分依据 |
|---------------|--------|---------|
| Unrest | 25% | ACLED 抗议/骚乱、抗议致死人数、高严重度动乱与中断严重度;ACLED 不返回事件时加入 GDELT 抗议升级或持续水平项 |
| Conflict | 30% | 按权重加权的 ACLED 战斗/爆炸/针对平民的暴力、致死人数与 OREF 警报压力;ACLED 不返回事件时加入 GDELT 冲突升级或持续水平项。打击通过综合分上的打击压力计入(v12),不在此处 |
| Security | 20% | 位于该国的外国军用航班与舰船、航空关闭/延误与 GPS/GNSS 干扰 |
| Information | 25% | 机密新闻头条与按国家归因的威胁摘要 |

**下限**(最低评分保证):

| 下限类型 | 阈值 | 触发条件 |
|------------|-----------|---------|
| UCDP 活跃战争 | >= 70 | 2 年窗口内 Tier-1 UCDP 死亡总数 > 1000 或事件数 > 100 |
| UCDP 轻度冲突 | >= 50 | 2 年窗口内 Tier-1 UCDP 事件数 > 10 但未达战争阈值 |
| 警示切勿旅行 | >= 60 | 可用时使用实时警示源;否则使用内嵌的国务院兜底表 |
| 警示重新考虑 | >= 50 | 可用时使用实时警示源;否则使用内嵌的国务院兜底表 |
| 打击压力(v12) | 40-70 | 衰减后的打击压力 `P >= 5`:`min(70, 40 + 8 * log2(P / 5))` |

**补充加成**:警示加成(+15/+10/+5)、IL 的 OREF 混合加成(+15 活跃 + 历史分层)、气候(上限 +15)、火灾(上限 +8)、流离失所(上限 +20)、新闻紧迫度(上限 +5)、地震(上限 +25)、制裁(上限 +14)、AIS 中断(上限 +10)与打击压力(上限 +10)。

警示输出在每个 `CiiScore` 上同时暴露 `advisoryLevel` 和
`advisoryProvenance`。当评分使用了已播种的警示源时,
`advisoryProvenance` 为 `live`;使用内嵌的国务院兜底
表时为 `fallback`;当无警示等级影响加成或下限时为
`absent`。

### 事件显著性乘数

某些国家的事件比其他国家承载更多全球意义:

| 乘数 | 国家 | 依据 |
|------------|-----------|-----------|
| 3.0x | 朝鲜 | 任何可见的动乱都极不寻常 |
| 2.0-2.5x | 中国、俄罗斯、伊朗、沙特阿拉伯、古巴 | 威权国家压制抗议 |
| 1.5-1.8x | 台湾、巴基斯坦、缅甸、委内瑞拉、阿联酋 | 区域闪点 |
| 1.0-1.2x | 墨西哥、土耳其 | 中等显著性 |
| 0.5-0.8x | 英国、法国、德国、波兰、乌克兰、叙利亚、也门、以色列、印度、巴西 | 抗议属常态,或事件已被下限覆盖 |
| 0.3x | 美国 | 极高可观测性与高体量国内报道需要更强衰减 |

### Strategic Risk 推导

综合战略风险评分按排名前 5 的 CII 评分加权平均计算:

```
Weights: [1.0, 0.85, 0.70, 0.55, 0.40] (total: 3.5)
Strategic Risk = (Σ CII[i] × weight[i]) / 3.5 × 0.7 + 15
```

排名靠前的国家贡献最大,较低排名国家的影响递减。

### 数据源

| 来源 | Redis 键 | 用途 |
|--------|-----------|----------|
| ACLED | 通过 API 实时拉取 | 抗议、骚乱、战斗、爆炸、针对平民的暴力、致死人数 |
| GDELT 国家事件 | `gdelt:bulk:country-events:v1` | 相对各国 28 天中位数的冲突与动荡升级,以及过去七天的持续占比,仅在 ACLED 不返回事件时使用 |
| UCDP | `conflict:ucdp-events:v1` | 战争/轻度冲突下限 |
| 中断 | `infra:outages:v1` | Unrest 中断加成 |
| 气候 | `climate:anomalies:v2` | 气候严重度加成 |
| 火灾 | `wildfire:fires-summary:v1`(由 `wildfire:fires:v1` 派生的按国家行) | 按严重度加权的野火加成 |
| GPS 干扰 | `intelligence:gpsjam:v2` | Security 评分 |
| 军事 CII | 中继/已播种的军事聚合 | Security 评分(自 v14 起仅计外国航班与舰船)与 AIS 中断加成 |
| 航空警报 | 已播种的航空中断数据 | Security 评分 |
| 中东打击 | `conflict:iran-events:v1`(72 小时)与 `conflict:strike-pressure:v1`(30 天计数) | 打击压力:按严重度加权的每日打击,经衰减后形成下限与加成 |
| GDELT 打击 | `gdelt:bulk:country-events:v1`(打击计数) | ACLED 不返回事件时的全球打击压力 |
| OREF 警报 | `relay:oref:history:v1` | IL 冲突加成与混合加成 |
| 新闻威胁 | 机密头条摘要 | Information 评分与新闻紧迫度加成 |
| 流离失所 | 人道主义流离失所聚合 | 流离失所加成 |
| 地震 | 地震数据流 | 地震加成 |
| 制裁 | 制裁国家聚合 | 制裁加成 |
| 安全警示 | `intelligence:advisories:v1` 加内嵌兜底表 | 带 `advisoryProvenance` 的警示加成/下限 |

### 兜底行为

当上游数据不可用时(API 错误、速率限制):

1. **过期缓存**:在可用时返回最新的带版本号的过期风险评分载荷。
2. **基线兜底**:当无可用实时或过期载荷时,使用静态基线与可用下限返回评分。

RPC 在 `GetRiskScoresResponse` 上暴露兜底状态:过期缓存响应会设置 `degraded=true` 与 `stale=true`;仅冷启动基线响应会设置 `degraded=true` 与 `stale=false`。新鲜/缓存命中响应将两个标志都设为 `false`。

中继的 CII warm-ping 循环在 `scripts/ais-relay.cjs` 中处于活跃状态:它每 8 分钟调用一次 `/api/intelligence/v1/get-risk-scores`,由 RPC 处理器刷新实时/过期缓存状态,并在返回评分时写入 `seed-meta:intelligence:risk-scores` 以供健康监测。该 seed-meta 的 `recordCount` 反映的是实时信号密度覆盖率,而非原始 feed 可用性:它统计 CII 刷新中出现的、与评分相关的 Tier-1 冲突(ACLED、UCDP,或 ACLED 不返回事件时的实时 GDELT 基线)与新闻信号族。因此,安静但新鲜的实时 feed 可能产生 `COVERAGE_PARTIAL`;按来源的新鲜度仍以 feed 心跳视图为准。