wilson-cheng1110/WorldPredict

GitHub: wilson-cheng1110/WorldPredict

将实时全球情报仪表盘与多智能体预测引擎整合为一个自托管工具,用于模拟现实事件的连锁反应并自动验证预测结果。

Stars: 0 | Forks: 0

# Worldcast 🌍 Worldcast 将两个开源项目——一个实时全球情报仪表板和一个多智能体 AI 模拟引擎——整合为一个单一工具,用于预测现实世界事件的连锁反应,并通过监控新闻动态告诉你这些预测何时实际发生。 [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Node.js](https://img.shields.io/badge/Node.js-18+-green?logo=node.js)](https://nodejs.org) [![Mock 模式快速入门](https://img.shields.io/badge/quickstart-2%20min-success)](#快速开始--2-分钟内看到运行效果) ## 演示 ![Worldcast 演示循环:选择一个土耳其地震事件,观察预测渲染,然后看到一条确认新闻将监控信号翻转为绿色](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/57fa70507c081521.gif) 完整循环:选择一个实时事件 → 渲染带有市场/地缘政治/供应链要点和监控信号的模拟预测 → 一个传入的新闻事件确认了其中一个信号,顶部出现横幅。针对内置的 mock 运行,无需 Docker —— [2 分钟内试用 ↓](#quick-start--see-it-running-in-2-minutes)。 ## 功能介绍 1. **监控** — WorldMonitor 将 435+ 个实时新闻源、地缘政治信号和金融数据聚合到一个实时 3D 地球仪上 2. **选择** — 选择任何事件,点击“预测此事件” 3. **模拟** — MiroFish 生成数千个具有记忆和个性的 AI 智能体,运行以该事件为种子的社会模拟 4. **报告** — 跨市场、地缘政治、供应链的纯英文要点 —— 外加一份特定可验证信号的监控清单 5. **通知** — 桥接层持续根据你开放的监控信号扫描传入的 WorldMonitor 事件。当现实与预测相符时,你会收到浏览器通知 ``` Live event → Simulate → Report + Watch signals ↓ New events → Matcher → 🔔 "Your prediction came true" ``` ## 架构 ``` ┌──────────────────────────────────────────────────────────────────┐ │ YOUR UI :3333 │ │ Feed Tab │ Globe Tab (iframe) │ Sim Tab (iframe) │ History Tab │ │ │ │ Report Panel Watch Signals Panel │ │ ────────────── ───────────────────────── │ │ • markets □ TSMC drops >3% · 5 days 🔔 │ │ • geopolitics □ China counter-tariffs · 90d 🔔 │ │ • supply chain □ Vietnam FDI spike · Q3 🔔 │ │ [ ✓ happened ] [ ✗ didn't ] │ └──────┬───────────────────────────────────┬───────────────────────┘ │ POST /predict │ WS: progress, report, │ │ match alerts 🔔 ▼ │ ┌──────────────────────────────────────────────────────────────────┐ │ BRIDGE :4000 │ │ │ │ formatter.js ── shapes WM event → MF seed │ │ jobs.js ── fires sim, polls status, streams progress │ │ summarizer.js ── raw MF report → plain English + signals │ │ watchlist.js ── stores open signals, expiry, match rules │ │ matcher.js ── NEW: polls WM feed, scores against signals │ │ notifier.js ── NEW: pushes WS alert when match found │ └──────┬────────────────────────────────────┬───────────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────────┐ │ WorldMonitor │ │ MiroFish │ │ :5173 │◄─ matcher │ :5001 / :3000 │ │ (Docker image) │ polls │ (Docker image) │ │ │ every 60s │ │ │ GET /api/events│ │ POST /api/simulate │ └─────────────────┘ └──────────┬──────────┘ │ ┌──────────▼──────────┐ │ LLM API │ │ qwen / ollama │ │ (user's own key) │ └─────────────────────┘ ``` **你只需编写和维护:** - `bridge/` — 约 250 行 Node.js(6 个小模块) - `ui/` — 约 180 行 HTML(单文件) WorldMonitor 和 MiroFish 作为 Docker 镜像从其注册表拉取运行。你永远不需要碰它们的代码。当它们更新时,只需:`docker compose pull`。 ## 通知循环的工作原理 ``` Every 60 seconds: matcher.js polls WorldMonitor GET /api/events (last 60s of news) │ ▼ For each open watch signal in watchlist: score = LLM.match(incoming_event, signal_text) if score > 0.8 → signal.status = "confirmed" → notifier.push(WS alert to UI) → UI shows 🔔 banner + marks checkbox green if signal.expires_at < now → signal.status = "expired" ``` 匹配器使用轻量级的 LLM 调用 —— 仅计算传入标题与监控信号文本之间的语义相似度。便宜、快速,每分钟运行一次。 ## 监控信号功能 每份预测报告都以 3-5 个具体、可验证、有时限的信号结束: ``` WATCH FOR THESE SIGNALS status ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ □ TSMC stock drops >3% watching · expires 5 days □ China announces counter-tariffs watching · expires 90 days □ Vietnam FDI announcements spike watching · expires Q3 □ CHIPS Act discussion resurfaces watching · expires Q2 Last scanned: 2 min ago ``` 当匹配触发时: ``` 🔔 PREDICTION CONFIRMED "China announces agricultural counter-tariffs" matched incoming: "Beijing announces retaliatory tariffs on US soybeans" · Reuters · 14 min ago [ view event ] [ view original prediction ] ``` ## 快速开始 —— 2 分钟内看到运行效果 试用 Worldcast 最快的方式是 **mock 模式**:bridge + UI 与本地的 WorldMonitor 和 MiroFish 存根通信,因此你不需要 Docker、真实的上游镜像、Zep Cloud 账户,或者本地 Ollama 之外的 LLM 密钥。 **前提条件:** Node.js 18+ 以及(可选)[Ollama](https://ollama.com) 拉取了任意小模型(`ollama pull llama3`)。如果 Ollama 未运行,预测只会返回空摘要 —— 其他一切仍能正常工作。 ``` git clone https://github.com/wilson-cheng1110/WorldPredict cd WorldPredict cp .env.example .env # default values are fine for mock mode npm install # installs bridge + test deps (~2 min) npm run quickstart # boots mocks, bridge, UI all at once ``` 打开 ****。你会看到三个示例事件。点击其中任何一个上的“预测此事件”——进度条将经历 `queued → building world model → summarizing → complete`,随后会出现一个包含市场/地缘政治/供应链要点和监控信号清单的报告面板。 要观察通知循环的触发,请向 mock WM 注入一个确认事件: ``` curl -X POST http://localhost:5173/inject -H "Content-Type: application/json" -d '{ "id":"wm_demo","title":"Confirming event matches your signal", "description":"...","source":"Demo","published_at":"2026-05-11T00:00:00Z", "region":"TEST","category":"markets","url":"https://example.com" }' ``` 在 60 秒内,匹配器循环会拾取该事件,你会收到浏览器通知。 在快速启动终端中按 Ctrl-C 即可关闭所有内容。 ### 测试 ``` npm test # unit tests + MF-direct tests (fast, <10s) npm run test:integration # full loop against the running mock stack ``` ### 真实堆栈模式(高级) 针对真实的 WorldMonitor 和 MiroFish 容器运行 **尚未实现一键式体验**。Docker 镜像并未发布在公开注册表上,因此你需要: 1. 将 [koala73/worldmonitor](https://github.com/koala73/worldmonitor) 和 [666ghj/MiroFish](https://github.com/666ghj/MiroFish) 作为此仓库的同级目录克隆并在本地构建 2. 获取一个免费的 [Zep Cloud](https://app.getzep.com) API 密钥(MiroFish 在图谱 + 模拟步骤中需要它) 3. 将 `docker-compose.yml` 修改为 `build: ../worldmonitor` / `build: ../MiroFish/backend`,而不是 `image:` 4. 获取一个 LLM 密钥 —— [Alibaba Bailian](https://bailian.console.aliyun.com/) qwen-plus 有免费额度;OpenAI 也可以 有关真实堆栈支持的状态,请参阅 [ROADMAP.md](ROADMAP.md)。 ## 环境变量 ``` # LLM — 任何兼容 OpenAI 的 API LLM_API_KEY=your_key LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 LLM_MODEL_NAME=qwen-plus # Zep Cloud — agent 长期记忆 ZEP_API_KEY=your_zep_key # Bridge 内部机制 (默认值即可,如有需要可修改) BRIDGE_PORT=4000 WM_URL=http://worldmonitor:5173 MF_API_URL=http://mirofish-api:5001 MF_UI_URL=http://mirofish-ui:3000 MATCH_POLL_INTERVAL_MS=60000 MATCH_CONFIDENCE_THRESHOLD=0.8 SIGNAL_DEFAULT_EXPIRY_DAYS=90 ``` ## 项目结构 ``` worldcast/ ├── package.json root npm scripts (quickstart, test) ├── docker-compose.yml real-stack composition (see ROADMAP.md) ├── .env.example all keys documented ├── scripts/ │ └── quickstart.mjs boots mocks + bridge + UI in one process ├── bridge/ │ ├── index.js Express + WebSocket server │ ├── formatter.js WM event → MF seed document │ ├── jobs.js fire sim, poll, stream progress │ ├── summarizer.js raw report → bullets + watch signals │ ├── watchlist.js store/retrieve open signals │ ├── matcher.js poll WM feed, score vs signals │ └── notifier.js push WS alerts to UI clients ├── ui/ │ └── index.html all 4 tabs + notification UI ├── test/ │ ├── mock-services.js stub WorldMonitor + MiroFish │ ├── unit.test.js node:test, pure-function coverage │ ├── mf-direct.test.js contract test against mock MF │ └── integration.test.js POST /predict → WS → signal_confirmed └── docs/ ├── index.html GitHub Pages landing page └── screenshots/ README assets ``` ## 局限性 - 预测是概率性叙述,而非统计预测。是情景规划,而非财务建议。 - 模拟质量随种子丰富度的增加而提升。稀疏事件 → 较弱的模拟。 - 每次模拟需要 5-15 分钟,并消耗大量 LLM token。建议从少于 40 轮开始。 - 匹配器使用语义相似度,而非事实核查。匹配的标题仅代表确认 —— 仍需人工判断。 ## 许可证 AGPL-3.0 —— 可免费使用、修改、分发。请保持开源。 WorldMonitor © Elie Habib — AGPL-3.0 MiroFish © 666ghj / Shanda Group — AGPL-3.0
标签:3D地球可视化, AI代理仿真, DLL 劫持, DNS解析, GNU通用公共许可证, HTTP/HTTPS抓包, MITM代理, Node.js, PyRIT, 事件模拟, 事态推演, 供应链风险, 信息监测, 全球情报监控, 危机管理, 商业智能, 地缘政治分析, 多智能体系统, 大语言模型, 实时新闻聚合, 开源项目, 态势感知, 情报预警, 社会模拟, 自动化通知, 自定义脚本, 自托管平台, 请求拦截, 金融市场分析, 预测引擎