wilson-cheng1110/WorldPredict
GitHub: wilson-cheng1110/WorldPredict
将实时全球情报仪表盘与多智能体预测引擎整合为一个自托管工具,用于模拟现实事件的连锁反应并自动验证预测结果。
Stars: 0 | Forks: 0
# Worldcast 🌍
Worldcast 将两个开源项目——一个实时全球情报仪表板和一个多智能体 AI 模拟引擎——整合为一个单一工具,用于预测现实世界事件的连锁反应,并通过监控新闻动态告诉你这些预测何时实际发生。
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://nodejs.org)
[](#快速开始--2-分钟内看到运行效果)
## 演示

完整循环:选择一个实时事件 → 渲染带有市场/地缘政治/供应链要点和监控信号的模拟预测 → 一个传入的新闻事件确认了其中一个信号,顶部出现横幅。针对内置的 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, 事件模拟, 事态推演, 供应链风险, 信息监测, 全球情报监控, 危机管理, 商业智能, 地缘政治分析, 多智能体系统, 大语言模型, 实时新闻聚合, 开源项目, 态势感知, 情报预警, 社会模拟, 自动化通知, 自定义脚本, 自托管平台, 请求拦截, 金融市场分析, 预测引擎