AI 摘要
AI 摘要链
世界简报由一个 4 层提供商链生成,该链优先使用本地算力,在云端 API 之间逐级回退,并以浏览器端推理作为最后手段:_summarize-handler.js),行为完全一致:
- 标题去重 —— 在发送给任何 LLM 之前,标题会使用词重叠相似度进行两两比较。近乎重复的标题(重叠度 > 60%)会被合并,从而将提示词缩减 20–40%,避免 LLM 在重复报道上浪费 token
- 变体感知提示 —— 系统提示会根据当前激活的仪表盘变体自适应调整。地缘政治摘要强调冲突升级与外交动向;科技摘要聚焦融资轮次与 AI 突破;金融摘要突出市场走势与央行信号
- 语言感知输出 —— 当 UI 语言为非英语时,提示会指示 LLM 以该语言生成摘要
- Redis 去重 —— 摘要使用复合键(
summary:v3:{mode}:{variant}:{lang}:{hash})缓存,因此 1,000 名并发用户查看相同标题时只会触发一次 LLM 调用。缓存 TTL 为 24 小时 - 优雅回退 —— 若某提供商返回
{fallback: true}(缺少 API 密钥或端点不可达),该链会静默前进至下一层级。进度回调会更新 UI,显示当前正在尝试哪个提供商
/v1/chat/completions 端点通信,因此兼容任何实现了此标准的本地推理服务器(Ollama、LM Studio、llama.cpp server、vLLM 等)。
国家简报页
在地图上点击任意国家会打开一个整页情报档案 —— 在单屏内综合呈现该国所有情报模块。简报采用双栏布局: 左栏:- 动荡指数 —— 动画 SVG 评分环(0–100),含四个组成分项条(动荡、冲突、安全、信息)、严重度徽章和趋势指示器
- 情报简报 —— AI 生成的分析(Ollama 本地 / Groq / OpenRouter,取决于已配置的提供商),含内联引用锚点
[1]–[8],点击可滚动至对应新闻来源 - 头条新闻 —— 该国 8 条最相关标题,按威胁等级着色,附带来源与”多久前”元数据
- 活跃信号 —— 抗议、军机、军舰、互联网中断、地震、人口流动、气候压力、冲突事件,以及该国股指(1 周变化)的实时芯片式指标
- 7 天时间线 —— D3.js 渲染的事件图表,含 4 条按严重度分色的泳道(抗议、冲突、自然、军事),支持交互式 tooltip 和响应式重排
- 预测市场 —— 按成交量排名的前 3 个 Polymarket 合约,附带概率条与外部链接
- 基础设施暴露 —— 距该国质心 600km 半径内的管道、海底光缆、数据中心、军事基地、核设施和港口,按距离排序
US → ["united states", "american", "washington", "pentagon", "biden", "trump"])。标题使用负匹配算法过滤 —— 若另一国家的别名在标题中出现得比目标国家别名更早,该标题会被排除。这能防止交叉污染(例如一篇关于委内瑞拉、提及”Washington sanctions”的标题出现在美国简报中)。
导出选项:简报可导出为 JSON(包含所有评分、信号和标题的结构化数据)、CSV(扁平表格格式)、PNG 图片,或一份便携的证据 Markdown 包(含精选信号、可用时的引用来源链接、新鲜度说明与来源溯源免责声明)。打印按钮会调用浏览器原生打印对话框以导出 PDF。
本地优先的国家检测
地图点击通过本地几何服务解析为国家,而非依赖网络反向地理编码(Nominatim)。系统加载一个包含约 200 个国家多边形边界的 GeoJSON 文件,并构建带索引的空间查找结构:- 包围盒预筛选 —— 每个国家的多边形都包裹在一个包围盒(
[minLon, minLat, maxLon, maxLat])内。包围盒之外的点无需多边形相交测试即被拒绝。 - 射线投射算法 —— 对于包围盒内的点,从该点沿正 x 轴方向投射一条射线。多边形边的相交次数决定内外状态(奇数次 = 在内)。边界情况已处理:位于线段边界上的点返回
true,多边形孔洞会被扣除(位于外环内但同时在孔洞内的点会被排除)。 - MultiPolygon 支持 —— 拥有不连续领土的国家(例如美国的阿拉斯加与夏威夷、印度尼西亚的数千个岛屿)使用 MultiPolygon 几何,每个多边形独立测试。
推演与预测
AI 推演与预测
推演面板是一款交互式 AI 地缘政治分析工具,基于实时情报数据生成近期时间线预测。 请求流水线:- 分析师输入自由文本查询(例如”未来 24 小时中东会发生什么?“)以及可选的地理上下文字段
- 提交前,
buildNewsContext()从实时信息流中拉取最近的 15 条NewsItem标题,并将它们作为结构化上下文前置("Recent News:\n- Headline (Source)")—— 确保 LLM 始终具备当前态势感知 - 查询被发送至
deductSituationRPC 端点,该端点调用callLlm()并使用提供商回退链(Groq、OpenRouter,或任何通过LLM_API_URL/LLM_API_KEY/LLM_MODEL环境变量配置的 OpenAI 兼容端点),系统提示要求其扮演”资深地缘政治情报分析师与预测员” - 温度为 0.3(偏低,以保证分析一致性),最多 1,500 tokens。思维链
think标签会作为纵深防御被剥离 - 结果按
deduct:situation:v1:{hash(query|geoContext)}在 Redis 中缓存 1 小时 —— 相同查询直接从缓存返回
wm:deduct-context 自定义 DOM 事件(携带 { query, geoContext, autoSubmit }),它会预填推演面板并可选地自动提交。这使仪表盘任意位置都能发起情境化预测 —— 点击某战区态势卡上的”分析”可自动触发区域推演。5 秒冷却时间防止快速重复提交。
该面板采用懒加载(import()),除非面板被实际访问,否则 DOMPurify 不会进入主包,从而保持 Web 包精简。
记忆与分类
客户端标题记忆(RAG)
标题记忆系统提供浏览器本地的检索增强生成 —— 一个完全在用户设备上运行的、持久化的新闻标题语义索引。 摄入流水线:- 每次 RSS feed 抓取并解析后,若标题记忆已启用且嵌入模型已加载,每条标题的标题、发布日期、来源、URL 与位置标签会被发送至 ML Worker
- Worker 对文本做净化处理(剥离控制字符、截断至 200 字符),通过 ONNX 流水线嵌入(
pooling: 'mean', normalize: true),并按内容哈希去重 - 向量通过串行化 promise 队列写入 IndexedDB(防止并发事务冲突)。当超过 5,000 向量上限时,按
ingestedAt最旧的条目会被驱逐
topK(1–20),并通过 minScore(0–1)过滤。可同时搜索多个查询字符串(最多 5 个),每条记录在所有查询中的最高分用于排序。
Opt-in 机制:该设置默认为 false(在 localStorage 中存储为 wm-headline-memory)。启用时会触发 mlWorker.init() → loadModel('embeddings')。禁用时会卸载模型,且若无其他 ML 功能活跃,可选择终止整个 Worker。ai-flow-changed CustomEvent 将开关变更传播至所有相关组件。
威胁分类流水线
每条新闻项都会经过一个三阶段分类流水线:-
关键词分类器(即时,
source: 'keyword')—— 对约 120 个威胁关键词进行模式匹配,这些关键词按严重度层级(critical → high → medium → low → info)和 14 个事件类别(conflict、protest、disaster、diplomatic、economic、terrorism、cyber、health、environmental、military、crime、infrastructure、tech、general)组织。短关键词使用词边界正则匹配以避免误报(例如 “war” 不会匹配 “award”)。较长关键词使用字面子串正则。在关键词层级运行之前,生活方式/娱乐排除项会通过小写子串检查(protein、couples、relationship、dating、diet、fitness、recipe、cooking、shopping、fashion、celebrity、movie、tv show、sports、game、concert、festival、wedding、vacation、travel tips、life hack、self-care、wellness)将匹配标题强制归为info/general。这能防止消费类标题被 “virus”、“ban” 或 “war” 等通用词提升等级。每次匹配返回一个严重度级别、类别与置信度分数。变体专属的关键词集确保科技变体不会在非地缘政治语境下标记 “sanctions”。 -
浏览器端 ML(异步,
source: 'ml')—— Transformers.js 在浏览器内直接运行 NER、情感分析与主题分类,无需任何服务器依赖。在不发起任何 API 调用的前提下提供第二分类意见。 -
LLM 分类器(批处理异步,
source: 'llm')—— 标题被收集进批处理队列,通过 sebuf proto 客户端以并行classifyEventRPC 发出。每个 RPC 调用已配置的 LLM 提供商(温度 0 的 Groq Llama 3.1 8B,或用于本地推理的 Ollama)。结果按标题哈希在 Redis 中缓存(24h TTL)。当发生 500 系错误时,LLM 分类器会自动暂停队列以避免浪费 API 配额,并在指数退避延时后恢复。当 LLM 结果到达时,仅在其置信度更高时才会覆盖关键词结果。
source 标签(keyword、ml 或 llm),下游消费者可据此加权置信度。
支撑端点
| 表面 | 端点 | 备注 |
|---|---|---|
| 事件分类 | GET /api/intelligence/v1/classify-event | 生成客户端使用的直接 REST RPC;服务端结果按标题哈希缓存。 |
| 国家事实背景 | GET /api/intelligence/v1/get-country-facts | 国家简报与档案工作流的 RestCountries / Wikipedia 上下文。 |
| 摘要缓存查询 | GET /api/news/v1/summarize-article-cache | 针对确定性摘要键的 CDN 可缓存查询;生成仍走 POST /api/news/v1/summarize-article。 |
警报
突发新闻警报流水线
仪表盘监控五个独立的警报来源,并将它们融合为统一的突发新闻流,具备分层去重、冷却和来源质量门控:| 来源 | 触发条件 | 示例 |
|---|---|---|
| RSS 警报 | 含 isAlert: true 且威胁等级为 critical/high 的新闻项 | 路透社快讯:确认遭导弹袭击 |
| 关键词激增 | 趋势关键词超过激增阈值 | ”nuclear” 在 2 小时内跨 8+ 个 feed 激增 |
| 热点升级 | 热点升级分数超过 critical 阈值 | 台海紧张度突破 80/100 |
| 军事集结 | 战区态势评估检测到打击包装 | 中东同现加油机 + AWACS + 战斗机 |
| OREF 警报 | 以色列后方司令部发布火箭/导弹来袭警报 | 以色列北部检测到火箭齐射 |
- 按事件去重 —— 每条警报以内容哈希为键;同一事件的重复警报在 30 分钟内被抑制
- 全局冷却 —— 任何警报触发后,60 秒全局冷却防止快速连发的通知冲击
- 时效门控 —— 处理时已超过 15 分钟的项目会被静默丢弃,防止陈旧事件在重连后产生警报
- 来源层级门控 —— Tier 3+ 来源(小众媒体、聚合器)必须具备 LLM 确认的分类(
threat.source !== 'keyword')才能触发警报;Tier 1–2 来源绕过此门 - 故事阶段门控 —— 持续中与衰减中的 RSS 报道被抑制;横幅保留给突发/发展中报道或无故事元数据的条目
- 重要性下限 ——
importanceScore < 30的 RSS 条目信号过低,不进入横幅 - 启动宽限 —— 应用加载后的前 10 秒内 RSS 警报被抑制,使初始 feed 抓取不会将旧文章重播为突发新闻。OREF 警报豁免
- 用户灵敏度控制 —— 可在
critical-only(仅 critical 严重度触发)与critical-and-high(critical 与 high 严重度均触发)之间配置
document 上派发 wm:breaking-news CustomEvent,突发新闻横幅消费该事件以在屏幕顶部显示持久通知。可选的浏览器 Notification API 弹窗与提示音作为用户设置提供。点击横幅会滚动至来源警报的 RSS 面板,并应用 1.5 秒闪烁高亮动画。
浏览器端 ML
浏览器端 ML 流水线
仪表盘通过 Transformers.js 在浏览器内运行本地 ML 流水线,用于嵌入、序列分类、回退摘要与实体抽取。CII/CRI 评分、来源归因简报、预测、MCP 工具与缓存运营数据在文档注明处保持服务端权威。为节省内存,浏览器 ML 在移动设备上自动禁用。| 能力 | 模型 | 用途 |
|---|---|---|
| 文本嵌入 | sentence-similarity | 新闻标题的语义聚类 |
| 序列分类 | threat-classifier | 威胁严重度与类别检测 |
| 摘要 | T5-small | Ollama、Groq、OpenRouter 全部不可用时的最后回退 |
| 命名实体识别 | NER pipeline | 国家、组织与领导人抽取 |
sourcesPerHour 作为速度指标。
基于浏览器的机器学习
为提升离线韧性并降低 API 成本,系统包含基于 ONNX Runtime Web 的浏览器端 ML 能力。可用模型
| 模型 | 任务 | 大小 | 用例 |
|---|---|---|---|
| T5-small | 文本摘要 | ~60MB | 离线简报生成 |
| DistilBERT | 情感分析 | ~67MB | 新闻基调分类 |
回退策略
浏览器 ML 作为云端 API 不可用时的最终回退:懒加载
模型按需加载以最小化初始页面加载:- 模型仅在首次需要时下载
- 进度指示器显示下载状态
- 缓存后模型可从 IndexedDB 即时加载
Worker 隔离
所有 ML 推理在专用 Web Worker 中运行:- 主线程在推理期间保持响应
- 30 秒超时防止挂起
- 出错时自动清理
局限性
相比云端模型,浏览器 ML 有以下约束:| 方面 | 云端 (Llama 3.3) | 浏览器 (T5) |
|---|---|---|
| 上下文窗口 | 128K tokens | 512 tokens |
| 输出质量 | 高 | 中等 |
| 推理速度 | 2-3 秒 | 5-10 秒 |
| 离线支持 | 否 | 是 |
AI 洞察面板
洞察面板提供对当前新闻格局的 AI 驱动分析,将原始标题转化为可操作的情报简报。世界简报生成
每 2 分钟(含限流),系统使用多提供商回退链生成一份精炼态势简报:| 优先级 | 提供商 | 模型 | 延迟 | 用例 |
|---|---|---|---|---|
| 1 | Groq | Llama 3.3 70B | ~2s | 主提供商(快速推理) |
| 2 | OpenRouter | Llama 3.3 70B | ~3s | Groq 被限流时的回退 |
| 3 | Browser | T5 (ONNX) | ~5s | 离线回退(本地 ML) |
焦点检测
AI 接收关于焦点的富化上下文 —— 即同时出现在新闻报道与地图信号中的实体。这支持情报级分析:标题评分算法
并非所有新闻同等重要。标题会被评分以识别对简报最具意义的报道: 加分项(高权重):- 军事关键词:war、invasion、airstrike、missile、deployment、mobilization
- 暴力指标:killed、casualties、clashes、massacre、crackdown
- 民间动荡:protest、uprising、coup、riot、martial law
- 热点地区:Iran、Russia、China、Taiwan、Ukraine、North Korea、Gaza
- 关键行为体:NATO、Pentagon、Kremlin、Hezbollah、Hamas、Wagner
- 商业语境:CEO、earnings、stock、revenue、startup、data center
- 娱乐:celebrity、movie、streaming
情感分析
标题按整体情感分布进行分析:| 情感 | 检测方法 | 显示 |
|---|---|---|
| 负面 | 危机、冲突、死亡关键词 | 红色百分比 |
| 正面 | 协议、增长、和平关键词 | 绿色百分比 |
| 中性 | 两者均未检测到 | 灰色百分比 |
速度检测
当同一主题出现在多条近期标题中时,快速演进的报道会被标记:- 标题按共享关键词与实体分组
- 6 小时内出现 3 次及以上的主题被标记为”高速”
- 单独显示以突出发展中态势
焦点检测器
焦点检测器是情报综合层,将新闻实体与地图信号关联以识别驱动当前事件的”主角”。它解决的问题
缺乏综合时,情报流各自为政:- 新闻 feed 显示 500+ 来源的数千条标题
- 地图图层独立显示军机、抗议、中断
- 无法自动看出 IRAN 既出现在新闻中,又有军事活动,还发生了互联网中断
工作原理
- 实体抽取:使用实体注册表(含别名的 66 个实体)从所有新闻聚类中抽取国家、公司与组织
- 信号聚合:收集所有地图信号(军机、抗议、中断、舰船)并按国家分组
- 交叉引用:将新闻实体与信号国家匹配
- 评分与排序:基于关联强度计算焦点分数
焦点评分
紧急度分类
| 紧急度 | 标准 | 视觉 |
|---|---|---|
| Critical | 分数 > 70 或 3+ 种信号类型 | 红色徽章 |
| Elevated | 分数 > 50 或 2+ 种信号类型 | 橙色徽章 |
| Watch | 默认 | 黄色徽章 |
信号类型图标
焦点显示指示当前激活信号类型的图标:| 图标 | 信号类型 | 含义 |
|---|---|---|
| ✈️ | military_flight | 附近检测到军机 |
| ⚓ | military_vessel | 水域内有军舰 |
| 📢 | protest | 民间动荡事件 |
| 🌐 | internet_outage | 网络中断 |
| 🚢 | ais_disruption | 航运异常 |
输出示例
IRAN 的焦点可能显示:- 显示:“Iran [CRITICAL] ✈️📢🌐”
- 新闻:12 次提及,速度 0.5/小时
- 信号:5 次军机、3 次抗议、1 次中断
- 叙述:“12 news mentions | 5 military flights, 3 protests, 1 internet outage | ‘Iran protests continue amid…’”
- 关联证据:“Iran appears in both news (12) and map signals (9)“
与 CII 的集成
焦点紧急度输入国家动荡指数(CII):- Critical 焦点 → 该国 CII 分数提升
- 确保多源汇聚的国家被正确标记
- 防止单凭新闻不足以触发警报时的”静默”动荡
