使用手冊

AI News Radar / Personal Briefing Pipeline

多來源抓取、AI 打分與分發的新聞雷達。

Horizon 繁體中文技術解析:AI 新聞雷達、RSS/Hacker News/Reddit/GitHub/OpenBB 抓取、AI 打分、去重、背景補充、雙語日報、GitHub Pages、Webhook、Email 與 MCP Server。

Horizon 是一個 Python 與 uv 驅動的自架 AI 新聞雷達。它從 RSS、Hacker News、Reddit、Telegram、Twitter/X、GitHub、OpenBB 與 OSSInsight 抓取內容,先做去重與 AI 重要性打分,再補背景、整理社群討論,最後產出中英雙語 Markdown 日報,並能發布到 GitHub Pages、Email、Webhook 或 MCP Server。

Thysrael/Horizon
星標
5.3K
分支
731
授權
—
資料截至
閱讀時間
7 分
更新日期
開啟原始報告
Python Runtime
3.11+
News Source Families
8 src
Agent Tools
12 MCP
Open License
MIT

01Repository Signal

可分段編排的多來源資訊篩選系統。

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 都被做成可重入階段。

02Operating Model

標準流程是抓取、去重、打分、補全、生成與分發。

  1. Sources

  2. Fetch

  3. Deduplicate

  4. AI Score

  5. Enrich

  6. Summaries

  7. 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 可以進入同一個判斷流程。

階段對應模組判讀重點
Fetchsrc/scrapers/*來源插件化,支援 GitHub、HN、RSS、Reddit、Telegram、Twitter、OpenBB、OSSInsight。
Analyzesrc/ai/analyzer.py使用可選 provider 對內容打 0-10 分,搭配理由、摘要與 tags。
Enrichsrc/ai/enricher.py、src/search.py對高分內容補陌生概念、專案、公司或技術背景。
Summarizesrc/ai/summarizer.py依語言產出 Markdown 日報,並複製到 GitHub Pages posts。
Deliversrc/services/email.py、webhook.py支援 SMTP/IMAP 訂閱、Feishu/DingTalk/Slack/Discord/自訂 webhook。

03Install & First Run

本地用 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。

bash
# 本地安裝
git clone https://github.com/Thysrael/Horizon.git
cd Horizon
uv sync

# 開發測試依賴
uv sync --extra dev

# OpenBB 金融新聞源
uv sync --extra openbb
bash
# 建立環境與來源設定
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

04Module Map

每個處理層均可獨立替換、觀察與重跑。

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。修改來源或分發層時先跑相關測試。

05Configuration Pattern

從少量可信來源開始, 再讓 AI 幫你擴展。

最小可用配置只需要一個 AI provider、一組來源與分數閾值。建議不要一開始就塞滿所有平台;先用 5-15 個高品質 RSS、幾個 GitHub release、少量 subreddit 或 HN top stories,確認日報品質後再擴充。

bash
{
  "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 只是在濾雜訊。

06Agent Interface

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,最後只重跑摘要。

bash
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

07Operational Notes

新聞自動化最容易失控的地方不是程式, 是來源與判斷標準。

08Advanced Playbook

把 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 流程。

參考資料