使用GPT-4.1 Mini和Notion数据库创建AI精选科技新闻摘要
高级
这是一个Content Creation, AI Summarization领域的自动化工作流,包含 20 个节点。主要使用 Code, Notion, HttpRequest, ManualTrigger, Agent 等节点。 使用GPT-4.1 Mini和Notion数据库创建AI精选科技新闻摘要
前置要求
- •Notion API Key
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
使用的节点 (20)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "5f3c5e6f777b2c7f976eff784f15d2e2501680193b55be3d2ceef10db21e51fb",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c6bfc0f0-ba09-47f7-9224-56581124b177",
"name": "当点击“执行工作流”时",
"type": "n8n-nodes-base.manualTrigger",
"position": [
432,
64
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b53c4d1d-ea67-4ef8-a637-3ed694d78845",
"name": "HTTP 请求",
"type": "n8n-nodes-base.httpRequest",
"position": [
3136,
368
],
"parameters": {
"url": "https://api.notion.com/v1/pages",
"method": "POST",
"options": {},
"jsonBody": "={{ $item(\"0\").$node[\"Code in JavaScript2\"].json.pagePayload }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer NOTION_API_KEY_WITH_ACCESS_TO_PAGE"
},
{
"name": "Notion-Version",
"value": "2022-06-28"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "046cff62-c51c-4568-91e3-b387641a6800",
"name": "获取多个数据库页面",
"type": "n8n-nodes-base.notion",
"position": [
720,
240
],
"parameters": {
"filters": {
"conditions": [
{
"key": "Date|date",
"date": "={{$now.minus({days: 1}).toISO()}}",
"condition": "after"
}
]
},
"options": {},
"resource": "databasePage",
"matchType": "allFilters",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "list",
"value": "26f79f2b-1851-8054-a6af-e7106fc0ce40",
"cachedResultUrl": "https://www.notion.so/26f79f2b18518054a6afe7106fc0ce40",
"cachedResultName": "Tech & Startups rss feed"
},
"filterType": "manual"
},
"credentials": {
"notionApi": {
"id": "sRT9MWg4gspaOMaP",
"name": "Notion account"
}
},
"typeVersion": 2.2
},
{
"id": "6a1e2866-d724-4ddf-92e6-124540e376b6",
"name": "JavaScript代码",
"type": "n8n-nodes-base.code",
"position": [
960,
272
],
"parameters": {
"jsCode": "const techKeywords = [\n \"tech\", \"startup\", \"ai\", \"openai\", \"google\", \"microsoft\", \"apple\",\n \"iphone\", \"app\", \"software\", \"vc\", \"funding\", \"ipo\", \"venture\",\n \"silicon valley\", \"cloud\", \"semiconductor\", \"data\", \"innovation\",\n \"tiktok\", \"meta\", \"facebook\", \"amazon\", \"netflix\", \"snap\"\n];\n\nreturn items.filter(item => {\n const text = (\n (item.json.property_title || \"\") + \" \" +\n (item.json.property_summary || \"\") + \" \" +\n (item.json.property_full_article || \"\")\n ).toLowerCase();\n\n return techKeywords.some(k => text.includes(k));\n});\n"
},
"typeVersion": 2
},
{
"id": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
"name": "## 步骤1. 将新闻保存在向量存储中(每日运行)",
"type": "@n8n/n8n-nodes-langchain.textClassifier",
"position": [
1312,
240
],
"parameters": {
"options": {},
"inputText": "=Classify the article into one of these categories: \"Tech/Startup\" or \"Other\".\nReturn only one word: Tech/Startup or Other.\n\nTitle: {{$json.property_title}}\nSummary: {{$json.property_summary}}\nFull article: {{$json.property_full_article}}\n",
"categories": {
"categories": [
{
"category": "Other",
"description": "not Tech/Startup"
},
{
"category": "Tech/Startup",
"description": "Tech/Startup"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "64df328e-4a0d-428c-9e6f-26cd378a3371",
"name": "OpenAI 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1360,
448
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "j4OqIQtI7Um6LEX2",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8",
"name": "JavaScript代码1",
"type": "n8n-nodes-base.code",
"position": [
1744,
480
],
"parameters": {
"jsCode": "\nconst articles = items.map(item => item.json);\n\n// Return one array in one item\nreturn [{ json: { articles } }];\n"
},
"typeVersion": 2
},
{
"id": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2128,
384
],
"parameters": {
"text": "={{ $json.articles }}",
"options": {
"systemMessage": "=\nYou are an expert technology editor creating a **daily curated digest** of technology and startup news.\nYou receive a list of articles as input (with titles, summaries, and links).\n\n### Your Goals:\n\n1. **Create a single daily digest page** that feels like a professional publication.\n2. **Write a short intro paragraph** summarizing the day’s main themes.\n3. **Group articles by categories** (e.g., *AI & Developer Tools, Startups & Funding, Consumer Tech, Regulation, Hardware & Gadgets, Web & Internet Services*).\n\n * Only include categories that are relevant for today’s articles.\n4. **For each article**:\n\n * Use a **bullet point format**.\n * Write in **concise editorial style** (2–3 sentences max per article).\n * Always include the **title as a link** to the article.\n5. **End with a closing note** like “That’s it for today’s digest.”\n\n### Formatting Rules:\n\n* Use **Markdown headings** (`#`, `##`) for sections.\n* Ensure **links are clickable Markdown links**.\n* Do **not** include raw JSON, system notes, or AI meta-commentary.\n* Output should be **clean and publish-ready** for Notion.\n"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "d93debb8-7e57-4117-92fe-64b43501b326",
"name": "OpenAI 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2176,
608
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "j4OqIQtI7Um6LEX2",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "d5cd2cc9-5f16-40c7-97c4-68edbee168a3",
"name": "使用 JavaScript2 编写代码",
"type": "n8n-nodes-base.code",
"position": [
2656,
400
],
"parameters": {
"jsCode": "// Get markdown digest from AI output\nconst digest = $json[\"output\"];\nconst today = new Date().toISOString().split(\"T\")[0]; // YYYY-MM-DD\n\n// Helper: convert a markdown line into a Notion block\nfunction mdToBlock(line) {\n line = line.trim();\n\n // Headings\n if (line.startsWith(\"### \")) {\n return {\n object: \"block\",\n type: \"heading_3\",\n heading_3: {\n rich_text: [{ type: \"text\", text: { content: line.replace(/^### /, \"\") } }]\n }\n };\n }\n if (line.startsWith(\"## \")) {\n return {\n object: \"block\",\n type: \"heading_2\",\n heading_2: {\n rich_text: [{ type: \"text\", text: { content: line.replace(/^## /, \"\") } }]\n }\n };\n }\n if (line.startsWith(\"# \")) {\n return {\n object: \"block\",\n type: \"heading_1\",\n heading_1: {\n rich_text: [{ type: \"text\", text: { content: line.replace(/^# /, \"\") } }]\n }\n };\n }\n\n // Bulleted list\n if (line.startsWith(\"- \")) {\n const linkMatch = line.match(/\\[(.*?)\\]\\((.*?)\\)/);\n let textContent = line.replace(/^- /, \"\");\n let richText = [];\n\n if (linkMatch) {\n richText.push({\n type: \"text\",\n text: { content: linkMatch[1], link: { url: linkMatch[2] } }\n });\n const after = textContent.replace(linkMatch[0], \"\").trim();\n if (after) {\n richText.push({ type: \"text\", text: { content: \" \" + after } });\n }\n } else {\n richText.push({ type: \"text\", text: { content: textContent } });\n }\n\n return {\n object: \"block\",\n type: \"bulleted_list_item\",\n bulleted_list_item: { rich_text: richText }\n };\n }\n\n // Horizontal rule\n if (line.startsWith(\"---\")) {\n return { object: \"block\", type: \"divider\", divider: {} };\n }\n\n // Regular paragraph\n if (line.length > 0) {\n return {\n object: \"block\",\n type: \"paragraph\",\n paragraph: { rich_text: [{ type: \"text\", text: { content: line } }] }\n };\n }\n\n // Empty line → blank paragraph\n return {\n object: \"block\",\n type: \"paragraph\",\n paragraph: { rich_text: [] }\n };\n}\n\n// Convert markdown into array of Notion blocks\nconst blocks = digest.split(\"\\n\").map(mdToBlock).filter(Boolean);\n\n// Split blocks into chunks of 100\nconst chunkSize = 100;\nconst chunks = [];\nfor (let i = 0; i < blocks.length; i += chunkSize) {\n chunks.push(blocks.slice(i, i + chunkSize));\n}\n\nreturn {\n pagePayload: {\n parent: { page_id: \"26f79f2b185180ffa6aded90ddd9ba4c\" }, // your parent page\n icon: { emoji: \"📰\" },\n cover: {\n external: { url: \"https://upload.wikimedia.org/wikipedia/commons/6/62/Tuscankale.jpg\" }\n },\n properties: {\n title: [\n {\n text: { content: `Tech & Startup Daily Digest – ${today}` }\n }\n ]\n },\n children: chunks[0] // first 100 blocks only\n },\n extraChunks: chunks.slice(1) // save rest for appending\n};\n\n"
},
"typeVersion": 2
},
{
"id": "6caf59be-ed6b-4ac7-8699-28fd3cc0c799",
"name": "计划触发器",
"type": "n8n-nodes-base.scheduleTrigger",
"disabled": true,
"position": [
448,
384
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 20
}
]
}
},
"typeVersion": 1.2
},
{
"id": "7a2e7407-a775-466b-8022-37836b1927f6",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
384,
-48
],
"parameters": {
"height": 576,
"content": "## 手动激活用于测试"
},
"typeVersion": 1
},
{
"id": "ba4b3f32-885b-4155-ab8e-a30530dc1f07",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
240
],
"parameters": {
"width": 208,
"height": 128,
"content": "## 我们可以将其安排为每日执行"
},
"typeVersion": 1
},
{
"id": "8e8e21ca-190f-491e-be20-f14861347e2e",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
624,
16
],
"parameters": {
"height": 416,
"content": "## 可以修改日期过滤器以获取指定天数或小时内的 Notion 数据库文章"
},
"typeVersion": 1
},
{
"id": "3c1c0e30-ebe5-4b1b-b431-916716b822f1",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
48
],
"parameters": {
"height": 400,
"content": "## 此代码对我们这些**科技和初创**领域的所需文章进行初步筛选"
},
"typeVersion": 1
},
{
"id": "adff5b0a-8745-4a2e-9325-3a165055ac91",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
32
],
"parameters": {
"width": 368,
"height": 560,
"content": "## 使用文本分类模型(gpt-4.1-mini)对文章进行进一步筛选"
},
"typeVersion": 1
},
{
"id": "1d4c0870-766f-453a-a2cc-dc4f38f433f1",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1696,
352
],
"parameters": {
"height": 320,
"content": "## 将文章合并到一个对象中传递给 AI 代理"
},
"typeVersion": 1
},
{
"id": "0709856a-1b2e-4c31-97c8-b4546169cf60",
"name": "便签7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2096,
192
],
"parameters": {
"width": 304,
"height": 544,
"content": "## 将所有文章摘要合并为具有原始 Notion 页面格式的单个文章"
},
"typeVersion": 1
},
{
"id": "c36eeaae-77ee-4d73-9e2f-6879c9c1801d",
"name": "便签8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2528,
272
],
"parameters": {
"width": 384,
"height": 288,
"content": "## 格式化为正确的 Notion 页面 JSON 对象以传递给 HTTP 节点"
},
"typeVersion": 1
},
{
"id": "5dfb71e3-db06-49a2-b3ce-ff953a00ac50",
"name": "便签9",
"type": "n8n-nodes-base.stickyNote",
"position": [
3040,
272
],
"parameters": {
"width": 320,
"height": 304,
"content": "## 创建 Notion 页面"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Code in JavaScript2",
"type": "main",
"index": 0
}
]
]
},
"Text Classifier": {
"main": [
[],
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get many database pages",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Text Classifier",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Text Classifier",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript2": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Get many database pages": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"When clicking ‘Execute workflow’": {
"main": [
[
{
"node": "Get many database pages",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
科技新闻聚合器:The Verge和TechCrunch RSS到Notion,含GPT-4摘要
科技新闻聚合器:The Verge和TechCrunch RSS到Notion,含GPT-4摘要
If
Code
Html
+11
37 节点moosa
杂项
每日Gmail收件箱摘要转Discord(GPT-4.1-mini + PDF转换)
使用GPT-4.1-mini和PDF转换的每日Gmail收件箱摘要发送到Discord
Code
Gmail
Discord
+8
18 节点moosa
杂项
灵活新闻聚合器 - 多源集成、AI分析和可设置频道
多源新闻策展系统,集成Mistral AI分析、摘要和自定义频道
If
Set
Xml
+32
120 节点Hybroht
内容创作
内容生成器 v3
AI驱动博客自动化:使用GPT-4生成并发布SEO文章至WordPress和Twitter
If
Set
Code
+25
144 节点Jay Emp0
内容创作
使用Slack和Asana的虚拟Scrum Master
基于AI的Scrum Master助手,集成OpenAI、Slack和Asana
Set
Code
Html
+10
35 节点Łukasz
项目管理
潜在客户开发与邮件工作流
使用Google Maps、SendGrid和AI自动化B2B潜在客户开发与邮件营销
If
Set
Code
+21
141 节点Ezema Kingsley Chibuzo
潜在客户开发