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, 地理空间可视化, 威胁情报, 安全情报平台, 实时处理, 开发者工具, 态势感知, 数据抓取与聚合, 测试用例, 自动化攻击