跳到主要内容Horizon AI新闻雷达 · prolist返回项目库
查看仓库原始简介
📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达
来自项目 README项目解读由 AI 根据历史资料整理,尚未经人工复核。仓库资料更新于 2026-09-08,与历史解读分开保留。
项目概览
Horizon 是由开发者 Thysrael 开源的个人新闻雷达系统,定位为"AI 新闻编辑"而非传统 RSS 阅读器。它从 Hacker News、RSS/Atom、Reddit、Telegram、Twitter/X、GitHub 六类信息源并发抓取内容,通过 URL 归一化与标题相似度进行跨平台去重,再调用大语言模型按用户兴趣领域进行 0-10 分评分,仅保留超过阈值的高分新闻。随后自动搜索补充背景知识、收集并摘要社区评论,最终生成中英双语 Markdown 日报,并通过 GitHub Pages、邮件订阅、Webhook 通知及 MCP Server 等多渠道分发。项目使用 Python 编写,支持 Claude、GPT、Gemini、DeepSeek、豆包、MiniMax 等多种模型提供商,可通过 Docker 或 GitHub Actions 部署,并内置交互式配置向导降低使用门槛。
解决什么问题
信息过载时代,技术从业者获取信息面临六大痛点:信息碎片化,好内容分散在 HN、Reddit、Twitter、RSS、Telegram、GitHub 等 6 个以上平台;重复信息多,同一项目在不同平台被反复讨论;信噪比低,大部分内容对个人无价值却需手动逐条判断;缺乏背景上下文,遇到陌生公司、技术或术语需自行搜索;错过社区讨论,只看标题会遗漏评论区精彩见解与纠错;语言壁垒,英文源需翻译而中文源覆盖有限。Horizon 旨在优化"从信息源到有效阅读"的链路,用 AI 完成抓取、去重、评分、丰富、总结的全程自动化。
工作方式
Horizon 核心为线性六阶段处理 Pipeline。阶段一多源抓取:并发从 Hacker News、RSS/Atom、Reddit、Telegram、Twitter/X、GitHub 六类信息源拉取内容,各平台对应独立 Scraper 模块,统一输出标准化 NewsItem 结构。阶段二新闻去重:通过 URL 归一化(去除追踪参数、统一大小写)与标题相似度(Jaccard/Embedding 余弦)判断同一事件,仅在默认 24 小时时间窗口内合并,保留多来源标记。阶段三 AI 评分与过滤:使用配置的 LLM(支持 Claude/GPT/Gemini/DeepSeek/豆包/MiniMax/OpenClaw 等)按用户兴趣领域从"读者是否关心"角度打分,范围 0-10,仅保留超过默认 6.0 阈值的内容。阶段四内容丰富:对陌生概念调用搜索 API 补充背景解释,收集 HN、Reddit、Twitter 社区评论并用 AI 生成摘要。阶段五总结生成:输出结构化 Markdown 日报,含标题、来源标签、评分、摘要、背景知识、评论摘要、原始链接,按评分排序,支持中英双语。阶段六分发:推送至 GitHub Pages、邮件订阅(SMTP/IMAP)、Webhook(飞书/钉钉/Slack/Discord)、MCP Server 及本地文件。项目使用 Python 编写,包管理推荐 uv,支持 Docker 部署与 GitHub Actions 定时自动化。
核心能力
- 六类信息源并发抓取,统一标准化处理
- 跨平台智能去重,URL 归一化加标题相似度
- AI 评分 0-10,按用户兴趣领域个性化打分
- 自动搜索补充背景知识,让新闻"自解释"
- 社区评论自动收集与 AI 摘要
- 中英双语日报同时生成
- 多渠道分发:GitHub Pages、邮件、Webhook、MCP
- 支持 7+ 模型提供商,不绑定单一厂商
- 内置 MCP Server,可被 AI 助手直接调用
- 交互式配置向导,零配置门槛快速上手
- JSON 配置驱动,信息源、阈值、模型、输出全部可控
- 完全开源自托管,数据不经过第三方
使用前需要了解
- AI 整理 · 本地测试,未经人工复核;依据历史报告节选,不代表当前产品状态。
- [已移除敏感配置]
截图
为什么需要 Horizon?
好新闻分散在各处,坏信息却源源不断。Horizon 为你先完成第一轮筛选:从 Hacker News、Reddit、Telegram、RSS、Twitter/X、GitHub 和 OpenBB 抓取内容,合并重复新闻,用 AI 打分过滤,并为重要内容补充背景解释和社区讨论。
但 Horizon 不只是又一个摘要工具。AI 很擅长降低噪声,但新闻仍然需要人的品味:你信任哪些信息源,哪些评论改变了你对事件的理解,哪些小众来源值得被更多人看见。Horizon 通过可定制的信息源、处理配置文件、模型、语言、分发方式、评论摘要和社区信息源官网,把这层“人味”保留下来。
功能特性
- 📡 关注你的信息源 — 将 Hacker News、RSS、Reddit、Telegram、Twitter/X、GitHub Release / 用户动态,以及 OpenBB 金融新闻观察列表纳入同一条 pipeline
- 🤖 把噪声变成阅读清单 — 使用稳定的处理配置文件分析内容,并应用你自己的筛选阈值
- 🔗 合并重复新闻 — 在生成日报前自动合并来自不同平台的相同故事
- 🔍 补全背景知识 — 为陌生概念、公司、项目和技术术语补充网络搜索得到的背景解释
- 💬 读到社区声音 — 收集并总结 Hacker News、Reddit 等来源的评论讨论
- 🌐 生成双语日报 — 基于同一组信息源生成英文和中文日报
- 📝 发布日报站点 — 将生成的 Markdown 发布为 GitHub Pages 静态日报站点
- 📧 邮件分发 — 运行自托管 SMTP/IMAP 邮件列表,自动处理订阅与退订
- 🔔 推送到聊天和自动化工具 — 将模板化结果发送到飞书、钉钉、Slack、Discord 或自定义 Webhook
- 🧙 从兴趣开始配置 — 通过交互式向导根据你的兴趣生成个性化信息源配置
- ⚙️ 调校你的新闻雷达 — 定制信息源、处理配置文件、模型、语言和分发方式
工作原理
%%{init: {
"theme": "base",
"themeVariables": {
"fontFamily": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif",
"fontSize": "18px",
"primaryTextColor": "#2d2a3e",
"primaryBorderColor": "#e0dbd3",
"lineColor": "#7c7891",
"tertiaryColor": "#faf8f5",
"clusterBkg": "#f3f0eb",
"clusterBorder": "#e0dbd3"
}
}}%%
flowchart LR
classDef config fill:#fbbf24,stroke:#d4a017,color:#2d2a3e,stroke-width:1.5px;
classDef source fill:#ede7fb,stroke:#6d4aaa,color:#2d2a3e,stroke-width:1.5px;
classDef process fill:#ffe8db,stroke:#e0652e,color:#2d2a3e,stroke-width:1.5px;
classDef output fill:#f9d7e5,stroke:#be185d,color:#2d2a3e,stroke-width:1.5px;
config["⚙️ 配置<br/>信息源、配置文件、模型、输出方式"]
subgraph sources["已配置的信息源"]
rss["📡 RSS"]
hn["📰 Hacker News"]
reddit["💬 Reddit"]
telegram["✈️ Telegram"]
twitter["🐦 Twitter / X"]
github["🐙 GitHub"]
openbb["💹 OpenBB"]
end
fetch["📥 抓取"]
dedup["🧹 新闻去重"]
score["🤖 AI 打分与过滤"]
enrich["🔎 内容丰富"]
summary["📝 总结生成"]
subgraph outputs["输出形式"]
direction TB
site["🌐 Pages"]
email["📧 邮件"]
webhook["🔔 Webhook"]
mcp["🧩 MCP"]
end
config --> fetch
rss --> fetch
hn --> fetch
reddit --> fetch
telegram --> fetch
twitter --> fetch
github --> fetch
openbb --> fetch
fetch --> dedup --> score --> enrich --> summary
config --> score
config --> summary
config --> outputs
summary --> site
summary --> email
summary --> webhook
summary --> mcp
class config config
class rss,hn,reddit,telegram,twitter,github,openbb source
class fetch,dedup,score,enrich,summary process
class site,email,webhook,mcp output
- 定义 — 配置信息源、处理配置文件、模型、语言和分发方式。
- 抓取 — 并发拉取所有已配置信息源的最新内容。
- 去重 — 合并来自不同平台、指向同一故事或 URL 的内容。
- 分析与过滤 — 选择处理配置文件,按其提示词分析内容并应用用户配置的阈值。
- 丰富 — 生成配置文件定义的内容区块,每个区块只能调用已声明的工具。
- 总结 — 将本地化标题、导语、章节和引用来源渲染为 Markdown 日报。
- 分发 — 将结果发布到 GitHub Pages、邮件、飞书等 webhook、MCP 或本地文件。
赞助
Horizon 是一个业余时间维护的开源项目。如果你愿意支持这个项目,或希望出现在这里,欢迎创建一个 Issue 或发邮件联系我。
快速开始
1. 安装
方式 A:本地安装
git clone https://github.com/Thysrael/Horizon.git
cd horizon
# 使用 uv 安装(推荐)
uv sync
# 需要测试/开发依赖时
uv sync --extra dev
# 或使用 pip
pip install -e .
当前 dev 在 pyproject.toml 中定义为 optional extra,因此安装 pytest 等开发依赖时应使用 uv sync --extra dev。
如果你要启用可选的 OpenBB 金融新闻源,还需要安装对应 extra:
如果 openbb 在你的机器上会拉到缺少 wheel 的依赖,建议改用只安装二进制包:
uv pip install --only-binary=:all: openbb openbb-benzinga
方式 B:Docker
git clone https://github.com/Thysrael/Horizon.git
cd horizon
# 可选:首次运行前构建逗号分隔的 extras
docker compose build --build-arg EXTRAS=trafilatura horizon
多个 extra 可写为 EXTRAS=trafilatura,openbb。twitter extra 还需要 Playwright 浏览器及系统依赖,当前 Dockerfile 不会安装这些组件。
2. 配置
向导会询问你的兴趣(如"LLM 推理"、"嵌入式"、"web 安全"),自动推荐并生成 data/config.json,还可选让 AI 补充推荐小众源。若你想分享信息源,请前往 horizon1123.top。CLI 选项见交互式向导。
cp .env.example .env # 添加 API 密钥
cp data/config.example.json data/config.json # 自定义信息源
{
"ai": {
"provider": "openai",
"model": "gpt-4",
"api_key_env": "OPENAI_API_KEY"
},
"sources": {
"rss": [
{
"name": "Simon Willison",
"url": "https://simonwillison.net/atom/everything/",
"profile": "tech-news"
}
]
},
"processing": {
"profiles_dir": "profiles",
"default_profile": "tech-news",
"profile_settings": {
"tech-news": {
"threshold": 7.0,
"topic_dedup": true
}
}
}
}
信息源显式指定 profile 时会直接使用该配置文件;省略该字段或设为
"auto" 时,AI 会在可用配置文件中自动匹配。结构和行为详见
处理配置文件。筛选阈值和主题去重等个人偏好应配置在
processing.profile_settings,而不是写入处理配置文件。
可以限制日报总条数,并避免单一类别占据过多内容。类别来自
sources.rss[].category 等信息源配置。
{
"digest": {
"max_items": 20,
"category_groups": {
"ai": {
"limit": 5,
"categories": ["ai-news", "ai-tools", "machine-learning"]
},
"finance": {
"limit": 5,
"categories": ["finance", "business", "equities"]
}
},
"default_group": "other",
"default_group_limit": 3
}
}
分组限额在配置文件筛选之后、内容补充之前执行。未配置
category_groups 和 max_items 时,不应用均衡日报限额。
data/config.json 里的任意字符串值都可以通过 ${VAR_NAME} 引用环境变量。这适合用于 ai.base_url、私有 RSS 链接、Webhook 地址或自定义请求头模板等字段。
3. 运行
docker compose run --rm horizon [OPTIONS]
--data-dir 会更改状态目录,包括日报、订阅者文件和默认配置位置;--config 只更改配置文件。生成的日报将保存在 data/summaries/ 目录中(如设置了 --data-dir,则保存在 <data-dir>/summaries/)。两处位置都要修改,或需要初始化自定义配置位置时,请查看配置路径。
4. 自动化(可选)
支持的信息源
日报可以去哪里
Horizon 支持通过多种方式发布和分发生成的日报:
文档
项目状态
Horizon 已经支持完整的日报流程:多源抓取、基于配置文件的分析与内容丰富、去重、评论摘要、双语生成、GitHub Pages 发布、邮件分发、Webhook 推送、Docker 部署、MCP 集成和配置向导。
- 更多信息源类型,例如 Discord
- 在 GitHub 上发布 Release
- 发布到 PyPI,支持通过
pip install 安装
贡献
欢迎贡献!请随时提交 Issue 或 Pull Request。
分享信息源
欢迎提交:你所在领域里优质的小众 RSS 发现、活跃 subreddit 的趋势、值得关注的 GitHub 动态,或 Telegram 频道精选内容。
鸣谢
许可证
09.08