模块三:n8n 界面概览及功能
n8n 界面介绍和核心功能讲解:深入了解 n8n 的界面布局和核心功能。
3.1 n8n UI 界面概览
- 一键配置中文界面
- 浏览器翻译:Chrome 选择“翻译为中文(简体)”。
- 沉浸式翻译插件:https://immersivetranslate.com/zh-Hans
3.1.1 首页仪表盘 (Dashboard)
- Overview(概览统计):默认最近 7 天数据。
- Prod. executions:已激活工作流成功运行次数。
- Failed prod. executions:已激活工作流失败次数。
- Failure rate:失败率,核心健康指标。
- Run time (avg.):平均运行时间,过长需优化。
- Create Workflow:醒目的创建按钮,直接进入空白画布。
- Workflows:工作台,创建/删除/搜索/组织工作流。
- Credentials:安全的凭据保险箱,API/OAuth 加密存储,下拉引用。
- Executions:执行记录与调试,查看每次运行的输入输出。
3.1.2 编辑器界面 (Editor)
- 中央画布 (Canvas):可视化构建区域,点击 “+” 添加节点并连接。
- Execute Workflow:手动运行/测试当前工作流,便于调试。
- Active:总开关,激活后触发器才监听事件。
- Save:保存所有修改。
- +(添加节点):添加触发器或动作的主要入口。
3.2 n8n 工作流运作的核心概念
3.2.1 工作流 (Workflow)
- 自动化任务的集合:1 个触发器 + 若干动作节点。
3.2.2 连接器 (Connection)
- 连接节点的数据“线”,决定数据流向(上游输出 → 下游输入)。
3.2.3 节点 (Node)
- 工作流的基本单元,分触发器与动作。
- 触发器 (Trigger):决定“何时”执行,且每个工作流仅一个激活触发器。
- 示例:Schedule 定时、Webhook 接收 POST、Gmail Trigger 收件。
- 行动器/动作 (Action):决定“做什么”。
- 示例:Google Sheets 读写表格;OpenAI 提问;HTTP Request 调用任意 API。
- 触发器 (Trigger):决定“何时”执行,且每个工作流仅一个激活触发器。
3.2.4 数据流
- 数据如河流,从触发器开始,流经各节点被处理再向下传递,下游可访问上游所有输出。
3.2.5 节点生命周期
- Input → Processing → Output。
- Input:接收上游数据。
- Processing:按节点配置处理(如 Set 拼接字段)。
- Output:输出处理结果给下游。
3.2.6 工作流执行方式
- 同步 vs 异步:Webhook 可同步返回响应,同时后台继续异步任务。
- 串行 vs 并行:默认对数组逐条串行;可用子工作流等方式批量并行提高效率。
3.3 理解 n8n 的数据结构
3.3.1 理解 JSON:这是理解 n8n 数据流动的关键
- 在 n8n 中,所有数据都以 JSON (JavaScript Object Notation) 的格式在节点之间传递。请将下面这个结构刻在脑海里,这是理解一切数据操作的基础。
- 一个典型的 n8n 数据项 (Item) 结构如下:
JSON 示例复制后粘贴
{
"json": {
"field1": "value1",
"customer": {
"name": "Alice",
"email": "alice@example.com"
},
"products": [
{ "id": "A1", "price": 100 },
{ "id": "B2", "price": 200 }
]
},
"binary": {
// 用于存储文件等二进制数据
}
}
- 核心概念:
- 对象 (
{}):包含“键: 值”配对,例如customer。 - 数组 (
[]):有序列表,例如products是数组。 - 路径:访问数据的地址。
json.customer.name得到 “Alice”;json.products[1].price得到第二个商品的价格(数组从 0 开始)。
- 对象 (
3.3.2 理解表达式(Expressions)
- 作用:让节点动态读取上游数据。语法总是
{{ ... }}。 - 基础用法 (
$json):- 语法:
{{ $json.some_key }} - 含义:指向上一个节点输出的
json。例如上游输出{"name":"Alice"},则{{ $json.name }}得到 “Alice”。
- 语法:
- 进阶用法 (
$node):- 语法:
{{ $('节点名称').item.json.some_key }} - 含义:跨节点精确取数,不限于紧邻上游。
- 示例:
{{ $('Read From Sheet').item.json.name }}直接抓取名为 “Read From Sheet” 的节点输出。
- 语法:
3.3.3 数据处理和清洗方法:Code 节点
- 当简单的“提取”无法满足需求,你需要对数据进行解析、转换、重组时,就可以“代码节点”对数据进行结构化加工。
- 面临的问题 (Why):在 AI 工作流中,我们经常要求 AI 输出 JSON 格式的数据。但 AI 模型有时生成的数据往往并不是标准化的纯净 JSON 字符串,而可能是被文字或标记包裹的内容,如下案例:
{ "Title": "这是一个标题", "Summary": "这是一个摘要" }
这种带有前后缀的字符串,n8n 的后续节点是无法直接识别的。我们需要一个“数据处理和净化”过程将其转化为标准化数据格式。
- 解决方案 (How):Code 节点是处理数据结构化问题的最佳方式之一。
Code 节点示例复制后粘贴
// 1. 获取输入:从上一个 AI 节点获取可能不纯的输出字符串
// $json.output 会读取名为 'output' 的字段
const llmOutput = $json.output;
// 2. 净化数据:用正则找出最外层 { ... }
const jsonMatch = llmOutput.match(/{.*}/s);
if (!jsonMatch || jsonMatch.length === 0) {
throw new Error("无法在输入中找到有效的 JSON 字符串。");
}
const cleanJsonString = jsonMatch[0];
let parsedData;
// 3. 核心转换:把字符串 JSON 变成对象
try {
parsedData = JSON.parse(cleanJsonString);
} catch (error) {
throw new Error(`JSON 解析失败: ${error.message}.`);
}
// 4. 输出结果:提供结构化数据给下游节点
return {
Title: parsedData.Title,
Summary: parsedData.Summary,
CoverImagePrompt: parsedData.CoverImagePrompt
};