适用人群
- 供应链和大宗商品团队 针对命名事件对路由假设进行压力测试。
- 风险和政策团队 将地缘政治或环境场景转化为具体的国家暴露。
- 领导层 围绕”如果 X 发生,什么先崩?“构建谈论轨道。
打开引擎
Scenario Engine 位于主仪表盘的 Supply Chain 面板内。每个预构建场景模板渲染为一个触发按钮;点击场景启动异步作业,在结果到达后激活视觉覆盖。 你也可以通过编程方式驱动它 — 请参见 Scenarios API 了解/templates、/run 和 /status 端点。
场景模板
模板在server/worldmonitor/supply-chain/v1/scenario-templates.ts 中定义。每个模板有一个 type,取自一个小的精选集合,使场景可按类别浏览而非自由列表。
当前发布的类型:
| 类型 | 建模内容 |
|---|---|
conflict | 由活跃冲突事件驱动的咽喉要道关闭或降级(台湾海峡全面关闭、苏伊士+曼德海峡同时、霍尔木兹油轮封锁)。 |
weather | 气候中断 — 例如巴拿马运河 50% 干旱场景。 |
sanctions | 针对性贸易限制(例如俄罗斯/波罗的海谷物暂停)。 |
tariff_shock | 突然关税行动及其成本传导(例如美国对电子产品加征关税升级)。 |
affectedHs2: [] 表示所有 HS2 章节(注册表将该哨兵值存储为 null)。按原样运行模板 — v1 中没有滑块。ScenarioType 联合类型为 infrastructure 和 pandemic 类别留有空间,但目前没有这些类型的模板。
返回内容
完成的场景返回:- 受影响咽喉要道 — 哪些在地图上变红。
- 影响排名 — 按 ISO-2 排序的受影响最大的已种子化报告国,按 worker 的相对加权影响分数排序。
totalImpact不是货币金额。 - 模板回显 — worker 推导的模板键(
affectedChokepointIds.join('+'),或无物理咽喉要道时的tariff_shock)、持续时间、中断百分比和成本冲击乘数,使客户端无需重新查询目录即可渲染运行。状态结果不重复affectedHs2;从/list-scenario-templates读取板块范围。 - 摘要卡片 注入 Supply Chain 面板,在停用场景前一直可见。
scenarioState,使咽喉要道颜色和国家分级统计图反映中断,直到你停用。这由 src/components/MapContainer.ts:1010 的 MapContainer.activateScenario 协调,该函数显式 PRO 门控。
层级与门控
Scenario Engine 是 PRO。免费用户看到触发按钮但在激活时被阻止:记录scenario-engine 门控命中事件,地图不重绘。ScenarioService.RunScenario 处理器也在边缘强制执行 PRO(server/worldmonitor/scenario/v1/run-scenario.ts)。
API 侧的速率限制 — 10 个作业/分钟/IP,一旦待处理队列已超过 100 个作业即施加队列背压 — 记录在 Scenarios API 中。
自行运行
工作流本质上是异步的 — 边缘函数入队作业,Railway worker 计算影响,结果被轮询回来:- 打开 Supply Chain 面板。
- 点击场景触发按钮(模板名称)。
- 作业运行时按钮禁用(通常 5-30 秒)。
- 结果到达后,地图重绘,场景横幅前置于面板。横幅始终显示:⚠ 图标、场景名称、受影响最大的 5 个国家及每国影响百分比,以及 × 关闭控件。当场景的结果载荷包含模板参数(持续时间、中断百分比、成本冲击乘数)时,横幅额外渲染一个标签行(例如
14d · +110% cost)和一行标语,如 “Simulating 14d / 100% closure / +110% cost on 1 chokepoint. Chokepoint card below shows projected score; map highlights disrupted routes.” 受影响的咽喉要道本身在地图和咽喉要道卡片上高亮,而非在横幅中按名称列出。 - 点击横幅上的 × 关闭控件(aria-label:“Dismiss scenario”)清除场景状态 — 地图重绘回基线,面板重新渲染时不显示投影分数和红色边框标注。
POST /api/scenario/v1/run-scenario — 入队,然后轮询 GET /api/scenario/v1/get-scenario-status 直到响应有终止状态(成功为 "done",错误为 "failed")。非终止状态为 "pending"(排队)和 "processing"(worker 已启动);两者都可能持续数秒。请参见状态生命周期表了解完整合约。
Scenario Engine 背后的数据
- 场景模板 —
server/worldmonitor/supply-chain/v1/scenario-templates.ts。添加需要 proto 侧变更;目前不可由用户配置。 - 作业队列 — Redis 列表
scenario-queue:pending;worker 结果落在scenario-result:{jobId}。 - 咽喉要道注册表 — 支持实时咽喉要道状态和 Route Explorer 的同一注册表,确保场景结果与产品其余部分视觉一致。
- 贸易/影响数据 — 从
supply-chain:exposure:{ISO2}:{HS2}:v1读取的 HS2 暴露缓存条目。如果省略iso2,v1 仅计算已种子化的报告国集合:US、CN、RU、IR、IN和TW。提供iso2会将作业限定到该单个国家键。
影响数学
对于物理咽喉要道场景,每个匹配的暴露条目贡献:vulnerabilityIndex 作为暴露代理:
adjustedImpact 求和,降序排序,并返回
前 20 名。impactPct 是针对分母下限 1 的 0-100 份额,因此当每个返回的 totalImpact 都低于 1 时,返回的顶级国家可能低于 100:
相关工作流
- Route Explorer — 针对今天的状态运行特定航线。
- Scenarios API — 底层 HTTP 合约。
- Supply Chain — 支持 Supply Chain 面板的更广泛服务。
