项目介绍

n8n(发音 "nodemation")是一款开源的工作流自动化平台,允许你通过可视化拖拽界面连接各种应用和服务,自动化重复性任务。它被广泛视为 Zapier、Make(原 Integromat)的开源自托管替代方案。

与 SaaS 平台不同,n8n 可以部署在你自己的服务器上,数据完全可控,工作流数量不受限制,也没有按执行次数收费的限制。在 GitHub 上拥有超过 10 万星,社区非常活跃。

项目信息详情
开发团队n8n GmbH(德国柏林)
GitHub Stars100,000+
官方网站n8n.io
开源协议Sustainable Use License(社区版免费自托管)
技术栈TypeScript / Node.js / Vue.js
内置集成400+ 应用节点
部署方式Docker / npm / n8n Cloud
一句话理解:n8n 就像"程序员的 IFTTT" — 但比 IFTTT 强大 100 倍,支持复杂分支逻辑、代码节点、AI 调用,而且可以自己部署、免费无限用。

n8n vs 其他自动化平台

对比维度 n8n Zapier Make (Integromat) Dify
开源 是(可自托管)
免费额度 自托管无限制 100 次/月 1,000 次/月 自托管无限制
集成数量 400+ 7,000+ 1,500+ 偏 AI 领域
代码能力 JS/Python 代码节点 有限 部分支持 Python 代码节点
AI 原生支持 AI Agent / LLM 节点 通过集成 通过集成 核心能力
数据隐私 数据在你的服务器 数据在 Zapier 云端 数据在 Make 云端 数据在你的服务器
学习曲线 中等 简单 中等 中等
适用场景 通用自动化 + AI 简单自动化 复杂数据处理 AI 应用开发
选择建议:如果你重视数据隐私、需要无限制运行、想要代码级灵活性和 AI 集成能力,n8n 是最佳选择。如果追求开箱即用和最多的第三方集成,Zapier 更方便。

安装部署

方式 1 Docker 部署(推荐)

最简单可靠的部署方式,一行命令启动:
# 快速启动(数据保存在 Docker Volume)
docker run -d --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  n8nio/n8n
启动后访问 http://localhost:5678 即可使用。

Docker Compose 部署(生产环境推荐):
# docker-compose.yml version: "3.8" services: n8n: image: n8nio/n8n restart: always ports: - "5678:5678" environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=your-strong-password - N8N_HOST=n8n.yourdomain.com - N8N_PROTOCOL=https - WEBHOOK_URL=https://n8n.yourdomain.com/ - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_DATABASE=n8n - DB_POSTGRESDB_USER=n8n - DB_POSTGRESDB_PASSWORD=n8n-db-password volumes: - n8n_data:/home/node/.n8n depends_on: - postgres postgres: image: postgres:16-alpine restart: always environment: - POSTGRES_DB=n8n - POSTGRES_USER=n8n - POSTGRES_PASSWORD=n8n-db-password volumes: - postgres_data:/var/lib/postgresql/data volumes: n8n_data: postgres_data:
注意:生产环境务必修改默认密码,配置 HTTPS,使用 PostgreSQL 替代默认的 SQLite 数据库。

方式 2 npm 全局安装

适合开发和测试环境:
# 要求 Node.js >= 18
npm install -g n8n

# 启动
n8n start

# 或指定端口
n8n start --port 5678

方式 3 n8n Cloud(托管服务)

如果不想自己维护服务器,可以使用 n8n 官方的云服务:
- 访问 n8n.io/cloud 注册账号
- 免费试用 14 天
- 付费方案从 $20/月起
- 自动更新、备份、SSL 等运维由官方处理

方式 4 一键部署到云平台

多个云平台支持一键部署 n8n:
- Railway:点击即部署,免费额度可用
- Render:支持免费实例(有休眠限制)
- Hetzner / Contabo:便宜的 VPS 自建,4 欧/月起
- 宝塔面板:国内 VPS 用户可通过宝塔 + Docker 快速部署

核心概念

概念 1 工作流(Workflow)

