iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
AI 自動化

30 天 AI 自動化實戰:用 n8n、FastAPI 與 Gemini 打造 AI 知識管家系列 第 27 篇

Day 27|不用等我下指令:打造每週 AI 知識週報

  • 分享至 

  • xImage
  •  

我們成功打造了非常強大的 AI 知識管家,能自動抓取網頁、解析 PDF 與 YouTube、進行 AI 摘要並存入 Notion。但目前的系統有一個盲點:它是被動的。

如果這週你很忙,沒有丟任何網址給機器人,這個強大的系統就會在一旁呼呼大睡。隨著 Notion 裡的筆記越來越多,我們常常存了就忘,沒有時間回頭複習。我們要如何讓系統從「被動接收指令」變成「主動關心你」,在每週五下班前自動幫你統整這週學到的新知識?

今天要介紹的核心觀念是被動自動化與主動自動化的差異。

  • 被動:依賴外部事件觸發,例如 Webhook 或 Telegram 收到新訊息。
  • 主動:不需要外部事件,由系統內部的時間排程自主喚醒。

在 n8n 中,我們將引入全新的起點:Schedule Trigger。讓系統在特定時間主動醒來,去資料庫翻找資料,然後叫醒 AI 開始工作。

這是一條全新的獨立 Workflow,它的起點不再是通訊軟體,而是時間:
https://ithelp.ithome.com.tw/upload/images/20261004/20183341OfZ86H0Gqi.png
我們將在 n8n 中建立一條全新的 Workflow(與原本存檔的流程分開),實作步驟如下:

  1. 定義資料模型
    打開您的 main.py,在最上方新增週報專用的 Pydantic 模型:
class DigestRequest(BaseModel):
    text: str
  1. 新增週報專屬路由
    在檔案底部加入這個專門用來處理多篇文章整合的端點:
@app.post("/weekly-digest")
def weekly_digest(data: DigestRequest):
    try:
        digest_instruction = """
        [Role]
        你是一個專屬的 AI 知識管家。
        
        [Task]
        請根據使用者提供的本週文章摘要,寫一份 Weekly Knowledge Digest。
        1. 找出這些文章之間的關聯性。
        2. 列出 3 個本週學到的核心觀念。
        3. 請直接輸出排版良好、適合在通訊軟體閱讀的純文字格式,嚴禁使用 JSON 格式。
        """
        
        digest_model = genai.GenerativeModel(
            model_name='gemini-3.5-flash-lite',
            system_instruction=digest_instruction
        )
        
        prompt = f"以下是我本週收集的技術文章摘要:\n{data.text}"
        response = digest_model.generate_content(prompt)

        return {
            "status": "success",
            "data": response.text
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
  1. n8n 流程設定
    在 n8n 建立一個全新的 Workflow,並依序串接以下 5 個節點:

Node 1:Schedule Trigger

  • Rule: Days of Week
  • Day: Friday
  • Time: 17:00(請確保 n8n 系統時區已設定為正確的當地時間)

Node 2:Notion (撈取本週資料)

  • Operation: Get many database pages
  • Database: 選擇您的目標知識庫
  • Filter: 設定 Created time 條件為「過去 7 天內」
  • Settings (進階): 開啟 Always Output Data,避免當週無文章時流程報錯中斷

Node 3:Code (合併文章字串)

  • Language: JavaScript
  • Mode: Run Once for All Items
  • Code:
let combinedText = "";
for (let i = 0; i < $input.all().length; i++) {
  let item = $input.all()[i].json;
  let title = item["Name"] || "無標題"; 
  let tldr = item["TLDR"] || "無摘要";
  combinedText += `【文章 ${i+1}】${title}\n摘要:${tldr}\n\n`;
}
return [{ json: { merged_summary: combinedText } }];

Node 4:HTTP Request (呼叫 AI 摘要)

  • 新增一個 HTTP Request 節點
    https://ithelp.ithome.com.tw/upload/images/20261004/20183341fvkadcFHNb.png
    如上圖設定

Node 5:Telegram (發送推播)

  • Operation: Send a text message
  • Chat ID: 填入您的專屬 Telegram 數字 ID
  • Text: 切換為 Expression 並填入 HTTP 節點回傳的變數 {{ $json.data }}

https://ithelp.ithome.com.tw/upload/images/20261004/20183341Y5GEPgJvHr.png

這樣就建立好每周排成通知了。


上一篇
Day 26|Retry 為什麼可能害你多寫一篇 Notion?Idempotency
下一篇
Day 28|Docker Compose:讓整套 AI Automation 可以被重現
系列文
30 天 AI 自動化實戰:用 n8n、FastAPI 與 Gemini 打造 AI 知識管家 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言