这里是智械日志,接下来分为4期内容带你入门n8n。包括各类高频使用节点,彻彻底底讲清楚,每一期都有相应的案例。祝大家进步!

n8n是一个开源的、低代码、自动化工作流构建工具,我愿意称之为最强的工作流自动化工具。开源、可自托管、自由度更高。

1.非本地部署

mac或者windows的本地部署这里不谈,我们的目的是做一个24小时可用的自动化agent,属实没必要折腾本地。而且一关机也就没法运行了。

这里推荐的是云端快速部署,快速高效。

1️⃣首推:Zeabur,每个月$5的额度,很香!

2️⃣Sealos

3️⃣Claw cloud

2.本次用到的节点

在n8n中的节点(node)就是工作流的每一个步骤,玩过blender或者nuke的应该对节点工作流不陌生,高效且直观。

每个节点负责一个任务,例如HTTP Request负责调用API,Set负责设置数据等。但这都不重要,你只要会搭积木,就能学好n8n。每个节点间的线叫做连接线,表示的是数据流动的方向。而每个节点接收到的数据,就是数据流,处理完毕后就转手给下一个节点。

01 定时触发节点Schedule Trigger

本篇用到的节点有定时触发器Schedule Trigger,顾名思义,它会定时执行你的工作流。

如果你在使用的使用发现没有按时执行而且和你设定的时间差的太久,那你还需要检查下工作流的时区设置,在国内,设置为“Asia/Shanghai”。

02 n8n核心的Http Request节点

如果我们要获取天气信息,正常操作是打开app或者网页,找到具体的地址,查询。而Http Request就是n8n中代替我们干这事的节点。它能调用外部的api接口来访问对应的网站,获取或者发送数据。

节点的模式设置我们常用的是GET(获取数据)和POST(发送数据),这里是要从天气网站获取数据,所以选择GET。

URL填写,需要根据对应网站的规范来,我这里使用的是OpenWeather https://openweathermap.org ,它的天气获取url格式如下

https://api.openweathermap.org/data/2.5/weather?q=城市的拼音(比如Guangdong)&appid=YOUR_API_KEY

这个api是你从Openweather上获取到的。如果你没有任何编程的经验,其实也不用怕,你可以帮整个帮助文档链接,扔给ai,让它告诉你如何填写URL。

因为openweather不需要做任何认证,所以下面这部分暂时不用填写。后续会有其他案例,比如对接Google,notion等需要认证的再说。

这个节点返回的数据格式如下,非常的多,我们根据需要来提取数据就行。比如我需要的是城市、天气、温度、湿度、体感。数据提取我建议采用Edit Fields,也就是set节点,当然你也可以丢给ai,但ai每次都会消耗Token,效率并不如何高,有点大炮打蚊子的感觉。

03 我最喜欢的节点Edit Fields

这个节点我常用来整理数据或者是给工作流预置一些数据。

在这个案例里面,Http Request传过来的数据的命名不太直观且数量太多,我习惯性重命名他们,方便下个节点能快速找到我要的数据。

04 万能的Code节点

我愿称之为万能装配站。在这个案例中,我需要code节点处理上游Edit Fields传过来的四个天气因素,并且用html格式输出(因为我后需要发邮件到邮箱,邮件使用html格式来渲染)。

你说不会写代码咋办?kimi,DeepSeek,通义千问随时用呀。我这里告诉我我正在使用n8n的code节点,要求根据我给他的数据,也就是Edit Fields传递过来的数据,写一个html格式的天气卡片。然后填写到code节点中就搞定了,它会帮你输出一个html的内容,比如我这里的htmlBody。这个节点在后面的发送邮件节点使用。

我的建议是,不要纠结于具体的代码写法,你要的是解决问题的能力。

至此,所有核心节点都已经部署完毕,接下来就是发送到有邮箱。

05 发送邮件

按图索骥,找到send email节点,需要配置一个SMTP account。

因为我用的是163邮箱,所以我的Host是smtp.163.com,端口默认465即可。

下面是这个工作流的JSON代码,大家可以复制粘贴到自己的n8n工作流中研究研究。

