太好了,我們終於建立了一個功能完整的工作流程,能將任何文章轉換成結構化的 Notion 筆記 — 以下是真正奏效的原因:
我們閱讀很多 — 但幾乎沒有保存任何東西。
不是因為我們不想 — 而是因為「這很有趣」和「這已整理好並在之後能找到」之間的差距始終大到足以讓人跳過。瀏覽器書籤變成了墓地。稍後閱讀應用程式變成了更大的墓地。
所以我們建立了一些東西來縮小這個差距。
想法很簡單
傳送一個 URL。獲得一個結構化的 Notion 筆記。之後就不用再想它了。
實際上:webhook 接收 URL,工作流程擷取頁面,Code 節點將其簡化為可讀內容,OpenAI 將其總結為結構化 JSON,Notion 將其保存為標題、摘要、關鍵見解、標籤、來源 URL 和日期 — 所有內容都自動映射到正確的屬性。
Webhook → HTTP Request → Code Node → OpenAI → Notion
真正讓它奏效的東西
早期版本直接從 HTTP Request 進入 OpenAI。摘要平庸,成本高昂。花了一段時間才弄清楚為什麼。
典型的網頁不是文章。它是一篇文章埋在 30,000~80,000 個標記的導航 HTML、指令碼組合、Cookie 橫幅、追蹤像素和 CSS 類別名稱中。該模型把大部分語境視窗花在了噪音上。
修復方法是 Code 節點中的三個正規表達式替換和一個子字符串:
const input = $input.first().json;
const html = input.data || input.body || input.html || input;
const text = String(html)
.replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ')
.replace(/<[^>]+>/g, ' ')
.replace(/\s+/g, ' ')
.trim()
.substring(0, 8000);
return [{ json: { text, url: $('Webhook').item.json.body.url } }];
先刪除指令碼,然後是樣式,然後是所有剩餘標籤,摺疊空白區域,截斷到 8,000 個字元。將承載量從 ~60K 標記降低到 4K 以下。該模型只會看到重要的內容。摘要變得更好。成本大幅下降。
提示
Summarize this article as a research note. Return JSON:
{"title":"","summary":"","key_insights":[],"tags":[]}
Text: {{ $json.text }}
JSON 輸出模式在節點設定中啟用。Notion 節點直接映射到欄位,無需解析步驟。
進入 Notion 的內容
每個筆記六個屬性 — 標題、摘要、關鍵見解(項目符號格式)、標籤(多選)、URL、保存日期。足夠乾淨,之後實際上可以使用。
在執行之前值得了解的兩件事
有些網站會封鎖自動化請求。在 HTTP Request 節點上新增 User-Agent: Mozilla/5.0 作為標頭,大多數 403 就會消失。
以 JavaScript 為主的 SPA 返回不含內容的殼層 HTML — 頁面在載入後以用戶端方式呈現。對於這些,我先將 URL 推送到稍後閱讀服務以獲取呈現的文字,然後改為將其傳送到 webhook。
JSON 將被分享,歡迎回復。唯一需要更新的是 Notion 節點中的 Notion 資料庫 ID — 從您的資料庫 URL 中擷取。在測試前與您的 n8n 整合分享資料庫,否則寫入將失敗並無聲息地失敗。
很樂意回答關於此建置任何部分的問題。
標籤: show-and-tell knowledge-management notion openai webhook code-node productivity