工作流是 n8n 的核心单元,由一组连接的节点(Nodes)组成,定义了数据从输入到处理到输出的完整流程。每个工作流可以:
- 手动触发或自动触发
- 包含分支(IF/Switch)和循环逻辑
- 处理错误和重试
- 被其他工作流调用(子工作流)
┌──────────┐ ┌───────────┐ ┌─────────┐ ┌──────────┐ │ Trigger │───▶│ Process │───▶│ Filter │───▶│ Output │ │ (Webhook)│ │(HTTP/Code)│ │ (IF/SW) │ │(Slack/DB)│ └──────────┘ └───────────┘ └────┬────┘ └──────────┘ │ 否 ▼ ┌──────────┐ │ Log │ │ (记录跳过)│ └──────────┘

概念 2 节点(Node)

节点是工作流的基本构建块,每个节点执行一个特定操作。n8n 提供 400+ 内置节点,分为几类:

触发节点(Trigger):工作流的起点
- Webhook — 接收 HTTP 请求触发
- Schedule — 按 cron 表达式定时触发
- Email Trigger — 收到邮件时触发
- Telegram/Slack Trigger — 收到消息时触发

操作节点(Action):执行具体任务
- HTTP Request — 调用任意 API
- Code — 执行 JavaScript / Python 代码
- Gmail / Outlook — 发送邮件
- Google Sheets — 读写表格
- MySQL / PostgreSQL — 数据库操作
- Slack / 飞书 / Telegram — 发送消息

逻辑节点(Flow):控制流程
- IF — 条件分支
- Switch — 多条件路由
- Loop — 循环处理
- Merge — 合并多个分支的数据
- Wait — 延时等待

概念 3 凭据(Credentials)

凭据用于安全存储第三方服务的认证信息(API Key、OAuth Token 等)。
- 在 n8n 中统一管理,加密存储
- 一个凭据可以被多个工作流复用
- 支持 OAuth2 自动刷新 Token
- 路径:Settings → Credentials → Add Credential
安全提示:n8n 使用 AES-256 加密凭据。自托管时请确保 N8N_ENCRYPTION_KEY 环境变量已设置且妥善保管,丢失该密钥将无法恢复已存储的凭据。

概念 4 表达式(Expressions)

n8n 使用表达式在节点间传递和转换数据,语法基于 JavaScript:
// 引用上一个节点的输出 {{ $json.email }} // 引用特定节点的输出 {{ $('HTTP Request').item.json.data.name }} // 使用 JavaScript 处理数据 {{ $json.price * 0.8 }} // 打八折 {{ $json.name.toUpperCase() }} // 转大写 {{ new Date().toISOString() }} // 当前时间 // 条件表达式 {{ $json.status === 'active' ? '启用' : '禁用' }}

实战场景

场景 1 GitHub Star 通知机器人

当有人 Star 你的 GitHub 仓库时,自动发送飞书/Slack 通知:
GitHub Trigger ──▶ IF (event=star) ──▶ 飞书消息 (watch) │ 否 ▼ (跳过)
配置步骤:
1. 添加 GitHub Trigger 节点,选择你的仓库,监听 star 事件
2. 添加 IF 节点,条件:{{ $json.action }} === 'created'(新增 Star)
3. 添加飞书/Slack 节点,消息模板:
🌟 新 Star!{{ $json.sender.login }} 给 {{ $json.repository.full_name }} 点了星
当前 Stars: {{ $json.repository.stargazers_count }}

场景 2 RSS 新闻聚合 + 翻译 + 推送

自动聚合多个英文 RSS 源,翻译成中文后推送到 Telegram:
Schedule (每小时) ──▶ RSS Read ──▶ AI翻译 ──▶ Telegram │ (多个RSS源)
配置步骤:
1. Schedule Trigger:每小时执行一次
2. RSS Read 节点:配置多个新闻源 URL
3. AI Agent / OpenAI 节点:将标题和摘要翻译成中文
4. Telegram 节点:格式化后发送到指定群组
5. 添加 Remove Duplicates 节点避免重复推送

场景 3 表单提交 → 自动发邮件 + 写入表格

网站表单提交后,自动发送确认邮件并将数据记录到 Google Sheets:
Webhook (POST) ──▶ Gmail (发确认邮件) ──▶ Google Sheets (追加行) ──▶ Slack (通知管理员)
配置步骤:
1. Webhook 节点:创建接收表单数据的 URL
2. 用 Set 节点规范化字段名
3. 并行输出到三个节点:Gmail 发确认信、Sheets 记录数据、Slack 通知团队
4. 将 Webhook URL 配置到你的网站表单 action 属性

