gigachad8909-dotcom/watchman-ng
GitHub: gigachad8909-dotcom/watchman-ng
面向尼日利亚的 AI 驱动安全情报平台,通过实时聚合多源新闻数据并提供战术地图、事件分析和告警功能来解决区域安全态势感知问题。
Stars: 0 | Forks: 0
# Watchman NG — 安全情报平台
为尼日利亚提供的实时 AI 驱动的安全情报。包含战术地图、实时事件动态、每日 AI 简报、邻近告警、PDF 导出以及用户报告功能。
## 快速开始(一条命令)
### 前置条件
- Node.js 20+
- PostgreSQL 16(通过 Homebrew:`brew install postgresql@16`)
- OpenAI API key
### 1. 克隆并安装
```
git clone
cd Watchman-ng
npm install
```
### 2. 配置环境
```
cd backend
cp .env.example .env
```
编辑 `backend/.env`:
```
DATABASE_URL=postgresql://yourusername@localhost:5432/Watchman_ng
OPENAI_API_KEY=sk-your-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
```
### 3. 设置数据库
```
brew services start postgresql@16
createdb Watchman_ng
npm run db:migrate
```
### 4. 启动所有服务
```
npm run dev
```
就这样。一条命令即可同时启动后端 + 前端:
- **前端** → http://localhost:3000
- **后端** → http://localhost:4000
抓取程序会立即开始从 170 多个尼日利亚新闻源获取数据。事件将在几分钟内显示在地图上。
## 技术栈
| 层级 | 技术 |
|-------|------|
| 前端 | React 18 · TypeScript · Vite · Tailwind · Leaflet · Zustand · Socket.io |
| 后端 | Node.js · Express · TypeScript · PostgreSQL · Socket.io |
| AI | OpenAI GPT-4o-mini(事件提取 + 分类) |
| 地理编码 | Nominatim (OpenStreetMap) — 免费,无需 API key |
| 基础设施 | 单条 `npm run dev` 命令 |
## 功能
- **战术地图** — 聚合事件标记,支持下钻至 州 → 区 → 街道级别。平滑的 Google Earth 风格缩放,无白屏闪烁。主页按钮可重置视图。
- **实时情报动态** — 170 多个尼日利亚 RSS 源,经 AI 提取、去重,并按事件类型进行颜色分类。宽面板支持按时间/州筛选。
- **每日情报简报** — 详细的完整简报,支持日期导航(今天 / 昨天 / 自定义)、威胁等级、包含实际新闻的关键动态、热点州、按类型划分的事件明细,以及可点击以缩放地图的事件。
- **PDF 导出** — 生成包含所有事件数据的精美每周情报报告。
- **实时告警** — 基于您所在位置附近进行过滤的 Socket.io 推送通知。
- **用户报告** — 3 步报告模态框,带地图图钉 + 逆向地理编码。
- **搜索** — 全局搜索栏,支持对所有事件进行去抖动的实时过滤。
- **错误处理** — 错误边界、加载骨架屏、连接重试 UI。
- **移动端适配** — 可折叠侧边栏,适配所有屏幕尺寸的自适应布局。
## 新闻源(170+)
抓取程序从以下来源轮询 **170 多个 RSS 订阅源**:
- **一级 国家级**:Vanguard, Punch, Premium Times, The Nation, Guardian, Channels TV, Daily Trust, This Day, Leadership, Tribune, Daily Post, Arise TV, TVC News
- **二级 调查类**:HumAngle, The Cable, Sahara Reporters, The Whistler, ICIR, Gazettengr, Dataphyte, BudgIT
- **三级 数字媒体**:PM News, Independent, Sun, BusinessDay, Blueprint, Pulse Nigeria, Nairametrics, Legit.ng, TechCabal, Nigeria Info FM
- **四级 区域性**:涵盖全部 36 个州 + FCT,配有专属媒体机构
- **五级 国际性**:BBC Africa, Al Jazeera, VOA, DW, Reuters, AP, France24, AfricaNews
- **六级 安全类**:ReliefWeb, ACLED, Crisis Group, Africa Center, OSAC, IISS, SIPRI, CTC West Point
- **七级 民众类**:Nairaland, Nigerian Eye, Linda Ikeji, BellaNaija
- **八级 广播类**:TVC News, Silverbird, AIT, Herald, News Express, Peoples Daily
- **九级 社交媒体**:通过 RSSHub 获取的 Twitter/X 账号(警察、DSS、关键记者),Telegram 频道
## API 参考
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/incidents` | 列出事件(分页、可过滤) |
| GET | `/api/incidents/:id` | 单个事件详情 |
| GET | `/api/incidents/nearby?lat=&lng=&radiusKm=` | 坐标附近的事件 |
| POST | `/api/reports` | 提交用户报告 |
| GET | `/api/brief?date=YYYY-MM-DD` | 每日 AI 情报简报 |
| GET | `/api/geocode?q=` | 正向地理编码 |
| GET | `/api/geocode/reverse?lat=&lng=` | 逆向地理编码 |
| GET | `/api/health` | 健康检查 |
## Socket 事件
| 事件 | 方向 | Payload |
|-------|-----------|---------|
| `alerts:subscribe` | Client → Server | `{ lat, lng, radiusKm }` |
| `incident:new` | Server → Client | `Incident` |
| `incident:updated` | Server → Client | `Incident` |
| `alert:new` | Server → Client | `Alert` |
| `brief:updated` | Server → Client | `DailyBrief` |
## 脚本
| 命令 | 描述 |
|---------|-------------|
| `npm run dev` | 启动后端 + 前端(一条命令) |
| `npm run build` | 生产环境构建 |
| `npm run db:migrate` | 运行数据库迁移 |
## 注意事项
- **抓取间隔**:优先订阅源每 3 分钟一次,完整周期每 20 分钟一次。
- **AI 速率限制**:GPT-4o-mini 约为 12 次请求/分钟。可通过 `AI_MIN_INTERVAL_MS` 配置。
- **无需 Docker**:通过 Homebrew 安装 PostgreSQL,所有内容均在本地原生运行。
标签:AI事件分析, GNU通用公共许可证, HTTP/HTTPS抓包, MITM代理, Node.js, React, Syscalls, 地理空间可视化, 威胁情报, 安全情报平台, 实时处理, 开发者工具, 态势感知, 数据抓取与聚合, 测试用例, 自动化攻击