所有入門單元免費開放 · 課程內容持續更新中

每日新聞摘要機器人

寫一支每天早上自動執行的 Python 程式:從你關心的新聞來源抓文章,交給大型語言模型分類和摘要,整理成一份三分鐘讀完的晨報。

中階約 12 小時5 個里程碑

開始前,建議先完成

依建議順序排列。還沒全部完成也可以開始,遇到不會的再回去補。

  1. 02資料與自動化:讓 Python 幫你做雜事
  2. 04AI 寫程式入門:和 AI 一起寫程式
  3. 10LLM API:用程式呼叫大型語言模型

里程碑

  1. 1

    抓到新聞列表

    從兩到三個 RSS 來源抓到標題、連結和發布時間,印在終端機上。

  2. 2

    篩選與去重

    只留下最近 24 小時的新聞,去掉重複的標題,數量控制在你設定的上限內。

  3. 3

    讓 LLM 寫摘要

    呼叫 API,為每則新聞產生分類和三句重點,回傳固定格式的 JSON。

  4. 4

    組成晨報並送出

    把摘要整理成一份 Markdown 晨報,依分類排列,每則附原文連結。

  5. 5

    排程與成本檢查

    設定每天自動執行,跑一週後檢查花費和摘要品質,再調整提示。

為什麼做這個專案

每天早上滑新聞,常常一滑就半小時,真正有用的可能只有三則。這個專案讓 Python 幫你收集、讓 LLM 幫你讀,你只要看結果。

它也是一個很完整的練習:抓資料、清理、呼叫 API、處理輸出、自動化,一次串起前面三個單元學到的東西。做完你會很清楚,一個「AI 應用」裡,哪些部分是一般程式,哪些部分才真的需要 AI。

新聞摘要流水線:排程啟動後依序抓新聞、篩選、LLM 摘要、送出;只有摘要那一步需要呼叫付費 API

四個步驟裡只有一步用到 LLM,其餘都是你已經會的 Python。

開始前的準備

  • 完成「資料與自動化」,會用 Python 呼叫 API、處理 JSON
  • 完成「LLM API」,已經申請好 API 金鑰,並放在環境變數裡
  • 挑兩到三個有 RSS 的新聞來源。很多新聞網站、部落格和政府機關都有提供
  • 建立專案資料夾和虛擬環境,安裝 feedparser 和 anthropic 套件

實作指南

里程碑 1:抓到新聞列表

feedparser 可以幫你讀 RSS,不用自己解析:

import feedparser

FEEDS = [
    "https://example.com/tech/rss",
    "https://example.com/business/rss",
]

for url in FEEDS:
    feed = feedparser.parse(url)
    for entry in feed.entries[:5]:
        print(entry.title, entry.link)

把網址換成你挑的來源。如果某個來源抓不到東西,把錯誤訊息貼給 AI 問原因,常見的是網址不是真正的 RSS。

里程碑 2:篩選與去重

同一則新聞常在不同來源重複出現。請 AI 幫你寫篩選函式,但規則由你決定:

請 AI 幫你寫篩選

我有一個 list,每個元素是 feedparser 的 entry。請寫一個函式:只保留 24 小時內發布的新聞、去掉標題幾乎一樣的重複新聞,最多回傳 15 則。請說明你怎麼判斷「標題幾乎一樣」,並寫兩個簡單的測試案例。

上限很重要,它直接決定每天的 API 花費。

里程碑 3:讓 LLM 寫摘要

這是整個專案的核心。用系統提示定好規則,並要求固定格式的輸出:

import os
import anthropic

client = anthropic.Anthropic()  # 會自動讀取 ANTHROPIC_API_KEY

SYSTEM = """你是新聞編輯,為忙碌的上班族整理晨報。
只根據提供的標題與摘要撰寫,不要加入原文沒有的資訊。
用 JSON 回覆,欄位:category(科技、財經、國際、其他)、points(三句繁體中文重點)。"""

def summarize(title, summary):
    resp = client.messages.create(
        model=os.environ["MODEL_NAME"],
        max_tokens=500,
        system=SYSTEM,
        messages=[{"role": "user", "content": f"標題:{title}\n摘要:{summary}"}],
    )
    return resp.content[0].text

模型名稱放在環境變數,到服務商的官方文件查目前可用的名稱,之後要換模型也不用改程式。

拿到回覆後,用 json.loads 轉成字典。偶爾模型回覆的格式會跑掉,請 AI 教你加上錯誤處理:解析失敗時重試一次,還是失敗就跳過這則。

里程碑 4:組成晨報並送出

把結果依分類排好,寫成 Markdown 檔:

# 晨報 2026-11-07

## 科技
- **標題**:三句重點……(原文連結)

## 財經
- ……

一定要附上原文連結。摘要是幫你判斷要不要點進去讀,不是取代原文。想更進一步,可以請 AI 教你用 Email 寄給自己。

里程碑 5:排程與成本檢查

用「資料與自動化」學過的排程方法,讓程式每天早上自動執行。跑一週後檢查兩件事:

  • 花費:到 API 服務商的後台看用量,算出一天大約多少錢
  • 品質:隨機挑五則摘要對照原文,有沒有講錯或加料
請 AI 幫你改進提示

這是我的系統提示,以及三則我覺得摘要得不好的例子(附原文)。請分析問題出在哪裡,並建議修改後的系統提示。

延伸挑戰

  • 讓使用者用一個設定檔決定關注的關鍵字,只摘要相關新聞
  • 把十五則新聞合併成一次 API 呼叫,比較成本和品質的差異
  • 加一段「今天最值得讀的一則」,並請模型說明理由
  • 把晨報送到你的聊天軟體頻道
完成標準
  • 程式能從至少兩個來源抓新聞,並篩選、去重
  • 每則摘要都有分類、三句重點和原文連結
  • API 金鑰沒有出現在程式碼或 Git 紀錄裡
  • 已經連續自動執行至少三天
  • 你知道一天大約花多少錢,也抽查過摘要的正確性

做完了?分享你的作品!

到交流區貼上作品連結和心得,你的經驗會幫到下一個人。

前往交流區

專案討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。