AI 摘要
AI 摘要链
世界简报由一个 4 层提供商链生成,该链优先使用本地算力,在云端 API 之间逐级回退,并以浏览器端推理作为最后手段:_summarize-handler.js),行为完全一致:
- 标题去重 —— 在发送给任何 LLM 之前,标题会使用词重叠相似度进行两两比较。近乎重复的标题(重叠度 > 60%)会被合并,从而将提示词缩减 20–40%,避免 LLM 在重复报道上浪费 token
- 变体感知提示 —— 系统提示会根据当前激活的仪表盘变体自适应调整。地缘政治摘要强调冲突升级与外交动向;科技摘要聚焦融资轮次与 AI 突破;金融摘要突出市场走势与央行信号
- 语言感知输出 —— 当 UI 语言为非英语时,提示会指示 LLM 以该语言生成摘要
- Redis 去重 —— 摘要使用复合键(
summary:v9:{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 包(含精选信号、可用时的引用来源链接、新鲜度说明与来源溯源免责声明)。其中结构化 JSON 与 CSV 导出需要包含数据导出的套餐(Pro Business、API 套餐与 Enterprise),证据包需要 Pro 及以上;PNG 图片免费。打印按钮会调用浏览器原生打印对话框以导出 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 将开关变更传播至所有相关组件。
持久化服务端情报记忆
标题记忆并不是唯一的记忆系统。World Monitor 还会保存一份需要 Pro 权限的服务端历史,收录冲突、军事与能源事件,使 agent 和 API 客户端能够跨会话、跨设备检索证据。
三种检索模式分别回答不同的分析问题:
- 语义搜索 —
POST /api/intelligence/v1/search-intel-history将历史事件与 2–500 字符的查询进行排序,并可按领域、国家与时间过滤。 - 时间线 —
GET /api/intelligence/v1/get-intel-timeline按时间倒序返回指定领域和/或国家的事件,不消耗嵌入调用。 - 先例匹配 —
POST /api/intelligence/v1/get-similar-events将较长的情境描述与历史事件比较,并返回刻意保持较小的先例集合。
upstreamUnavailable 与健康的空结果明确区分。
企业情报
Intelligence service 现在提供一套以 SEC 权威身份为基础的公司解析与申报文件工作流,而不是依赖名称猜测:- 将精确股票代码或唯一匹配的 SEC 公司正式名称解析为 CIK。
- 从 SEC 身份与近期 10-K、10-Q、8-K 文件构建公司富化,并在可用时加入市场概况、盈利意外与近期新闻提及。
- 从重大 8-K 事件与新闻中分类带权威时间戳的公司信号。财政期末仅保留为富化事实,不会被误标为事件时间。
- 直接搜索 SEC EDGAR 文件,或读取已播种的全市场重大事件流。
无法解析的公司会返回明确的空响应;服务不会使用前缀匹配,也不会虚构公司与域名的关联。Agent 可通过 MCP
get_company_intelligence 工具访问相同的四种视图。
按需 Agent 实用工具
四个 MCP 实用工具把过去只存在于仪表盘内部流水线中的分析原语开放出来:
当 agent 需要一个可复用原语而不是预先写好的简报时,这些工具最有价值。参数、限制、新鲜度与示例请参见 MCP 工具参考。
威胁分类流水线
每条新闻项都会经过一个三阶段分类流水线:-
关键词分类器(即时,
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),下游消费者可据此加权置信度。
支撑端点
警报
突发新闻警报流水线
仪表盘监控五个独立的警报来源,并将它们融合为统一的突发新闻流,具备分层去重、冷却和来源质量门控:
防噪声保障:
- 按事件去重 —— 每条警报以内容哈希为键;同一事件的重复警报在 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 在移动设备上自动禁用。
混合聚类 结合了快速的 Jaccard 相似度(n-gram 重叠,阈值 0.4)与 ML 精修的语义相似度(余弦相似度,阈值 0.78)。Jaccard 在每次刷新时即时运行;语义精修在 ML Worker 加载后运行,合并文本不同但语义相同的聚类(例如”NATO expands missile shield”与”Alliance deploys new air defense systems”)。
每个聚类的新闻速度会被跟踪 —— 当多个 Tier 1–2 来源在短窗口内汇聚于同一报道时,该聚类会被标记为突发警报,
sourcesPerHour 作为速度指标。
基于浏览器的机器学习
为提升离线韧性并降低 API 成本,系统包含基于 ONNX Runtime Web 的浏览器端 ML 能力。可用模型
回退策略
浏览器 ML 作为云端 API 不可用时的最终回退:懒加载
模型按需加载以最小化初始页面加载:- 模型仅在首次需要时下载
- 进度指示器显示下载状态
- 缓存后模型可从 IndexedDB 即时加载
Worker 隔离
所有 ML 推理在专用 Web Worker 中运行:- 主线程在推理期间保持响应
- 30 秒超时防止挂起
- 出错时自动清理
局限性
相比云端模型,浏览器 ML 有以下约束:
浏览器摘要有意限制在 6 条标题 × 80 字符,以保持在模型约束之内。
AI 洞察面板
洞察面板提供对当前新闻格局的 AI 驱动分析,将原始标题转化为可操作的情报简报。世界简报生成
每 2 分钟(含限流),系统使用多提供商回退链生成一份精炼态势简报:
缓存策略:Redis 服务端缓存防止冗余 API 调用。当相同标题集近期已被摘要时,缓存结果会立即返回。
焦点检测
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 显示精选来源的标题
- 地图图层独立显示军机、抗议、中断
- 无法自动看出 IRAN 既出现在新闻中,又有军事活动,还发生了互联网中断
工作原理
- 实体抽取:使用含别名的实体注册表从所有新闻聚类中抽取国家、公司与组织
- 信号聚合:收集所有地图信号(军机、抗议、中断、舰船)并按国家分组
- 交叉引用:将新闻实体与信号国家匹配
- 评分与排序:基于关联强度计算焦点分数
焦点评分
紧急度分类
信号类型图标
焦点显示指示当前激活信号类型的图标:输出示例
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 分数提升
- 确保多源汇聚的国家被正确标记
- 防止单凭新闻不足以触发警报时的”静默”动荡