场景 4 电商订单监控 + 自动客服

监控电商平台新订单,自动回复客户并更新库存:
Schedule (每5分钟) ──▶ HTTP Request ──▶ IF (新订单?) ──▶ 发送确认邮件 (检查订单API) (获取订单) │ 是 ──▶ 更新库存(DB) │ ──▶ 飞书通知仓库 │ 否 ▼ (结束)

场景 5 数据库定时备份 + 告警

每天自动备份数据库,失败时发送告警:
# Code 节点中执行备份命令
const { execSync } = require('child_process');
const filename = `backup_${new Date().toISOString().slice(0,10)}.sql`;
try {
  execSync(`pg_dump -h localhost -U n8n n8n > /backups/${filename}`);
  return [{ json: { status: 'success', file: filename } }];
} catch (err) {
  return [{ json: { status: 'failed', error: err.message } }];
}
配合 IF 节点判断状态,失败时发邮件/飞书告警,成功时上传到 S3/OSS。

场景 6 多平台内容同步发布

写一篇文章,自动同步发布到微信公众号、知乎、掘金、Twitter 等多个平台:
Webhook ──▶ AI (生成各平台格式) ──▶ Twitter API (原始文章) ──▶ 知乎 API ──▶ 掘金 API ──▶ 公众号 API
利用 AI 节点自动调整内容长度和格式,适配不同平台的要求。

AI 集成:n8n 的杀手级特性

n8n 在 AI 集成方面投入了大量精力,原生支持多种 AI 能力,是构建 AI 自动化工作流的利器。

AI 1 LLM 节点 — 直接调用大语言模型

n8n 内置 AI 节点,支持主流 LLM 提供商:
- OpenAI(GPT-4o / GPT-4 Turbo)
- Anthropic(Claude 4.5/4.6 Sonnet/Opus)
- Google(Gemini Pro/Ultra)
- Ollama(本地模型,如 DeepSeek、Llama、Qwen)
- OpenRouter(聚合多家 API)
省钱技巧:配合 Ollama 节点使用本地模型,完全免费。参考站内文章:Ollama 本地运行大语言模型

AI 2 AI Agent 节点 — 让 AI 自主决策

AI Agent 节点让 LLM 拥有工具调用能力,可以自主决定使用哪些工具完成任务:
用户问题 ──▶ AI Agent ──▶ 思考需要什么工具 │ │ ▼ ▼ ┌───────┐ ┌──────────┐ ┌────────┐ │搜索网页│ │查询数据库│ │调用 API│ └───────┘ └──────────┘ └────────┘ │ │ │ └─────────▶ 合并结果 ──▶ 生成回复
例如:用户问"今天北京天气如何?帮我发到群里",AI Agent 自动调用天气 API → 格式化结果 → 发送到飞书群。

AI 3 向量数据库 + RAG 知识库

n8n 支持构建 RAG(检索增强生成)知识库工作流:
1. 向量存储:支持 Pinecone、Qdrant、Supabase、PGVector 等
2. 文档加载:从 PDF、网页、Google Drive、Notion 等导入文档
3. Embedding:使用 OpenAI / Ollama 生成向量
4. 检索问答:用户提问 → 检索相关文档 → LLM 生成回答
实战案例:搭建企业内部知识库机器人 — 将公司文档导入向量数据库,员工通过飞书/Slack 提问,AI 自动检索相关文档给出准确回答。

AI 4 AI 文本处理工作流示例

示例:客户反馈自动分析
Webhook ──▶ AI (情感分析) ──▶ Switch (收到反馈) │ 正面/负面/中性 │ │ ├─ 正面 → Google Sheets (记录好评) │ ├─ 负面 → Slack (紧急通知客服) │ └─ 中性 → Email (标准回复)
利用 LLM 进行情感分析、内容分类、关键词提取、自动摘要等,替代传统的正则表达式和规则引擎。

运维与安全

运维 1 反向代理 + HTTPS

