Nek1yZakhar/MIB-OSINT-Aggregator

GitHub: Nek1yZakhar/MIB-OSINT-Aggregator

一个利用混合AI管道从219个信息源中自动采集、过滤并发布国际信息安全新闻摘要的OSINT监控系统。

Stars: 2 | Forks: 0

# 🛡️ OSINT Aggregator MIB [![Python 3.12](https://img.shields.io/badge/Python-3.12-blue.svg)](#) [![Supabase](https://img.shields.io/badge/Supabase-Database-green.svg)](#) [![OpenRouter](https://img.shields.io/badge/OpenRouter-AI-purple.svg)](#) [![Deployed on VPS](https://img.shields.io/badge/Deployed%20on-VPS-orange.svg)](#) ## 📌 目录 - [🛡️ 项目概述](#️-суть-проекта) - [🏗️ 系统流程图](#️-блок-схема-системы) - [🛠️ 技术栈](#️-технологический-стек) - [📊 当前指标](#-текущие-метрики) - [📚 文档导航](#-навигация-по-документации) - [🚀 快速开始](#-быстрый-старт) - [🌐 生产环境](#-production) - [🌐 配套仓库:展示台](#-companion-репозиторий-витрина) - [📁 项目结构](#-структура-проекта) - [⚠️ 已知限制](#️-известные-ограничения) ## 🛡️ 项目概述 自动化收集、AI 过滤并发布国际信息安全的新闻系统:219 个信息源 → 每日 Telegram TOP-50 简报。 ## 🏗️ 系统流程图 ``` [ VPS: Cron 05:00 МСК ] │ ▼ [ src/parser.py ] ──(RPC upsert)──▶ [ Supabase DB ] CascadeExtractor (Playwright + Camoufox + Nodriver) Concurrency: 5 / asyncio │ │ [ src/digest_v2.py ] ◀─(subprocess) E5-large + LLM Scoring qwen3-235b + deepseek Перевод → title_ru │ ▼ [ Telegram Канал ] ``` 详细的架构、LLM pipeline 和数据库结构 → [docs/ARCHITECTURE.md](file:///C:/Users/Admin/Desktop/Parser/docs/ARCHITECTURE.md) ## 🛠️ 技术栈 | 层级 | 技术 | |---|---| | Core | Python 3.12 · Playwright · Camoufox (WAF Bypass) · Nodriver · BeautifulSoup4 · lxml · httpx (支持 HTTP/2) | | Embeddings | `intfloat/multilingual-e5-large` (本地,CPU) | | 编排 | Cron → parser.py → digest_v2.py (subprocess) | | 数据库 | Supabase (PostgreSQL) | | LLM | `qwen/qwen3-235b-a22b` · `deepseek/deepseek-chat-v3.1` (OpenRouter) | | LLM 结构化输出 | `instructor` (Mode.MD_JSON) + Pydantic | | Bot LLM | `llama-3.3-70b-versatile` (Groq) | | 监控 | Telegram Sentinel Bot | ## 📊 当前指标 | 指标 | 数值 | |---|---| | **活跃信息源** | 219 (133 WEB / 86 RSS) | | **数据库中共收录文章** | 3939 | | **简报中发布的文章数** | 307 | | **成功发布的简报期数** | 31 | | **发布的平均重要性 (avg_importance)** | 3.78 | | **因不相关被拒绝** | 2057 | | **URL 黑名单 (rejections)** | 1870 | | **数据库中的解析器 checkpoint** | 15204 | | **解析器会话总启动次数** | 78 | ## 📚 文档导航 | 文档 | 适合人群 | 内容 | |---|---|---| | [README.md](file:///C:/Users/Admin/Desktop/Parser/README.md) | 所有人员 | 概述、技术栈、快速开始 | | [docs/ARCHITECTURE.md](file:///C:/Users/Admin/Desktop/Parser/docs/ARCHITECTURE.md) | 开发人员 | 组件、数据库、LLM pipeline、基础设施 | | [docs/reference/SYSTEM_OVERVIEW.md](file:///C:/Users/Admin/Desktop/Parser/docs/reference/SYSTEM_OVERVIEW.md) | HR / CTO | 面向雇主的项目描述 | ## 🚀 快速开始 ### 1. 环境安装 ``` python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt playwright install chromium python -m camoufox fetch # Скачивание бинарников браузера Camoufox ``` ### 2. 配置设定 基于示例创建 `.env` 文件: ``` cp .env.example .env ``` 填写环境变量: | 变量 | 用途 | |---|---| | `SUPABASE_URL` | Supabase 实例的 URL | | `SUPABASE_SERVICE_ROLE_KEY` | Supabase 服务密钥(解析器/绕过 RLS 必需) | | `OPENROUTER_API_KEY` | 用于 LLM pipeline 的 OpenRouter API 密钥 | | `TELEGRAM_BOT_TOKEN` | 用于发送简报的主 Telegram Bot token | | `TELEGRAM_CHAT_ID` | 用于发布内容的目标 Telegram 频道 ID | | `MONITOR_BOT_TOKEN` | 用于监控告警的 Telegram Bot(独立) | | `MONITOR_CHAT_ID` | 接收 Monitor Bot 告警的 Chat ID | | `CAMOUFOX_ENABLED` | 启用 CamoufoxExtractor 以绕过 Cloudflare/WAF (`true`/`false`) | | `GITHUB_TOKEN` | (可选)加载 GeoIP 时用于绕过 API 限制的 GitHub Token | ### 3. 运行组件 ``` # 新闻采集 (parser) python src/parser.py # Полный боевой прогон python src/parser.py --dry-run --sources js_only # Тест группы источников js_only python src/parser.py --dry-run --sources cloudflare # Тест группы источников cloudflare python src/parser.py --dry-run --sources rss # Тест всех RSS-источников # 摘要生成 (AI 逻辑) python src/digest_v2.py --dry-run # Сухой прогон дайджеста (без записи в БД) python src/digest_v2.py # Боевой прогон дайджеста # 反馈 / 交互式 Telegram bot python src/hybrid_polling.py # Запуск бота # 回顾分析 / 数据恢复 python scripts/retro_verify.py --date 2026-06-12 --dry-run # Сухой ретро-прогон за день python scripts/retro_verify.py --date 2026-06-12 # Боевой ретро-прогон за день python scripts/retro_verify.py --all # Прогон всей истории ``` ### 4. 运行测试 ``` python -m unittest tests/test_similarity.py python tests/test_clustering_scoring.py python tests/test_title_ru.py # Smoke-тест перевода заголовков ``` ## 🌐 生产环境 | 参数 | 数值 | |---|---| | Host | `your-vps-ip` | | venv | `/root/Parser/venv` (Python 3.12) | | Bot (PM2) | `pm2 status hybrid_polling` | | Bot 日志 | `pm2 logs hybrid_polling` | | 简报日志 | `pm2 logs digest-v2-dryrun` | | Cron | `crontab -l` (05:00 MSK — 解析器;周日 03:00 MSK — 清理 Docker) | | SSH 访问 | MCP server `vps-ssh` | | VPS 剩余磁盘 | ~10 GB 可用(共 47 GB,已用 79%) | | VPS 内存 (RAM) | 3 GB RAM(总计 2.9 GB,~2.4 GB 可用)+ 2 GB Swap(1.9 GB 可用) | | VPS 处理器 | 1 vCPU | ### 部署 部署通过 GitHub Actions (`.github/workflows/deploy.yml`) 完全自动化。 流程:本地 `git push origin main` → GitHub Actions 通过 SCP 将文件复制到 VPS,从 `ENV_FILE` secret 更新 `.env`,重启 PM2 并运行 Docker 镜像构建。 ### 安全性 - 所有服务器进程均使用 `SUPABASE_SERVICE_ROLE_KEY`(绕过 RLS)。 - 生产环境中不使用 `anon` 密钥。 - 对所有系统表(`parser_checkpoint`, `parser_runs`, `rejected_urls`, `analytical_drafts`)启用 RLS。 ## 🌐 配套仓库:展示台 公开的展示台(带动画的 SPA 站点)已移至单独的仓库 [mib-osint](https://github.com/Nek1yZakhar/mib-osint)。 用于向用户展示简报,支持归档、动态渲染和缓存。 ## 📁 项目结构 ``` ├── src/ │ ├── parser.py # Единый движок парсинга (CascadeExtractor L0-L4) │ ├── digest_v2.py # ✅ АКТИВНЫЙ генератор дайджестов (E5 + LLM hybrid) │ ├── digest.py # Устаревший v1 (депрецирован, перемещен в backups в git) │ └── hybrid_polling.py # Telegram-бот (Deep Links + Groq LLM) ├── docs/ │ ├── ARCHITECTURE.md # Архитектура и потоки данных │ ├── SYSTEM_OVERVIEW.md # Технический обзор МИБ-системы │ └── TECH_ANALYSIS.md # Анализ инженерных решений ├── data/ │ └── mib_anchors.json # Якорные фразы для SIMILARITY FILTER (~35 pos, 10 neg) ├── database/ # SQL-схема базы данных и миграции ├── scripts/ # Вспомогательные утилиты │ ├── dead_sources_audit.json # Аудит 87 мёртвых источников (category, http_status, note) │ ├── recheck_dead_results.json # Сырые результаты VPS-прогона (DEBT-01e) │ ├── migrate_db_v2.py # Скрипт миграции схемы БД │ └── retro_verify.py # Ретроспективный анализ истории (E5 CPU-оптимизированный) ├── tests/ │ ├── test_similarity.py # Unit: якоря, graduated depth, пороги │ ├── test_clustering_scoring.py # Integration: полный пайплайн │ ├── test_parallel.py # Integration: параллельный парсинг │ ├── test_dedup.py # Unit: SimHash-дедупликация │ └── test_title_ru.py # Smoke: перевод заголовков через LLM (BUG-01) ├── backups/ # Архивы устаревших скриптов и шаблонов ├── .env.example └── .github/workflows/deploy.yml ``` ## ⚠️ 已知限制 | 限制 | 状态 | 描述 / 临时解决方案 | |---|---|---| | VPS RAM 2GB — 浏览器 | 🟡 活跃 | 限制抓取并发 (`concurrency: 5`),在 Supabase 中记录 checkpoint,回收浏览器进程。 | | 语言障碍:仅限 RU/EN | 🟡 设计使然 | CJK 过滤器剔除非拉丁字符(阿拉伯语、中文等);AI 将原始标题翻译为俄语 (`title_ru`)。 | 已解决问题和事件的完整记录 → [docs/reference/INCIDENTS_LOG.md](file:///C:/Users/Admin/Desktop/Parser/docs/reference/INCIDENTS_LOG.md)
标签:AI数据处理, ESC4, GitHub, OSINT, 威胁情报, 实时处理, 开发者工具, 数据泄露, 数据聚合, 测试用例, 特征检测, 网络安全监控, 自动化信息收集, 运行时操纵, 驱动开发