為什麼要自建資訊流

每天早上打開手機,幾十個 tab、幾百則未讀。技術論壇、社群媒體、新聞源——每個都說自己很重要。花 30 分鐘刷完,真正有用的可能三條。

更糟的是,演算法幫你選的東西,跟你真正需要的東西,往往不是同一批。演算法優化的是你的停留時間,不是你的知識密度。

所以我想做的事很簡單:自己選來源、讓 AI 幫我篩重點、每天早上給我一份摘要。

不是讓 AI 取代我讀東西——是讓它幫我從 200 則裡挑出值得讀的 20 則,然後我自己決定要不要點進去看全文。


Pipeline 一:RSS 路線

RSS 是最乾淨的資訊來源。沒有演算法、沒有廣告、格式統一。大多數技術論壇和部落格都還支援 RSS,只是很多人忘了它的存在。

架構

自架 Tiny Tiny RSS(TTRSS),訂閱想追的 feed。TTRSS 有完整的 API,可以程式化操作一切。

流程長這樣:

cron(每天早上)
  → shell script 呼叫 TTRSS API 抓未讀
  → 餵給 AI agent 做分類摘要
  → shell script 上傳靜態頁面 + 標記已讀

TTRSS API 操作

# 登入拿 session
SID=$(curl -s -X POST "https://rss.example.com/api/" \
  -H "Content-Type: application/json" \
  -d '{"op":"login","user":"myuser","password":"mypass"}' \
  | python3 -c "import json,sys; print(json.load(sys.stdin)['content']['session_id'])")

# 抓未讀文章(最多 200 篇)
curl -s -X POST "https://rss.example.com/api/" \
  -H "Content-Type: application/json" \
  -d "{\"op\":\"getHeadlines\",\"sid\":\"$SID\",\"feed_id\":2,\"view_mode\":\"unread\",\"limit\":200}"

# 處理完後標記已讀
curl -s -X POST "https://rss.example.com/api/" \
  -H "Content-Type: application/json" \
  -d "{\"op\":\"catchupFeed\",\"sid\":\"$SID\",\"feed_id\":2}"

API 回來的是 JSON,每篇有 title、link、excerpt。腳本把這些整理成一個大 prompt,丟給 AI agent 做摘要。

三段式 Pipeline

這裡有一個重要的設計決定:不要讓 AI agent 做所有事。

第一段:Shell script(抓取)
  → 呼叫 TTRSS API、整理資料、格式化成 prompt

第二段:AI agent(摘要)
  → 只做一件事:讀文章列表、分類、寫摘要

第三段:Shell script(發布)
  → 上傳 HTML 到 Cloudflare R2、標記已讀、發通知

為什麼要這樣拆?因為 LLM 做 API 呼叫不穩定。它可能忘記帶參數、可能 hallucinate 一個不存在的 endpoint、可能在 JSON parsing 上搞砸。但 LLM 做「讀一堆文字然後寫摘要」非常強。

讓腳本做腳本擅長的事,讓 LLM 做 LLM 擅長的事。

前置腳本負責確定性的操作(API 呼叫、資料格式化),AI 只負責創意性的工作(分類、摘要、判斷重要性),收尾腳本再接手確定性的操作(上傳、通知、清理)。

靜態頁面發布

摘要生成後,用 rclone 上傳到 Cloudflare R2:

# 把摘要 HTML 上傳到 R2
rclone copy digest.html r2:my-digest-bucket/$(date +%Y-%m-%d)/

R2 接 Cloudflare 的 CDN,免費額度綽綽有餘。每天一個 HTML 檔案,連 database 都不需要。

可複製性

這套 pipeline 跟「訂了什麼 RSS」完全無關。換成 HN、Reddit RSS、個人部落格、學術論文的 feed——只要是 TTRSS 能訂的,pipeline 都能處理。AI agent 的 prompt 稍微調一下分類規則就好。


Pipeline 二:社群媒體路線(進階)

不是所有平台都有 RSS。某些社群媒體的 timeline 是封閉的——沒有 RSS feed、官方 API 有 rate limit 又常改版、第三方 client 隨時可能被封。

用瀏覽器直接抓

最暴力也最穩定的方案:開一個持久化的瀏覽器,直接 scrape 頁面內容。

Xvfb(虛擬螢幕)
  → Headless Chrome(持久化 session)
  → agent-browser(CDP 操控)
  → 滾動頁面、擷取內容
  → 餵給 AI agent 做摘要

Xvfb 提供虛擬螢幕,Chrome 跑在上面,Cookie 和 session 持久化在磁碟上——等於一個永遠開著、永遠登入的瀏覽器。

為什麼不用 API?

