可分段編排的多來源資訊篩選系統。
Horizon 把「資訊來源、重要性判斷、背景補全、摘要輸出」拆成一條明確 pipeline。使用者保留自己的來源設定,AI 負責初篩,只有通過分數閾值的條目才進入後續摘要流程。
GitHub metadata 顯示這個 repo 以 Python 為主,採 MIT 授權,首頁指向 horizon1123.top,主題包含 news、llm、mcp、webhook、feishu-bot 與 openclaw。中文 README 把它定位為「你專屬的 AI 新聞雷達」,而不是單純的摘要工具。
這份手冊建議用兩個角度看 Horizon:第一,它是個人或團隊的每日情報中台;第二,它是可以被 Codex、Claude Code、Cursor 或其他 MCP client 呼叫的 staged news pipeline。後者是它最值得拆解的地方,因為 fetch、score、filter、enrich、summarize 都被做成可重入階段。
標準流程是抓取、去重、打分、補全、生成與分發。
Sources
Fetch
Deduplicate
AI Score
Enrich
Summaries
Distribution
src/orchestrator.py 是主要協調器。它先根據 time_window_hours 或 CLI 的 --hours 決定時間窗,再並發呼叫各種 scraper。接著會合併跨來源重複 URL,送入 AI analyzer,依 ai_score_threshold 篩選重要條目,做主題層面的語義去重,必要時展開 Twitter 討論,最後補背景並針對每個設定語言生成日報。
資料模型集中在 src/models.py。每一筆新聞都會被統一成 ContentItem,包含來源類型、標題、URL、作者、發布時間、metadata,以及 AI 後處理欄位:分數、理由、摘要與標籤。這個統一模型讓 RSS、HN、Reddit、OpenBB 或 GitHub release 可以進入同一個判斷流程。
| 階段 | 對應模組 | 判讀重點 |
|---|---|---|
| Fetch | src/scrapers/* | 來源插件化,支援 GitHub、HN、RSS、Reddit、Telegram、Twitter、OpenBB、OSSInsight。 |
| Analyze | src/ai/analyzer.py | 使用可選 provider 對內容打 0-10 分,搭配理由、摘要與 tags。 |
| Enrich | src/ai/enricher.py、src/search.py | 對高分內容補陌生概念、專案、公司或技術背景。 |
| Summarize | src/ai/summarizer.py | 依語言產出 Markdown 日報,並複製到 GitHub Pages posts。 |
| Deliver | src/services/email.py、webhook.py | 支援 SMTP/IMAP 訂閱、Feishu/DingTalk/Slack/Discord/自訂 webhook。 |
本地用 uv, 自動化用 Docker 或 GitHub Actions。
pyproject.toml 顯示 Horizon 需要 Python >=3.11,核心依賴包含 httpx、feedparser、anthropic、openai、google-genai、pydantic、ddgs、beautifulsoup4、markdown 與 mcp。開發依賴在 dev extra,金融新聞源 OpenBB 則在 openbb extra。
# 本地安裝
git clone https://github.com/Thysrael/Horizon.git
cd Horizon
uv sync
# 開發測試依賴
uv sync --extra dev
# OpenBB 金融新聞源
uv sync --extra openbb# 建立環境與來源設定
cp .env.example .env
cp data/config.example.json data/config.json
# 互動式來源設定向導
uv run horizon-wizard
# 執行預設 24 小時新聞雷達
uv run horizon
uv run horizon --hours 48每個處理層均可獨立替換、觀察與重跑。
Source Graph
多來源抓取器
RSS/HN/Reddit/Telegram/Twitter/GitHub/OpenBB/OSSInsight 都包成 scraper,輸出統一 ContentItem。新增來源時先看 src/scrapers/base.py 與現有測試。
Preference Layer
JSON 設定即個人品味
data/config.json 控制來源、模型、語言、閾值與分發方式。任意字串值可用 ${VAR_NAME} 引用環境變數,適合放私有 feed 或 webhook。
AI Gateway
多模型 Provider
README 與 docs 列出 Claude、OpenAI、Azure OpenAI、Gemini、DeepSeek、豆包、MiniMax、Ollama 與 OpenAI-compatible API。可設 throttle 與 concurrency。
Filtering
0-10 分的閱讀門檻
先讓 AI 對候選內容評分,再以 ai_score_threshold 篩選。這比「全部摘要」更接近人工編輯台:重點是省掉不值得看的條目。
Enrichment
背景與社群討論
高分新聞會補充背景資訊,並可整理 Hacker News、Reddit、Twitter/X 這類社群討論,讓日報不是只有標題摘要。
Output
Markdown 是中心格式
日報先落在 data/summaries/,再複製到 docs/_posts 供 GitHub Pages 使用,也能走 Email、Webhook 或 MCP artifact。
MCP
Agent 可操作的階段工具
horizon-mcp 提供 validate、fetch、score、filter、enrich、summary、run_pipeline、list_runs 等工具,讓 AI 助手能分段調用新聞流程。
Tests
測試覆蓋重點模組
tests/ 包含 analyzer、summarizer、RSS、Reddit、Twitter、OpenBB、Email、Webhook 與 MCP service smoke tests。修改來源或分發層時先跑相關測試。
從少量可信來源開始, 再讓 AI 幫你擴展。
最小可用配置只需要一個 AI provider、一組來源與分數閾值。建議不要一開始就塞滿所有平台;先用 5-15 個高品質 RSS、幾個 GitHub release、少量 subreddit 或 HN top stories,確認日報品質後再擴充。
{
"ai": {
"provider": "openai",
"model": "gpt-4",
"api_key_env": "OPENAI_API_KEY",
"analysis_concurrency": 1,
"enrichment_concurrency": 1
},
"sources": {
"rss": [
{
"name": "Simon Willison",
"url": "https://simonwillison.net/atom/everything/",
"enabled": true,
"category": "ai-tools"
}
],
"hackernews": {
"enabled": true,
"fetch_top_stories": 20,
"min_score": 100
}
},
"filtering": {
"ai_score_threshold": 6.0,
"time_window_hours": 24
}
}| 調校旋鈕 | 建議 | 常見失誤 |
|---|---|---|
ai_score_threshold | 從 6.0 或 7.0 起步,依日報數量調整。 | 閾值太低會變成另一個資訊垃圾桶。 |
time_window_hours | 日報用 24,小週報可拉長到 72 或 168。 | 時間窗過長會讓熱門舊文反覆出現。 |
analysis_concurrency | 付費 API 或自架 endpoint 可提高到 2-4。 | 免費額度或代理服務容易被限流。 |
| 來源清單 | 保留你真的願意閱讀的來源。 | 用數量替代品味,導致 AI 只是在濾雜訊。 |
MCP 讓 Horizon 從排程工具變成可查詢的研究服務。
src/mcp/README.md 明確說明 MCP layer 不重寫商業邏輯,而是重用 Horizon 原本的 fetch、score、filter、enrich、summarize 模組。這是很好的 agent 工程設計:工具層只負責分段入口與 artifacts,核心判斷仍在主程式。
MCP run artifacts 會寫入 data/mcp-runs/<run_id>/,包含 meta.json、raw_items.json、scored_items.json、filtered_items.json、enriched_items.json 與 summary-<lang>.md。這讓你能讓 Codex 先抓取,再人工檢查 scored stage,最後只重跑摘要。
uv sync
uv run horizon-mcp
# MCP tools include:
hz_validate_config
hz_fetch_items
hz_score_items
hz_filter_items
hz_enrich_items
hz_generate_summary
hz_run_pipeline
hz_list_runs
hz_get_run_meta
hz_get_run_stage
hz_get_run_summary
hz_get_metrics新聞自動化最容易失控的地方不是程式, 是來源與判斷標準。
把 Horizon 做成團隊情報系統的五個切入點。
分領域設定檔
為 AI、開源、金融、競品、資安建立不同 config.json,避免一份日報混雜所有任務。
保留 scored artifacts
不要只看最終 summary。定期審核 scored_items,調整來源、prompt、threshold 與模型。
接到內容工作流
Webhook 可推到 Slack/Discord/飛書,再由 Codex 或 Claude 轉成 newsletter、LinkedIn、部落格選題。
用 MCP 做查詢層
讓 agent 讀取某次 run 的 filtered/enriched stage,再回答「本週最值得追的三個 repo 是什麼」。
建立來源貢獻機制
README 已把分享來源導向 horizon1123.top。團隊內也可以建立一個小型 source review 流程。