AI & Tools #AI Tools #AI Agents #Open Source #Automation #CLI

Horizon 實測:讓 Codex 自動整理每日 AI 新聞

我把 Horizon 接進部落格新聞流程,讓它負責抓資料來源,再交給 Codex 寫成每日 AI 新聞摘要。這篇記錄安裝方式、基本使用流程,以及我實際測完後的想法。

5 min read/ Medium

前言

我最近在做部落格的 AI 新聞頁,想試著讓 Codex 每天早上自動整理一篇 AI 新聞摘要。

一開始我以為最麻煩的是寫文章,後來才發現真正花時間的是「抓來源」。AI 新聞來源太散了,有官方 blog、GitHub Changelog、Hacker News、研究者個人 blog,也有一些開源專案 release。手動看一天還可以,真的要每天固定做就很煩。

所以我測了一下 Horizon。它可以把多個來源抓回來,再交給 AI 做整理。我這次的用法比較簡單:Horizon 負責抓資料,Codex 負責把資料整理成部落格裡的一篇每日新聞。

Horizon 官方網站截圖

Horizon 官方網站畫面,定位比較像本地新聞來源聚合工具


Horizon 是什麼

Horizon 是一個開源的新聞聚合工具,主要用途是從不同來源抓最新內容,再透過 AI 做摘要、評分和整理。

它支援的來源不少,我這次比較在意的是:

  • RSS
  • Hacker News
  • GitHub Changelog
  • Hugging Face Blog
  • Simon Willison Blog
  • Latent Space

我沒有把它當成完整的新聞編輯器使用。對我來說,它比較像「新聞雷達」:先把可能有價值的資料掃回來,後面要不要寫、怎麼寫、怎麼放進部落格,還是交給 Codex 處理。


安裝方式

官方 README 裡建議的本地安裝方式是先 clone repo,再用 uv sync 安裝依賴。這是最標準、也最適合先測功能的方式。

bash
git clone https://github.com/Thysrael/Horizon.git
cd Horizon

# 官方推薦用 uv 安裝
uv sync

# 如果要跑測試或開發相關工具,再裝 dev extra
uv sync --extra dev

# 或者用 pip editable install
pip install -e .

如果要用 Docker,官方也有提供 Docker Compose 的路線:

bash
git clone https://github.com/Thysrael/Horizon.git
cd Horizon

cp .env.example .env
cp data/config.example.json data/config.json

docker compose run --rm horizon
docker compose run --rm horizon --hours 48

我自己放到部落格裡時,做法有一點不同。我把 Horizon 放在 blog repo 底下的 .local/horizon,但沒有讓它進 git。因為 Horizon 是外部工具,裡面可能會有 config、cache 或執行資料,不適合跟部落格一起推上去。

我實際使用的安裝流程是這樣:

bash
mkdir -p .local
git clone https://github.com/Thysrael/Horizon.git .local/horizon
cd .local/horizon
uv sync
uv run horizon --help

如果是在既有 repo 裡測,我會順手把 .local 加到本機的 git exclude:

bash
echo ".local/" >> .git/info/exclude

這樣 Horizon 可以留在本機工作區,Codex 也能在需要時呼叫它抓資料,但不會污染要 push 的 blog 專案。


基本設定

Horizon 的設定檔在 data/config.json。第一次可以先從範例複製:

bash
cd .local/horizon
cp data/config.example.json data/config.json

我測的時候沒有一次塞很多來源,而是先放幾個穩定的 RSS 和 Hacker News。設定大概會長這樣:

data/config.json
{
  "sources": {
    "rss": {
      "enabled": true,
      "feeds": [
        {
          "name": "OpenAI News",
          "url": "https://openai.com/news/rss.xml",
          "category": "ai"
        },
        {
          "name": "GitHub Changelog",
          "url": "https://github.blog/changelog/feed/",
          "category": "devtools"
        },
        {
          "name": "Hugging Face Blog",
          "url": "https://huggingface.co/blog/feed.xml",
          "category": "ai"
        }
      ]
    },
    "hackernews": {
      "enabled": true,
      "max_items": 30
    }
  }
}

我自己踩到的小坑是:不是每個看起來像 RSS 的網址都真的能用。有些來源會 404,有些只有標題沒有內容。我的做法是先用少量穩定來源跑通,不要一開始就追求很多。


我實際怎麼用

完整的 Horizon pipeline 可以接 AI provider,讓它自己做摘要和評分。但我這次沒有這樣用,因為我不想另外準備 API key。

我現在的流程是:

  1. Horizon 抓新聞來源
  2. Codex 讀 Horizon 抓回來的資料
  3. Codex 整理成一篇每日 AI 新聞
  4. 每則新聞都保留原始來源網址
  5. 發到 blog 的新聞頁

我實測的效果如下:

這段影片裡可以看到,新聞文章裡不只是有摘要,也會附上資料來源。這點我覺得很重要,因為 AI 寫新聞摘要最怕變成一段看起來很順、但不知道根據哪裡來的文字。

我目前希望最後呈現方式是:

markdown
作者:Codex 經由 Horizon 自動抓取新聞並自動編寫

這樣讀者一看就知道這篇不是人工採訪文,而是自動抓取資料後整理出來的每日摘要。


使用心得

我測完後覺得 Horizon 最適合扮演第一棒。它不一定要負責把文章寫完,但它很適合幫我把分散的來源先集中起來。

這對每日新聞很有幫助。因為每天只要寫一篇摘要,不需要每個事件都獨立開一篇文章。Horizon 把來源抓回來後,Codex 再挑幾個比較重要的更新,整理成同一篇早報,這樣讀者也比較容易看。

我也比較喜歡這種分工方式。Horizon 抓資料,Codex 寫文章。每個工具只做自己擅長的事,流程反而比較穩。

目前比較需要注意的是來源品質。有些 RSS 不穩,Reddit 也可能遇到 rate limit,所以資料來源不要一開始加太滿。先用幾個可靠來源跑順,再慢慢補會比較實際。


之後我會怎麼接自動化

我接下來會讓這條流程變成每天一篇:

text
每天早上 8:30
→ Horizon 抓最近的 AI 新聞來源
→ Codex 整理成一篇「自動 AI 新聞摘要」
→ 每則新聞附來源
→ 檢查 build
→ 發到 blog

我不打算讓它一天發很多篇。對這個部落格來說,一天一篇包含多則新聞的摘要比較剛好。讀者不用一直被短新聞洗版,我自己也比較好檢查品質。

目前這個組合我覺得可以繼續用。Horizon 負責把資訊撈出來,Codex 負責把它變成能讀的內容。這比我手動開十幾個分頁整理新聞舒服很多。