VIGILUS — 意大利危机看板
面向意大利国家安全的实时 OSINT 情报仪表板
[🇮🇹 Italiano](#italiano) · [🇬🇧 English](#english)
## 🇮🇹 意大利语
用于监控意大利国家安全的开源 OSINT 仪表板。采用 Bloomberg 终端风格的布局,配备作战地图和情报面板。完全基于公开数据。
### 技术栈
| 层级 | 技术 |
|---|---|
| Backend | Python 3.12, FastAPI, SQLAlchemy 2.0, APScheduler, spaCy, sentence-transformers, Alembic |
| Frontend | React 18, Vite, Recharts, Leaflet, Tailwind CSS |
| Database | SQLite (开发) / PostgreSQL 16 (生产,通过 Supabase/Render) |
| Infra | Render, Docker Compose, Caddy HTTPS, GitHub Actions CI/CD |
| 安全 | API key auth, rate limiting, CORS, security headers, Sentry |
| Intelligence | 语义 NLP 分类器 (sentence-transformers), 浏览器端 ML (威胁 + 情感), Headline Memory RAG (IndexedDB) |
| 监控 | Prometheus `/metrics`, 结构化 JSON 日志 |
### 功能特性
**Bloomberg 终端布局**
- 左侧作战地图 (60%),支持 6 个数据层切换和拖拽调整大小
- 右侧情报面板 (40%),可滚动
- 滚动新闻条,聚合 50+ 个意大利 RSS 源
- 分数条,显示综合指数 + 6 个实时维度
**分数与维度**
- 综合指数 0–100 — 基于 90 天基准线通过 z-score 加权平均 6 个维度
- 地缘政治 (25%) · 恐怖主义 (20%) · 网络 (15%) · 颠覆 (15%) · 军事 (15%) · 社会 (10%)
- 🟢 平静 · 🔵 正常 · 🟡 注意 · 🟠 高度 · 🔴 危机
**作战地图 — 6 个图层**
- 通过 spaCy NER 进行地理标记的事件
- 14 个北约/美国军事基地 (Aviano, Sigonella, Ghedi, Camp Darby...)
- 18 个关键基础设施 (港口, 机场, 发电站, 海底电缆, TAP)
- INGV 过去 7 天的地震 (M2+)
- 军事航班 ADS-B (OpenSky Network)
- 多维度地理聚合
**浏览器端情报**
- Headline Memory (RAG) — IndexedDB 中存储 5,000 条标题,支持语义搜索
- ML 分类器 — 在 Web Worker 中进行威胁检测 + 情感分析
- 关键词监控 — 可通过 localStorage 自定义警报
- 热门关键词 — 基于 z-score 的峰值检测 (2小时滚动 vs 7天基准线)
**OSINT & 数据 — 8 个收集器 + 50+ RSS**
- ANSA, AGI, Adnkronos, Repubblica, Corriere, Sole24Ore, Difesa Online, Formiche, CSIRT, Red Hot Cyber, Reuters, BBC...
- GDELT, CSIRT Italia, Google Trends, ACLED, OpenSky ADS-B, INGV
- **语义 NLP 分类** — sentence-transformers (paraphrase-multilingual-MiniLM-L12-v2) 使用余弦相似度按维度分类,针对恐怖主义/网络内容快速通过关键词,自动过滤无关新闻 (八卦, 体育, 娱乐),每篇文章置信度得分 0–1
- 热点升级及 48 小时趋势
- 跨流关联 (Pearson) + 同步峰值警报
- 区域简报 (14 个意大利大区)
- 预测市场 (8 个地缘政治场景)
- 故障监控 (TIM, Vodafone, Enel, SPID...)
- 自动每日 24 小时摘要
**工具**
- ⌘K 命令面板 — 模糊搜索
- 深色/浅色主题,带玻璃拟态效果
- IT/EN 语言切换
- 时段对比 (周/月/季)
- 导出 CSV/报告
- 分享至 Twitter, Telegram, WhatsApp
- TG 直播 (Sky TG24, Rai News 24, TGCOM24)
- AI 叙事 (Claude, 可选)
- WebSocket 实时 + URL 状态共享
- 可安装 PWA + 可调整面板大小
### 快速开始
```
# Backend
cd backend
python -m venv .venv && source .venv/bin/activate
pip install ".[dev]"
python -m spacy download it_core_news_sm
uvicorn sentinella.main:app --reload # http://localhost:8000
# Frontend
cd frontend
npm install && npm run dev # http://localhost:3000
# Docker (全部集成)
cp .env.example .env && docker compose up -d
```
### 测试
```
cd backend
python -m pytest tests/ -v --cov=sentinella
# 176 个测试 · 69% 覆盖率 · 0 个 lint 错误
```
### 数据来源
| 来源 | 数据 | 缓存 |
|---|---|---|
| **Mega RSS** (50+ 源) | 通讯社, 日报, 国防, 网络, 地缘政治 — 语义 NLP 分类 | 15分钟 |
| GDELT Project | 国际文章, 负面情绪 | 1小时 |
| CSIRT Italia | 网络公告, CVE, 基础设施 | 30分钟 |
| Google Trends | 意大利关键词 | 24小时 |
| ACLED | 意大利抗议与冲突 | 7天 |
| OpenSky Network | 5 个 ADS-B 基地的军事航班 | 1小时 |
| INGV | 过去 7 天 M2+ 地震 | 30分钟 |
### API (32 个端点)
完整端点列表
```
GET /api/score/current score + dimensioni + confidence
GET /api/score/history storico (?days=30)
GET /api/score/anomalies proxy con |z| >= 1.5σ
GET /api/score/compare confronto periodi
GET /api/score/correlations correlazioni cross-stream
GET /api/score/narrative sintesi AI
POST /api/score/trigger forza ricalcolo (solo debug)
GET /api/dimension/{name} dettaglio dimensione
GET /api/dimension/{name}/history storico dimensione
GET /api/events/latest eventi classificati
GET /api/events/search full-text search
GET /api/headlines titoli ticker (50+ fonti)
GET /api/trending keywords spike detection
GET /api/hotspots escalation per dimensione
GET /api/predictions prediction markets
GET /api/outages stato infrastrutture digitali
GET /api/digest/daily riepilogo 24h
GET /api/earthquakes terremoti INGV
GET /api/flights voli militari ADS-B
GET /api/region/{name} dossier regionale
GET /api/map/events eventi geo-taggati NER
GET /api/map/regional breakdown Nord/Centro/Sud
GET /api/map/convergence convergenza multi-dimensione
GET /api/layers/military GeoJSON 14 basi NATO
GET /api/layers/infrastructure GeoJSON 18 infrastrutture
GET /api/layers/all tutti i data layer
GET /api/export/csv download CSV
GET /api/export/report report JSON
GET /api/sources/status stato fonti
GET /api/cache/status cache collector
GET /api/methodology documentazione
GET /health health check
GET /metrics Prometheus metrics
WS /ws/score WebSocket real-time
```
### 部署
项目部署在 **Render** (backend + frontend) 上,使用 **PostgreSQL** (Render 免费数据库)。
```
# 使用 Docker Self-hosted
cp .env.production.example .env
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker compose exec backend alembic upgrade head
```
## 🇬🇧 英语
用于监控意大利国家安全的开源 OSINT 仪表板。采用 Bloomberg 终端风格的布局,配备作战地图和情报面板。完全基于公开数据。
### 功能特性
- **综合评分 0–100**,覆盖 6 个安全维度,采用 z-score 归一化
- **作战地图**,包含 6 个可切换数据层 (北约基地, 基础设施, 地震, 航班, 聚合)
- **50+ 个意大利 RSS 源**,支持 NLP 语义分类和热门关键词峰值检测
- **智能新闻分类器** — sentence-transformers 结合余弦相似度,自动过滤无关内容,提供置信度分数
- **浏览器端 ML** — 在 Web Worker 中进行威胁分类 + 情感分析
- **Headline Memory RAG** — IndexedDB 中索引 5,000 条标题以进行语义搜索
- **跨流关联** — 跨维度 Pearson 关联,同步峰值警报
- **区域简报**,覆盖 14 个意大利大区
- **直播 TV** — Sky TG24, Rai News 24, TGCOM24
- **⌘K 命令面板**, 深色/浅色主题, IT/EN, PWA, 可调整面板
- **32 个 API 端点**, 176 个测试, 69% 覆盖率
### 数据来源
8 个收集器 + 50+ 个 RSS 源:GDELT, CSIRT Italia, ACLED, Google Trends, OpenSky ADS-B, INGV 地震, ANSA, AGI, Adnkronos, Repubblica, Corriere, 国防与网络专业源。新闻通过 NLP 语义嵌入进行分类,并自动过滤无关内容。
### 快速开始
```
cd backend && python -m venv .venv && source .venv/bin/activate
pip install ".[dev]" && python -m spacy download it_core_news_sm
uvicorn sentinella.main:app --reload
cd frontend && npm install && npm run dev
```
### 技术栈
FastAPI · React 18 · SQLAlchemy 2.0 · sentence-transformers · Leaflet · Tailwind CSS · PostgreSQL · Render · GitHub Actions
### 许可证
AGPL-3.0