生产环境必须配置 HTTPS。使用 Nginx 反向代理:
# /etc/nginx/sites-available/n8n server { listen 443 ssl; server_name n8n.yourdomain.com; ssl_certificate /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem; location / { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; } }
使用 certbot --nginx 自动配置 Let's Encrypt SSL 证书。

运维 2 数据备份

定期备份 n8n 数据,防止丢失工作流和凭据:
# SQLite 备份(默认数据库)
cp ~/.n8n/database.sqlite ~/.n8n/backup/database_$(date +%Y%m%d).sqlite

# PostgreSQL 备份
pg_dump -h localhost -U n8n n8n > n8n_backup_$(date +%Y%m%d).sql

# 备份工作流(导出 JSON)
# 在 n8n UI 中:Settings → Export All Workflows
重要:同时备份 N8N_ENCRYPTION_KEY!没有这个密钥,备份的凭据将无法恢复。

运维 3 监控与日志

执行日志:n8n 自带工作流执行历史,可查看每次执行的输入输出和耗时。
外部监控:
- 使用 UptimeRobot / Better Uptime 监控 n8n 服务是否在线
- 配置 Docker 健康检查:healthcheck: curl -f http://localhost:5678/healthz
- 重要工作流失败时通过邮件/飞书告警(在工作流中配置 Error Trigger)

运维 4 安全加固


- 认证:启用 Basic Auth 或 JWT 认证,禁止匿名访问
- 网络:n8n 端口不要直接暴露到公网,通过 Nginx 反向代理
- 加密密钥:设置 N8N_ENCRYPTION_KEY 加密敏感凭据
- Code 节点限制:设置 N8N_BLOCK_ENV_ACCESS_IN_NODE=true 阻止代码节点读取环境变量
- 执行模式:生产环境设置 EXECUTIONS_MODE=queue + Redis 实现队列模式
- 更新:定期更新到最新版本修复安全漏洞

常见问题与解决方案(50 个)

按类别整理,涵盖安装部署、工作流配置、节点使用、AI 集成、性能优化等方面。

一、安装与部署 (10 个)

#1 Docker 启动后无法访问 5678 端口

curl: (7) Failed to connect to localhost port 5678: Connection refused
检查步骤:
1. 确认容器正在运行:docker ps | grep n8n
2. 查看容器日志:docker logs n8n
3. 确认端口映射正确:-p 5678:5678
4. 如果在云服务器,检查安全组/防火墙是否放行 5678 端口

#2 SQLite 数据库锁定错误

SQLITE_BUSY: database is locked
SQLite 不支持高并发。解决方法:
1. 迁移到 PostgreSQL(生产环境推荐)
2. 设置 DB_SQLITE_VACUUM_ON_STARTUP=true
3. 减少同时活跃的工作流数量

#3 更新 n8n 后工作流无法运行

Node type "n8n-nodes-base.xxx" is not known
大版本更新可能包含破坏性变更。解决方法:
1. 查看 更新日志 了解变更内容
2. 备份后再更新:docker cp n8n:/home/node/.n8n ./n8n_backup
3. 如需回滚:docker pull n8nio/n8n:旧版本号

#4 Webhook URL 外网无法访问

Webhook 创建成功但外部请求返回 502/504
Webhook 需要外网可达。确认以下配置:
1. 设置 WEBHOOK_URL=https://你的域名/
2. Nginx 反向代理已正确配置(包括 WebSocket 支持)
3. DNS 解析正确指向你的服务器
4. SSL 证书有效

#5 权限错误 — 容器内文件写入失败

EACCES: permission denied, open '/home/node/.n8n/config'
n8n Docker 镜像以 node 用户(UID 1000)运行。如果挂载宿主机目录,需要设置正确的权限:
sudo chown -R 1000:1000 /path/to/n8n-data
# 或使用 Docker Volume(推荐,自动处理权限)

#6 PostgreSQL 连接失败

error: connect ECONNREFUSED 127.0.0.1:5432
Docker Compose 中不要用 localhost,应使用服务名:
1. 设置 DB_POSTGRESDB_HOST=postgres(Docker Compose 服务名)
2. 确认 PostgreSQL 容器已启动且健康
3. 检查数据库名、用户名、密码是否一致

#7 内存不足导致容器被 Kill

