可分段編排的多來源資訊篩選系統。
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 都被做成可重入階段。
標準流程是抓取、去重、打分、補全、生成與分發。
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。
docker compose run --rm horizon。定時化可以直接參考 repo 的 .github/workflows/daily-summary.yml 與 deploy-docs.yml,把生成的 Markdown 發布到 GitHub Pages。
每個處理層均可獨立替換、觀察與重跑。
多來源抓取器
RSS/HN/Reddit/Telegram/Twitter/GitHub/OpenBB/OSSInsight 都包成 scraper,輸出統一 ContentItem。新增來源時先看 src/scrapers/base.py 與現有測試。
JSON 設定即個人品味
data/config.json 控制來源、模型、語言、閾值與分發方式。任意字串值可用 ${VAR_NAME} 引用環境變數,適合放私有 feed 或 webhook。
多模型 Provider
README 與 docs 列出 Claude、OpenAI、Azure OpenAI、Gemini、DeepSeek、豆包、MiniMax、Ollama 與 OpenAI-compatible API。可設 throttle 與 concurrency。
0-10 分的閱讀門檻
先讓 AI 對候選內容評分,再以 ai_score_threshold 篩選。這比「全部摘要」更接近人工編輯台:重點是省掉不值得看的條目。
背景與社群討論
高分新聞會補充背景資訊,並可整理 Hacker News、Reddit、Twitter/X 這類社群討論,讓日報不是只有標題摘要。
Markdown 是中心格式
日報先落在 data/summaries/,再複製到 docs/_posts 供 GitHub Pages 使用,也能走 Email、Webhook 或 MCP artifact。
Agent 可操作的階段工具
horizon-mcp 提供 validate、fetch、score、filter、enrich、summary、run_pipeline、list_runs 等工具,讓 AI 助手能分段調用新聞流程。
測試覆蓋重點模組
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_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,最後只重跑摘要。
新聞自動化最容易失控的地方不是程式, 是來源與判斷標準。
- 不要把 AI 分數當真相。 它是排序工具,不是事實查核。高分內容仍需要保留來源連結與人工判斷。
- 保護 API keys 與私有 feed。 使用
.env與${VAR_NAME}引用敏感值,不要把私有 RSS、Webhook URL 或模型 key commit 到 repo。 - 注意平台條款。 Reddit、Twitter/X、Telegram 與金融資料源都有各自的使用限制;團隊部署前要確認抓取頻率與分發方式。
- 先建立你的 editorial rubric。 如果沒有明確偏好,Horizon 只會把大眾熱度包裝得更漂亮。先定義「什麼值得你看」。
- GitHub Actions 適合公開日報, 不一定適合私有情報。 內部競品、客戶、投資或安全資訊應放在私有部署與受控分發渠道。
把 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 流程。