方案Rate LimitAPI 變更風險登入問題成本
官方 API嚴格高(隨時改版)OAuth 流程複雜可能收費
第三方 Library中等極高(一封就死)依賴逆向工程免費但不穩
瀏覽器 Scraping低(頁面改版慢)Cookie 持久化免費

瀏覽器 scraping 的優勢是:你看到什麼,程式就抓到什麼。不受 API rate limit,不怕 API 改版(頁面改版的頻率遠低於 API),Cookie 持久化解決了登入問題。

CDP 操控

透過 Chrome DevTools Protocol(CDP),可以用程式控制瀏覽器:

# 開啟頁面
agent-browser --cdp 9222 open "https://example.com/timeline"

# 擷取頁面快照(accessibility tree)
agent-browser --cdp 9222 snapshot -i

# 執行 JavaScript(例如滾動頁面)
agent-browser --cdp 9222 eval "window.scrollBy(0, 3000)"

腳本的邏輯是:開頁面 → 等載入 → 滾幾次抓更多內容 → 擷取文字 → 關頁面。之後同樣走三段式 pipeline:腳本抓取 → AI 摘要 → 腳本發布。

踩坑:Cookie 過期

持久化瀏覽器最大的問題是 session 過期。某些平台會定期強制登出。目前的 workaround 是:

  1. 瀏覽器 scraping 失敗時,腳本會偵測到(頁面內容異常)
  2. 發通知提醒我手動重新登入
  3. 透過 noVNC 遠端操作瀏覽器完成登入

沒有完美的自動化方案,但一個月手動登入一兩次,可以接受。


共通架構

兩條 pipeline 的底層架構其實一樣:

cron(每天固定時間)
  → wrapper.sh
    ├─ 第一段:抓取腳本(TTRSS API / CDP scraping)
    ├─ 第二段:AI agent 摘要(分類 + 重點提取 + 生成 HTML)
    └─ 第三段:發布腳本(rclone → R2 + 發送通知)

三段式的好處

  1. Debug 容易。 第一段的輸出可以存檔,第二段有問題可以拿同樣的輸入重跑,第三段上傳失敗可以手動補。
  2. 各段獨立演化。 換 RSS reader?改第一段。換 LLM?改第二段。換儲存方案?改第三段。互不影響。
  3. LLM 成本可控。 AI 只處理已經格式化好的文字,不浪費 token 在 API 呼叫和錯誤處理上。

成本

項目費用
VPSFree tier(各大雲都有)
Cloudflare R2免費額度(10GB 儲存 + 1M 請求/月)
TTRSS自架,免費
AI API用既有的 agent API 額度
總計≈ $0/月

認真算的話唯一的成本是 AI API 的 token 消耗。每天 200 篇文章的摘要,大約幾千個 token,幾乎可以忽略。


實際成果與心得

跑了一陣子,幾個觀察:

從 30 分鐘變 3 分鐘。 以前每天早上花半小時在各個平台間切換、刷 timeline、掃標題。現在打開一個靜態頁面,3 分鐘看完今天的重點。想深入的再點連結去看原文。

AI 的分類比我自己分得好。 不是因為它更聰明,而是因為它不會被標題黨騙、不會因為情緒去點不相關的東西。它很機械地按照我定的規則分類,反而更準。

靜態頁面意外好用。 本來只是為了方便自己看,結果因為是靜態 HTML + CDN,載入飛快、可以分享連結給別人。偶爾有朋友問「最近技術圈在聊什麼」,直接丟連結就好。

三段式 pipeline 真的穩。 跑了幾週,AI 摘要這段從來沒出過問題。出問題的都是第一段(API timeout)和第三段(上傳失敗)——但因為拆開了,retry 很簡單。

意外的副作用

當你有了自己的資訊 pipeline,你會開始更認真地思考「我到底要追蹤什麼」。以前隨手 follow 的帳號、訂閱的 newsletter,現在都會想:這個值得進我的 daily digest 嗎?

這不是技術問題,是資訊策展的問題。工具只是讓這件事變得可執行。


給想自己搞的人

  1. 先從 RSS 開始。 瀏覽器 scraping 是進階路線,坑多。RSS 路線一個下午就能搞定。
  2. 三段式 pipeline 不是過度設計。 你會感謝自己把抓取、摘要、發布拆開的那一天。
  3. 不要讓 LLM 碰 API。 它會搞砸。讓腳本處理 I/O,LLM 只做文字處理。
  4. Cloudflare R2 + 靜態 HTML 是窮人的 SaaS。 零成本、零維護、全球 CDN。
  5. 完美是好的敵人。 先讓它跑起來,再慢慢調 prompt、加 feed、優化格式。我的第一版摘要醜得要命,但它 有用

這套 pipeline 跑在 OpenClaw 上,由 AI agent 每天自動執行。從設計到穩定運行大概花了一個週末。最難的部分不是技術,是決定哪些資訊值得你每天花 3 分鐘。