為什麼要自建資訊流
每天早上打開手機,幾十個 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 Limit | API 變更風險 | 登入問題 | 成本 |
|---|---|---|---|---|
| 官方 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 是:
- 瀏覽器 scraping 失敗時,腳本會偵測到(頁面內容異常)
- 發通知提醒我手動重新登入
- 透過 noVNC 遠端操作瀏覽器完成登入
沒有完美的自動化方案,但一個月手動登入一兩次,可以接受。
共通架構
兩條 pipeline 的底層架構其實一樣:
cron(每天固定時間)
→ wrapper.sh
├─ 第一段:抓取腳本(TTRSS API / CDP scraping)
├─ 第二段:AI agent 摘要(分類 + 重點提取 + 生成 HTML)
└─ 第三段:發布腳本(rclone → R2 + 發送通知)
三段式的好處
- Debug 容易。 第一段的輸出可以存檔,第二段有問題可以拿同樣的輸入重跑,第三段上傳失敗可以手動補。
- 各段獨立演化。 換 RSS reader?改第一段。換 LLM?改第二段。換儲存方案?改第三段。互不影響。
- LLM 成本可控。 AI 只處理已經格式化好的文字,不浪費 token 在 API 呼叫和錯誤處理上。
成本
| 項目 | 費用 |
|---|---|
| VPS | Free 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 嗎?
這不是技術問題,是資訊策展的問題。工具只是讓這件事變得可執行。
給想自己搞的人
- 先從 RSS 開始。 瀏覽器 scraping 是進階路線,坑多。RSS 路線一個下午就能搞定。
- 三段式 pipeline 不是過度設計。 你會感謝自己把抓取、摘要、發布拆開的那一天。
- 不要讓 LLM 碰 API。 它會搞砸。讓腳本處理 I/O,LLM 只做文字處理。
- Cloudflare R2 + 靜態 HTML 是窮人的 SaaS。 零成本、零維護、全球 CDN。
- 完美是好的敵人。 先讓它跑起來,再慢慢調 prompt、加 feed、優化格式。我的第一版摘要醜得要命,但它 有用。
這套 pipeline 跑在 OpenClaw 上,由 AI agent 每天自動執行。從設計到穩定運行大概花了一個週末。最難的部分不是技術,是決定哪些資訊值得你每天花 3 分鐘。