Container killed: OOMKilled
n8n 建议最低 2GB 内存。优化方法:
1. 限制执行历史保留:EXECUTIONS_DATA_PRUNE=trueEXECUTIONS_DATA_MAX_AGE=168(7 天)
2. 设置 NODE_OPTIONS=--max-old-space-size=1024
3. 升级服务器内存或使用 swap

#8 中国大陆访问 n8n Cloud 慢

n8n.io 页面加载缓慢或超时
n8n Cloud 服务器在海外。建议国内用户自托管:
1. 在国内 VPS(阿里云/腾讯云)上用 Docker 部署
2. 使用国内 Docker 镜像加速器拉取镜像
3. docker pull registry.cn-hangzhou.aliyuncs.com/n8n/n8n(如有镜像源)

#9 时区不正确

定时任务触发时间与预期不符
Docker 容器默认使用 UTC 时区。设置为中国时区:
# Docker 环境变量
-e GENERIC_TIMEZONE=Asia/Shanghai
-e TZ=Asia/Shanghai

#10 升级后丢失凭据

All credentials show "unknown" after upgrade
凭据使用 N8N_ENCRYPTION_KEY 加密。升级时必须保留相同的密钥。
1. 检查 .env 或 Docker 环境变量中密钥是否一致
2. 如果密钥丢失,旧凭据无法恢复,需要重新配置
3. 教训:务必备份加密密钥到安全位置

二、工作流配置 (10 个)

#11 工作流激活后不触发

工作流已激活但 Schedule/Webhook 不执行
排查步骤:
1. 确认工作流右上角开关已打开(Active)
2. Schedule 触发器:检查 cron 表达式是否正确、时区是否正确
3. Webhook 触发器:确认 Webhook URL 外网可达
4. 检查 Gateway 日志是否有错误

#12 表达式引用数据返回 undefined

{{ $json.xxx }} 返回 undefined
原因:字段名拼写错误或上游节点没有输出该字段。排查方法:
1. 点击上游节点查看实际输出的 JSON 结构
2. 使用 {{ JSON.stringify($json) }} 查看完整数据
3. 嵌套字段用 {{ $json.data?.items?.[0]?.name }}(可选链)

#13 循环执行陷入死循环

工作流执行超时或消耗大量资源
Loop 节点或递归子工作流可能导致死循环。
1. 始终设置最大迭代次数上限
2. 在 Loop 内添加 IF 退出条件
3. 设置工作流超时:EXECUTIONS_TIMEOUT=300(300 秒)

#14 并行分支数据合并出错

Merge 节点输出的数据数量不对或顺序混乱
Merge 节点有多种模式:
- Append:简单拼接(适合不同结构的数据)
- Combine:按位置或字段匹配合并(适合关联数据)
- Choose Branch:只保留一个分支的结果
确认选择了正确的合并模式。

#15 大数据量处理导致超时

WorkflowExecuteAdditionalData timeout exceeded
处理大量数据时:
1. 使用 Split In Batches 节点分批处理
2. 增加超时时间:EXECUTIONS_TIMEOUT=600
3. 大数据处理拆成多个子工作流
4. 考虑使用 Code 节点直接处理(比拖拽节点更高效)

#16 Error Workflow 不触发

工作流失败了但错误处理工作流没有执行
确认配置步骤:
1. 创建独立的错误处理工作流(以 Error Trigger 节点开始)
2. 在主工作流的 Settings 中指定 Error Workflow
3. 错误处理工作流也必须是 Active 状态
4. 手动测试执行不会触发 Error Workflow,只有 Active 模式下的执行才会

#17 子工作流调用失败

Could not find workflow with id "xxx"
子工作流通过 Execute Workflow 节点调用。
1. 确认子工作流 ID 正确(在子工作流 URL 中查看)
2. 子工作流必须存在且未被删除
3. 如果使用工作流名称引用,确保名称唯一

#18 工作流导入后凭据丢失

导入的工作流所有节点显示 "Credentials not found"
凭据与工作流是分开存储的,导出工作流 JSON 不包含凭据。
1. 在新环境中重新创建相同的凭据
2. 在每个节点中重新选择凭据
3. 可以通过 API 批量导入凭据

#19 多次触发导致重复执行