{
"nodes":[
{
"parameters":{
"assignments":{
"assignments":[
{
"id":"f982a455-0db4-4ed3-9050-707193d09c3d",
"name":"city",
"value":"={{ $json.name }}",
"type":"string"
},
{
"id":"901ef4ca-1f6c-4600-8ede-ce0d06427ca8",
"name":"weather",
"value":"={{ $json.weather[0].description}}",
"type":"string"
},
{
"id":"6e8db7f9-01e7-4226-850d-4fe90d2dc635",
"name":"temperature",
"value":"={{ ($json.main.temp-273.15).toFixed(1) }}",
"type":"number"
},
{
"id":"31e63168-5ac7-404e-be37-16c1185368b5",
"name":"feels_like",
"value":"={{ ($json.main.feels_like-273.15).toFixed(1) }}",
"type":"number"
},
{
"id":"d9ad8ac7-d2dd-4078-929c-f5ea0f66c2f6",
"name":"humidity",
"value":"={{ $json.main.humidity }}",
"type":"number"
}
]
},
"options":{}
},
"type":"n8n-nodes-base.set",
"typeVersion":3.4,
"position":[
-192,
368
],
"id":"56d24f7f-1123-4577-9042-c8ad8816d389",
"name":"Edit Fields"
},
{
"parameters":{
"jsCode":"// 在JavaScript Code节点中处理数据(适配中文JSON)\nconst inputData = $input.all()[0]; // 获取输入数据(假设仅1条)\n\n// 城市名称映射表(英文→中文,对应用户JSON中的“city”字段)\nconst cityNameMap = {\n  \"Guangdong\": \"广东\",\n  \"Beijing\": \"北京\",\n  \"Shanghai\": \"上海\",\n  \"Shenzhen\": \"深圳\",\n  \"Guangzhou\": \"广州\"\n};\n\n// 转换城市名称为中文\nconst originalCity = inputData.json[\"city\"];\nconst chineseCity = cityNameMap[originalCity] || originalCity;\n\n// 根据湿度计算舒适指数(保持原逻辑)\nlet comfortLevel = \"\";\nconst humidity = inputData.json[\"humidity\"];\nif (humidity >= 42 && humidity <= 59) {\n  comfortLevel = \"🏆 非常舒适\";\n} else if ((humidity >= 36 && humidity < 42) || (humidity > 59 && humidity <= 66)) {\n  comfortLevel = \"👍 舒适\";\n} else {\n  comfortLevel = \"➖ 一般\";\n}\n\n// 生成**邮箱兼容的HTML卡片**(全部使用内联样式)\nconst htmlContent = `\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>${chineseCity}天气预报</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <!-- 适配移动端 -->\n    <style type=\"text/css\">\n        /* 邮箱兼容的基础样式(仅保留必要属性) */\n        body {\n            margin: 0;\n            padding: 0;\n            font-family: 'Arial', '微软雅黑', sans-serif;\n            background-color: #f0f4f8;\n        }\n        .weather-card {\n            max-width: 600px;\n            margin: 20px auto;\n            border-radius: 10px;\n            background-color: #3498db; /* 用solid色代替渐变(邮箱兼容) */\n            color: #ffffff;\n            overflow: hidden; /* 保证圆角裁剪有效 */\n        }\n        .city-section {\n            text-align: center;\n            padding: 25px 0;\n            font-size: 24px;\n            font-weight: bold;\n        }\n        .weather-section {\n            text-align: center;\n            padding: 10px 0;\n            font-size: 16px;\n            opacity: 0.8;\n        }\n        .temperature-section {\n            text-align: center;\n            padding: 20px 0;\n        }\n        .temp-label {\n            font-size: 18px;\n            opacity: 0.8;\n            margin-bottom: 10px;\n        }\n        .temp-value {\n            font-size: 48px;\n            font-weight: bold;\n        }\n        .details-table {\n            width: 100%;\n            border-collapse: collapse;\n            margin: 20px 0;\n        }\n        .details-table td {\n            width: 50%;\n            padding: 15px;\n            text-align: center;\n        }\n        .detail-label {\n            font-size: 14px;\n            opacity: 0.8;\n            margin-bottom: 8px;\n        }\n        .detail-value {\n            font-size: 22px;\n            font-weight: bold;\n        }\n        .comfort-section {\n            text-align: center;\n            padding: 15px;\n            margin: 0 20px 20px;\n            border-radius: 8px;\n            background-color: rgba(255, 255, 255, 0.1); /* 半透明白背景(邮箱兼容) */\n            font-size: 18px;\n            font-weight: bold;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"weather-card\">\n        <!-- 1. 城市名称(顶部居中) -->\n        <div class=\"city-section\">\n            ${chineseCity}\n        </div>\n        \n        <!-- 2. 天气状况(灰色小字) -->\n        <div class=\"weather-section\">\n            ${inputData.json[\"weather\"]}\n        </div>\n        \n        <!-- 3. 当前温度(大字体+标签) -->\n        <div class=\"temperature-section\">\n            <div class=\"temp-label\">当前温度</div>\n            <div class=\"temp-value\">${inputData.json[\"temperature\"].toFixed(1)}℃</div>\n        </div>\n        \n        <!-- 4. 细节表格(体感温度+湿度,两列布局) -->\n        <table class=\"details-table\">\n            <tr>\n                <!-- 体感温度 -->\n                <td>\n                    <div class=\"detail-label\">体感温度</div>\n                    <div class=\"detail-value\">${inputData.json[\"feels_like\"].toFixed(1)}℃</div>\n                </td>\n                <!-- 湿度 -->\n                <td>\n                    <div class=\"detail-label\">湿度</div>\n                    <div class=\"detail-value\">${inputData.json[\"humidity\"]}%</div>\n                </td>\n            </tr>\n        </table>\n        \n        <!-- 5. 舒适指数(半透明白背景) -->\n        <div class=\"comfort-section\">\n            ${comfortLevel}\n        </div>\n    </div>\n</body>\n</html>\n`;\n\n// 返回邮件数据(适配中文字段)\nreturn [{\n  json: {\n    subject: `🌤️ ${chineseCity}天气预报`,\n    htmlBody: htmlContent, // 邮件正文使用生成的HTML\n    city: chineseCity,\n    temperature: inputData.json[\"temperature\"].toFixed(1),\n    feels_like: inputData.json[\"feels_like\"].toFixed(1),\n    humidity: inputData.json[\"humidity\"],\n    comfort: comfortLevel\n  }\n}];"
},
"type":"n8n-nodes-base.code",
"typeVersion":2,
"position":[
16,
368
],
"id":"d88b07e6-2ab9-4fcd-a1fb-cb68d61ce99b",
"name":"Code in JavaScript"
},
{
"parameters":{
"fromEmail":"发送邮件的邮箱",
"toEmail":"接收邮件的邮箱",
"subject":"邮件主题",
"html":"={{ $json.htmlBody }}",
"options":{}
},
"type":"n8n-nodes-base.emailSend",
"typeVersion":2.1,
"position":[
208,
368
],
"id":"46b66a59-c3ce-4195-b860-e2215e25e83c",
"name":"Send email",
"webhookId":"3bbd3b48-39ab-49f4-896d-8946d6ada0c9",
"credentials":{
"smtp":{
"id":"p4njeyd6T7oSbpIs",
"name":"SMTP account"
}
}
},
{
"parameters":{
"url":"https://api.openweathermap.org/data/2.5/weather?q=Guangdong&appid=你的API KEY&lang=zh_cn",
"options":{}
},
"type":"n8n-nodes-base.httpRequest",
"typeVersion":4.3,
"position":[
-384,
368
],
"id":"4495781e-224d-4fb2-be0e-bb99282a716f",
"name":"HTTP Request"
},
{
"parameters":{
"rule":{
"interval":[
{}
]
}
},
"type":"n8n-nodes-base.scheduleTrigger",
"typeVersion":1.2,
"position":[
-624,
368
],
"id":"36852108-8026-4e99-9e44-72c377441e75",
"name":"Schedule Trigger"
}
],
"connections":{
"Edit Fields":{
"main":[
[
{
"node":"Code in JavaScript",
"type":"main",
"index":0
}
]
]
},
"Code in JavaScript":{
"main":[
[
{
"node":"Send email",
"type":"main",
"index":0
}
]
]
},
"HTTP Request":{
"main":[
[
{
"node":"Edit Fields",
"type":"main",
"index":0
}
]
]
},
"Schedule Trigger":{
"main":[
[
{
"node":"HTTP Request",
"type":"main",
"index":0
}
]
]
}
},
"pinData":{},
"meta":{
"templateCredsSetupCompleted":true,
"instanceId":"7d6accb897c5d622916039484e3aa52d38f8018756034951e45bd87cbff3a1d0"
}
}

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