开源 AI 新闻情报与 OSINT 监控平台
多语言新闻与社媒采集 → 信源健康 → canonical event graph → 专业研究工作流
快速开始 · 为什么需要 · 核心能力 · 系统架构 · 典型使用场景 · 路线图 · 参与贡献
News Sentry 是一个 local-first 的开源系统,用于持续 AI 新闻情报、OSINT 监控平台 和专业研究工作流。
它持续采集多语言新闻、RSS、API、社媒和公共网页信源,并帮助研究者把碎片化报道整理为结构化事件、信源健康状态、告警、Markdown 简报和 canonical event graph。
它不是普通 RSS reader,也不是一次性爬虫脚本,而是面向长期运行和人工复核的新闻情报基础设施。
大多数监控工具止步于收集链接。News Sentry 关注完整情报闭环:
采集 → 过滤 → 研判 → 输出 → 复核 → canonical graph → research artifact
关键区别是:一篇报道只是一次 event mention,不是事实本身。多家媒体、多语言、多平台报道可以归并为 canonical event,而人在回路的复核、标注、合并、拆分和研究笔记会保存为 research artifacts,不会静默污染事实层。
| 能力 | 说明 |
|---|---|
| 多语言新闻监控 | 已配置意大利、日本、德国、法国和英文涉华报道 target |
| RSS/API/OpenCLI 采集 | 采集阶段零 token,支持 feeds、API、网站和可选工具适配 |
| 信源健康 | 跟踪信源可用性、运行诊断、陈旧 feed 和生命周期 |
| AI 研判 | 规则优先,AI 辅助新闻价值、涉华相关度、情绪和置信度评分 |
| canonical event graph | 区分现实事件、报道 mention、关系、分类和实体 |
| 专业研究工作流 | 复核队列、人工标注、merge/split 决策和 research artifacts |
| 本地优先部署 | 支持 CLI、FastAPI Web UI、桌面包装、Docker 和未来云端 worker |
| 人在回路 | AI 辅助筛选和分析,关键研究判断保留可审计人工介入 |
# 1. 克隆
git clone https://github.com/XucroYuri/NewsSentry.git
cd NewsSentry
# 2. 安装
bash install.sh --dev
# 3. 配置 API Key(至少一个,用于 AI 研判)
cp .env.example .env
# 编辑 .env 填入 OPENROUTER_API_KEY
# 4. 验证配置
source .venv/bin/activate
make dry-run
# 5. 运行全链路
make run-all首次运行预计 1-2 分钟,包含:采集意大利 19+ RSS 源 → 过滤 100+ 关键词 → AI 研判 → 输出 Markdown
| 依赖 | 最低版本 | 用途 |
|---|---|---|
| Python | 3.11+ | 运行时 |
| pip | 随 Python | 包管理 |
| git | 任意 | 版本控制 |
零原生依赖 — 所有 Python 包均为纯 Python wheel,无需 C 编译工具链。
bash install.sh --dev # 开发模式(含 pytest, ruff, mypy)
bash install.sh # 生产模式
bash install.sh --check # 安装 + 运行测试python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]" # 开发
pip install -e . # 生产
pip install -e ".[proxy]" # SOCKS5 代理支持
pip install -e ".[api]" # FastAPI REST API 网关┌───────────────────────────────────────────────────────────────┐
│ CLI / API 入口 │
│ python -m news_sentry.cli FastAPI /api/v1 │
└─────────────────────┬─────────────────────────┬───────────────┘
│ │
┌─────────────────────▼─────────────────────────▼───────────────┐
│ bounded_run 运行时 │
│ ConfigLoader + RunLog + Memory │
└─────────┬───────────────────────────────────────┬─────────────┘
│ │
┌────────▼────────┐ ┌─────────▼──────────┐
│ COLLECT 采集 │ │ FILTER 过滤 │
│ RSS · API · KOL │──────────────────→ │ 100+ 关键词评分 │
│ 零 Token 消耗 │ │ L0-L3 四层分类 │
└─────────────────┘ └─────────┬──────────┘
│
┌─────────▼──────────┐
│ JUDGE 研判 │
│ ConfidenceRouter │
│ 规则 → AI 升级路由 │
└─────────┬──────────┘
│
┌───────────────────────┐ ┌─────────▼──────────┐
│ 告警推送 │◀─────────────│ OUTPUT 输出 │
│ 飞书 · 邮件 · TG │ │ Markdown 报告生成 │
└───────────────────────┘ └─────────┬──────────┘
│
┌──────────▼─────────┐
│ FEEDBACK 反馈 │
│ 人工标注 → 规则优化 │
└────────────────────┘
| 阶段 | 输入 | 输出 | 说明 |
|---|---|---|---|
| Collect | RSS/API/OpenCLI 配置 | raw/ |
从多目标信源矩阵采集,零 Token |
| Filter | raw/ |
evaluated/ + archive/ |
关键词评分 + L0-L3 分类 + 去重 |
| Judge | evaluated/ |
evaluated/ |
AI 新闻价值评分 + 涉华议题关联度 |
| Output | evaluated/ |
drafts/ |
Markdown 报告 + 多通道告警 |
data/{target}/
├── raw/ # 采集事件(Markdown + YAML frontmatter)
├── evaluated/ # 过滤 + 研判后的事件
├── drafts/ # 输出报告(v1 不自动发布)
├── reviewed/ # 人工审阅候选
├── published/ # 已批准归档
├── archive/ # 拒绝 / 重复 / 低价值
├── memory/ # 已知 ID / 信源健康 / 游标 / 规则优化状态
└── logs/ # 运行日志 + 心跳
News Sentry 不是一个完全自包含的孤立项目,部分能力依赖外部项目协作实现:
┌───────────────────────────────────────────────────────────────────┐
│ News Sentry │
│ (核心管道 + 配置 + 数据模型) │
├───────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Hermes Agent │ │ OpenClaw │ │ OpenCLI │ │
│ │ 运行时载体 │ │ 运行时载体 │ │ CLI 工具桥接 │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
│ │ │ │ │
│ Cron 调度 Skill 注册 社媒/网站采集 │
│ 心跳监控 生态兼容 无 RSS 的信源 │
│ 生命周期管理 运行状态查询 浏览器 Bridge │
│ │
└───────────────────────────────────────────────────────────────────┘
| 项目 | 角色 | 必需? | 说明 |
|---|---|---|---|
| OpenCLI | CLI 工具桥接 | 可选 | 将网站/社媒转为确定性 CLI 命令,用于采集无 RSS 的信源(Twitter、Reddit、政府网站等)。安装:npm install -g @jackwener/opencli |
| Hermes Agent | 运行时载体 | 可选 | 提供 Cron 调度、心跳监控、生命周期管理。生产环境推荐,开发可用独立 CLI 替代 |
| OpenClaw | 运行时载体 | 可选 | 另一种 Skill 运行时,提供 Skill 注册和生态兼容。当前为 stub 适配 |
关系原则(ADR-0008):
- 安装不内嵌 — 外部项目通过系统包管理器安装,不 fork / submodule / vendor
- 包装不重写 — 通过
ToolManifest包装调用外部工具,不复制其逻辑 - 降级可运行 — 无外部项目时仍可独立运行(仅 RSS/API 采集 + CLI 模式)
| Target | 语言对 | 信源数 | 关键词规则 | 说明 |
|---|---|---|---|---|
| 🇮🇹 italy | it→zh | 19+ | 100+ | 意大利全维度新闻 |
| 🇬🇧 china-watch-en | en→zh | 5 | 30+ | 英文主流媒体(SCMP/Reuters/BBC/Guardian/NYT)涉华报道 |
| 🇯🇵 japan | ja→zh | 19 | 59 | 日本全维度新闻 |
| 🇩🇪 germany | de→zh | 22 | 46 | 德国全维度新闻 |
| 🇫🇷 france | fr→zh | 21 | 45 | 法国全维度新闻 |
添加新国家(零代码):
cp config/targets/_template.yaml config/targets/{country}.yaml
mkdir -p config/sources/{country}/rss config/filters/{country}
make run TARGET={country}# 单阶段运行
python -m news_sentry.cli run --target italy --stage collect # 仅采集
python -m news_sentry.cli run --target italy --stage filter # 仅过滤
python -m news_sentry.cli run --target italy --stage judge # 仅研判
python -m news_sentry.cli run --target italy --stage output # 仅输出
# 全链路
python -m news_sentry.cli run --target italy --stage all
# 其他 target
python -m news_sentry.cli run --target japan --stage all
python -m news_sentry.cli run --target germany --stage all
# 干运行(验证配置,不写文件)
python -m news_sentry.cli run --target italy --stage all --dry-run
# 生产 profile
python -m news_sentry.cli run --target italy --stage all --profile cloud-vps
# 后台常驻服务
news-sentry serve # 默认配置, localhost:8000, 全管道
news-sentry serve --target italy # 单 target
news-sentry serve --stage collect # 仅采集(不研判,零 token)
news-sentry serve --port 8080 --interval 30 # 自定义端口和采集间隔
news-sentry serve --foreground # 前台调试 (Ctrl+C 退出)
news-sentry serve --no-browser # 不自动打开浏览器
news-sentry stop # 停止后台服务
# 系统诊断
python -m news_sentry.cli doctor --target italymake dry-run # 验证配置
make run # 采集
make run-all # 全链路
make check # lint + test
make stats # 查看数据统计
make latest-log # 查看最新运行日志
make doctor # 系统诊断
make help # 查看所有命令| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
OPENROUTER_API_KEY |
AI 增强需要 | — | OpenRouter API Key(默认 Provider) |
OPENROUTER_BASE_URL |
否 | https://openrouter.ai/api/v1 |
OpenRouter/OpenAI-compatible Base URL |
OPENAI_API_KEY |
否 | — | OpenAI API Key(备用) |
ANTHROPIC_API_KEY |
否 | — | Anthropic API Key(备用) |
DEEPSEEK_API_KEY |
否 | — | DeepSeek API Key(历史兼容) |
NEWSSENTRY_API_KEY |
否 | — | API 网关认证 Key |
NEWSSENTRY_PROFILE |
否 | local-workstation |
部署 profile |
HTTPS_PROXY |
否 | — | 代理(如 socks5://127.0.0.1:1080) |
docker build -t news-sentry .
docker run -d \
--name news-sentry \
-e OPENROUTER_API_KEY=$OPENROUTER_API_KEY \
-v /data/news-sentry:/app/data \
-p 8000:8000 \
news-sentrypip install ".[api]"
NEWSSENTRY_API_KEY=your-key \
uvicorn news_sentry.core.api_server:create_app \
--factory --host 0.0.0.0 --port 8000
# 健康检查
curl http://localhost:8000/api/v1/health
# 查询事件
curl -H "X-API-Key: your-key" \
"http://localhost:8000/api/v1/events?target_id=italy&page=1&page_size=20"详细部署指南:docs/deployment-guide.md
sudo cp config/news-sentry.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now news-sentry*/15 * * * * cd /path/to/NewsSentry && .venv/bin/python -m news_sentry.cli run --target italy --stage all --profile cloud-vps| 层 | 技术 | 说明 |
|---|---|---|
| 语言 | Python 3.11+ | strict mypy + ruff |
| 数据模型 | Pydantic v2 | 运行时校验 + 序列化 |
| CLI | Click 8.1+ | news-sentry 命令 |
| HTTP | httpx 0.27+ | SOCKS5 代理支持 |
| RSS | feedparser 6.0+ | RSS/Atom 解析 |
| API | FastAPI 0.110+ | REST API + OpenAPI 3.1 |
| 存储 | Markdown/YAML + SQLite (aiosqlite) | 文件协议 + 异步索引/存储 |
| 配置 | PyYAML 6.0+ | 全 YAML 配置驱动 |
| 缓存 | cachetools | LRU 缓存 + TTL |
| 测试 | pytest 8.0+ | 广泛回归测试集 + 覆盖率跟踪 |
make check # lint + test(提交前必须通过)
make test # 运行测试
make lint # ruff + mypy
make fmt # 自动修复代码风格
make scan-sensitive # 扫描敏感数据
make eval # 运行评估集质量门禁:
ruff check— 0 errorsmypy —strict— 0 issuespytest— 项目测试套件通过
- 新闻编辑部和研究团队持续追踪国家、地区、政策、产业和突发事件。
- OSINT 研究者跨语言验证公开信源、报道来源和事件链。
- 分析师监控公共舆情、地缘风险、产业政策和媒体叙事。
- 运维人员管理多目标信源健康、覆盖缺口和采集诊断。
- 本地研究工作台用于复核、标注、合并、拆分和输出 canonical events 简报。
News Sentry 正在从本地新闻监控引擎演进为全球新闻情报平台。
近期重点:
- 修复 run batch 语义、alert history、source inventory 等可靠性根基;
- 建立 shadow canonical data spine,承载 canonical events、mentions、relations、taxonomy 和 research artifacts;
- 落地专业研究工作流 MVP,支持人工复核、merge/split、标注和简报;
- 规划本地轻客户端,让用户选择关注范围并支持离线研究;
- 长期探索半中心化公共采集节点,提升全球本地信源覆盖。
参考文档:
欢迎贡献:
- 新国家、地区、语言和信源配置;
- 面向公共网站、RSS、API 和社媒来源的 collector adapter;
- canonical event graph、taxonomy、source health 和研究工作流能力;
- 文档、部署指南和可复现监控样例。
贡献前请先阅读 CONTRIBUTING.md、docs/contracts-canonical.md 和 docs/architecture.md。
| 文档 | 说明 |
|---|---|
| 架构总览 | 系统架构、数据流、目录结构 |
| API 文档 | REST API 端点、认证、Webhook |
| 部署指南 | Docker / VPS / API / systemd |
| 安全审计 | OWASP Top 10 审计报告 |
| 外部项目接入策略 | OpenCLI/Hermes/OpenClaw 接入与版本约束 |
| 契约规范 | 字段命名、评分、目录映射 |
News Sentry 采集和处理来自以下外部来源的信息:
| 类别 | 说明 |
|---|---|
| 新闻信源 | RSS/API 采集的内容版权归原始发布方所有,本项目不拥有、不担保其准确性 |
| AI 服务 | OpenAI / Anthropic / DeepSeek 的研判结果由 AI 模型生成,可能存在幻觉或偏差 |
| 社媒平台 | Twitter/Facebook 等平台内容受其各自服务条款约束 |
| 推送渠道 | 飞书/邮件/Telegram 等推送服务由第三方运营,可用性不受本项目控制 |
采集合规设计:News Sentry 的采集以索引链接为核心方式,收录的是新闻的元数据(标题、链接、来源、发布时间)和 AI 研判摘要,而非原始稿件全文拷贝。每条记录均保留完整的原始链接,确保信源透明、可追溯,在最大限度降低侵权风险的同时保留信息价值。
本项目不对外部服务的可用性、准确性和合规性做任何担保。
┌──────────────────────────────────────────────────────────────┐
│ ⚠️ 使用前必须了解 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. 遵守当地法律 │
│ → 各国对新闻采集、数据存储、个人信息处理有不同法规 │
│ → 使用前请确认您的用途符合所在司法管辖区的法律要求 │
│ │
│ 2. 尊重信源权利 │
│ → RSS/API 采集应遵守源站的 robots.txt 和服务条款 │
│ → 不得用于大规模爬取、内容抄袭或侵犯版权 │
│ │
│ 3. AI 研判不可替代人工决策 │
│ → AI 评分仅作参考,重要判断必须由人工复核 │
│ → 不可将 AI 研判结果作为唯一依据做出发布或传播决策 │
│ │
│ 4. 禁止非法用途 │
│ → 不得用于传播虚假信息、操纵舆论、监控个人或非法情报活动 │
│ → 不得用于任何违反人权、隐私权或数据保护法规的目的 │
│ │
└──────────────────────────────────────────────────────────────┘
风险提示:
- 采集的新闻内容可能包含错误或不实信息,本项目不对内容准确性负责
- AI 研判结果可能因模型版本、提示词变化而产生不一致
- 部分信源可能因网站变更而失效,信源健康度会自动标记但无法保证实时性
- 本项目按"原样"提供,不提供任何明示或暗示的保证
Copyright 2026 XucroYuri. Licensed under the Apache License 2.0.