同一个 Webhook 请求触发了多次工作流执行
可能原因:
1. 前端代码重复发送请求(检查 JavaScript)
2. Nginx 重试配置导致请求被转发两次
3. 添加去重逻辑:在工作流中用 IF 节点检查请求 ID 是否已处理

#20 二进制数据(文件/图片)处理失败

Binary data is not available / Cannot read binary data
n8n 中 JSON 数据和二进制数据是分开的。
1. 使用 Move Binary Data 节点在 JSON 和二进制之间转换
2. HTTP Request 节点获取文件时选择 Response Format: File
3. 确认二进制数据的字段名引用正确(默认为 data

三、节点使用问题 (10 个)

#21 HTTP Request 返回 401/403

Request failed with status code 401 / 403
API 认证问题:
1. 检查 API Key / Token 是否正确
2. 确认凭据类型选择正确(Bearer Token / API Key / OAuth2)
3. 检查 Token 是否过期,OAuth2 凭据尝试重新授权
4. 部分 API 需要在 Header 中传递特定字段

#22 Code 节点访问不到外部模块

Error: Cannot find module 'axios' / require is not defined
n8n Code 节点默认只能使用内置模块。启用外部模块:
1. 设置环境变量:NODE_FUNCTION_ALLOW_EXTERNAL=axios,lodash,moment
2. 在 n8n 安装目录中安装所需模块:npm install axios
安全提示:允许外部模块可能带来安全风险,只开放你确实需要的模块。

#23 Gmail/Google Sheets OAuth 授权失败

Error: redirect_uri_mismatch
Google OAuth 的回调 URL 必须精确匹配:
1. 在 Google Cloud Console 中设置回调 URL 为:https://你的n8n域名/rest/oauth2-credential/callback
2. 确保 n8n 的 N8N_HOSTWEBHOOK_URL 配置与回调 URL 域名一致
3. OAuth consent screen 状态必须为"已发布"或将你的邮箱加为测试用户

#24 Telegram 节点发送消息失败

Telegram API error: Bad Request: chat not found
常见原因:
1. Chat ID 格式错误 — 群组 ID 需要加负号(如 -1001234567890
2. Bot 没有被加入目标群组
3. Bot 没有发送消息的权限
4. 先私聊 Bot 发一条消息激活对话

#25 MySQL/PostgreSQL 查询超时

Error: Query read timeout
大表查询或复杂 JOIN 可能超时:
1. 优化 SQL 查询(添加索引、限制结果集大小)
2. 在凭据中增大连接超时参数
3. 使用 LIMIT 分页查询,避免一次取全量数据

#26 飞书节点发送富文本消息格式错误

飞书消息只显示纯文本,Markdown 不渲染
飞书 API 的消息格式不同于 Markdown,需要使用飞书的 Interactive Message Card 格式。
1. 使用 HTTP Request 节点调用飞书 API
2. 消息体使用飞书卡片 JSON 格式
3. 参考飞书开放平台的消息卡片搭建工具

#27 Schedule Trigger cron 表达式不生效

定时任务没有在预期时间执行
常见问题:
1. 时区未设置 — 确保 GENERIC_TIMEZONE=Asia/Shanghai
2. Cron 语法错误 — 使用 crontab.guru 验证表达式
3. 工作流未激活 — 确认 Active 开关已打开
4. n8n 刚重启 — 重启后需要等待下一个触发时间

#28 HTTP Request 节点 SSL 错误

Error: unable to verify the first certificate / SELF_SIGNED_CERT_IN_CHAIN
目标 API 使用自签名证书。解决方法:
1. 在 HTTP Request 节点的 Options 中勾选 "Ignore SSL Issues"
2. 或设置环境变量:NODE_TLS_REJECT_UNAUTHORIZED=0(不推荐生产使用)

#29 节点输出数据格式不符合下游要求

下游节点报错:Expected array but got object
n8n 节点间传递的是 JSON 数组。使用以下节点转换数据格式:
1. Set 节点:重命名/删除/添加字段
2. Code 节点:自定义数据转换逻辑
3. Item Lists 节点:拆分/合并/排序数组
4. Rename Keys 节点:批量重命名字段

#30 Webhook 响应返回过慢

Webhook 调用方收到超时(504 Gateway Timeout)
Webhook 节点有两种响应模式:
1. Respond Immediately:立即返回 200,然后异步执行工作流(推荐)
2. Last Node:等工作流执行完后返回结果(可能超时)
对于耗时较长的工作流,使用 "Respond Immediately" 模式。

四、AI 集成问题 (10 个)

#31 OpenAI 节点返回 429 Rate Limit

Error: 429 Rate limit reached for gpt-4o
触发了 OpenAI 的速率限制:
1. 在工作流中添加 Wait 节点控制调用频率
2. 使用 Split In Batches 分批处理
3. 升级 OpenAI 账号的速率限额
4. 考虑使用本地模型(Ollama)替代

#32 Ollama 节点连接失败

Error: connect ECONNREFUSED 127.0.0.1:11434
Docker 中 n8n 和 Ollama 是不同的容器,localhost 不互通:
1. 使用 Docker Compose 把两者放在同一网络
2. Ollama 地址改为容器名:http://ollama:11434
3. 或使用宿主机 IP:http://host.docker.internal:11434

#33 AI Agent 工具调用陷入循环

AI Agent 反复调用同一个工具不给出最终结果
AI Agent 可能陷入工具调用循环:
1. 设置最大迭代次数(Max Iterations)限制
2. 优化 System Prompt,明确告诉 Agent 何时应该给出最终答案
3. 简化可用工具数量,减少 Agent 的选择困难
4. 使用更强的模型(如 GPT-4o / Claude Opus)提高推理能力

#34 AI 响应内容被截断

AI 输出在中间截断,回复不完整
原因是 max_tokens 设置过低:
1. 在 LLM 节点中增大 Max Tokens 参数(如 4096)
2. 如果输入内容过长,先用摘要节点压缩
3. 分批处理长文本

#35 向量数据库 Embedding 失败

Error: Embedding generation failed / dimension mismatch
向量维度不匹配:
1. 确保写入和查询使用同一个 Embedding 模型
2. 不同模型的向量维度不同(OpenAI text-embedding-3-small = 1536 维)
3. 切换模型后需要重新生成所有 Embedding

#36 AI 输出格式不稳定

要求输出 JSON 但有时返回纯文本或 Markdown
提高输出格式一致性:
1. 在 System Prompt 中强调 "你必须且只能输出 JSON 格式"
2. 使用 OpenAI 的 response_format: { type: "json_object" }
3. 在 AI 节点后面加一个 Code 节点做格式验证和修复
4. 使用 temperature = 0 减少随机性

#37 AI 处理速度太慢

单次 AI 调用耗时 30 秒以上
优化 AI 调用性能:
1. 减少输入文本长度(先提取关键信息再给 AI)
2. 使用更快的模型(GPT-4o-mini / Claude Haiku)处理简单任务
3. 本地模型使用 GPU 加速
4. 并行处理:用 Split In Batches 分批并发调用

#38 RAG 检索结果不相关

AI 回答的内容与用户问题不相关
RAG 检索质量优化:
1. 优化文档分块策略(chunk size 500-1000 字,overlap 100-200 字)
2. 提高检索 Top-K 值(从 3 增加到 5-10)
3. 使用更好的 Embedding 模型
4. 在 System Prompt 中指导 AI "如果检索结果不相关,请说明无法回答"

#39 AI Token 费用过高

OpenAI 账单超出预期
控制 AI 使用成本:
1. 小任务用便宜模型(GPT-4o-mini:$0.15/M token),复杂任务用强模型
2. 缓存 AI 响应,相同问题不重复调用
3. 压缩输入数据(去掉无用的 HTML 标签、空白字符)
4. 设置 OpenAI 账户的月度消费上限
5. 考虑本地 Ollama 模型零成本运行

#40 国内无法直接调用 OpenAI API

Error: connect ETIMEDOUT api.openai.com
国内网络无法直接访问 OpenAI。替代方案:
1. 使用 API 代理/中转服务,修改 Base URL
2. 使用国内模型:DeepSeek API、通义千问 API、智谱 API
3. 使用 OpenRouter 聚合 API(支持多家模型)
4. 本地部署 Ollama 跑开源模型,完全无需外网

五、性能优化与进阶 (10 个)

#41 工作流执行历史占用大量磁盘

磁盘空间持续增长,数据库文件越来越大
n8n 默认保留所有执行历史。配置自动清理:
# 环境变量
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168    # 保留 7 天
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none  # 成功执行不保存

#42 高并发 Webhook 性能不够

大量 Webhook 请求时响应变慢或丢失
n8n 默认单进程模式。高并发方案:
1. 使用 Queue Mode:EXECUTIONS_MODE=queue + Redis
2. 部署多个 Worker 实例分担负载
3. 迁移到 PostgreSQL(SQLite 不支持并发写入)
4. Webhook 使用 "Respond Immediately" 模式

#43 如何实现工作流版本控制

想要跟踪工作流的修改历史和回滚
n8n 社区版没有内置版本控制。替代方案:
1. 定期导出工作流 JSON,存入 Git 仓库
2. 使用 n8n API 自动导出:GET /api/v1/workflows
3. 搭建定时备份工作流:Schedule → HTTP Request (n8n API) → Git Push
4. n8n Cloud / Enterprise 版支持内置版本历史

#44 如何在工作流间共享数据

一个工作流的数据想在另一个工作流中使用
跨工作流数据共享方式:
1. 子工作流:通过 Execute Workflow 传参并获取返回值
2. 数据库:写入 Redis / PostgreSQL,另一个工作流读取
3. Static Data:使用 $getWorkflowStaticData() 存储持久化键值
4. 文件:写入文件系统,另一个工作流读取

#45 自定义节点开发

内置节点不满足需求,想要开发自定义节点
n8n 支持社区节点开发:
1. 使用官方脚手架:npx n8n-node-dev new
2. 参考文档:Creating Nodes
3. 发布到 npm,其他用户可通过 Settings → Community Nodes 安装
4. 也可以用 HTTP Request + Code 节点组合实现大多数需求

#46 多用户/团队协作

团队多人如何共用一个 n8n 实例
n8n 社区版支持基本的多用户功能:
1. 在 Settings → Users 中邀请团队成员
2. 通过 Tags 和文件夹组织工作流
3. 凭据可设置共享范围
4. 更细粒度的权限控制需要 Enterprise 版

#47 如何调试复杂工作流

工作流节点多且复杂,难以定位问题
调试技巧:
1. 分段测试:Pin 某个节点的输出数据,从中间节点开始执行
2. 查看数据:点击每个节点查看输入/输出数据
3. Set 节点:插入 Set 节点在中间检查和修改数据
4. Sticky Notes:给复杂逻辑添加注释说明
5. 日志:设置 N8N_LOG_LEVEL=debug 查看详细日志

#48 n8n 与 OpenClaw 如何配合使用

两者功能有重叠,如何取长补短
n8n 和 OpenClaw 定位不同,可以互补:
- n8n 擅长:可视化工作流编排、400+ 应用集成、团队协作
- OpenClaw 擅长:自然语言交互、多渠道消息、浏览器自动化、AI Agent
- 配合方式:OpenClaw 通过 HTTP Request 触发 n8n 工作流,n8n 执行复杂编排后回调 OpenClaw 推送结果

#49 如何监控工作流的运行状态

想实时了解所有工作流的健康状况
监控方案:
1. n8n 内置的执行列表页面(Executions)
2. 创建"元工作流":定期调用 n8n API 检查各工作流状态
3. Error Trigger 统一收集失败信息并推送告警
4. 接入 Prometheus + Grafana:n8n 支持 /metrics 端点(Enterprise)
5. 使用外部监控工具检测 Webhook URL 可达性

#50 n8n 的局限性与替代方案

什么场景不适合用 n8n
n8n 并非万能,以下场景可能需要其他方案:
- 实时流处理:n8n 基于触发-执行模式,不适合毫秒级实时流 → 考虑 Apache Kafka / Flink
- 超大规模数据 ETL:百万级数据处理 → 考虑 Apache Airflow / dbt
- 移动端应用:n8n 是 Web 应用 → 考虑 Shortcuts (iOS) / Tasker (Android)
- 极简自动化:只需 IF-THEN → IFTTT / Apple Shortcuts 更轻量
- 纯 AI 应用开发:以 AI 为核心 → 考虑 Dify / LangChain