在VPS上使用Ollama和Claude构建n8n AI工作流
通过两条路径将n8n连接到AI模型:Ollama提供免费本地推理,Claude API提供云端智能。在自托管VPS上同时使用两者构建内容分类工作流。
n8n内置了基于LangChain的AI节点。你可以通过Ollama接入本地模型,或通过Claude API接入云端模型。两种方式的连接方法相同:作为n8n AI Agent节点内部的子节点。本教程在自托管VPS上配置这两条路径,构建一个实用的内容分类工作流,并演示如何通过更换一个节点在本地推理和云端推理之间切换。
如果你还没有安装n8n,请先参考我们的指南:在VPS上使用Docker Compose安装n8n。
在n8n中添加AI之前需要什么?
你需要一个在VPS上通过Docker Compose运行的n8n实例、一个配置了TLS的域名以及SSH访问权限。使用Ollama需要VPS至少有8 GB内存来运行小型模型(70-80亿参数)。使用Claude需要一个Anthropic API密钥。Ollama在CPU上运行不需要GPU,但推理速度会较慢。
前提条件清单:
- 至少8 GB内存的VPS(推荐4 vCPU)。Virtua Cloud VCS-8非常合适。
- 通过Docker Compose运行的n8n(参见n8n安装指南)
- 以非root用户通过SSH访问,且具有sudo权限
- 指向VPS的域名并配置好TLS(参见我们的反向代理和认证指南)
- Claude路径需要:一个Anthropic控制台账户及API密钥
如何将Ollama添加到n8n的Docker Compose配置中?
在现有Docker Compose文件中添加Ollama作为服务,与n8n在同一网络上。n8n通过Docker内部DNS使用服务名作为主机名来访问Ollama。不需要API密钥。Ollama仅在内部网络中运行,永远不会暴露到互联网。
打开现有的docker-compose.yml,添加ollama服务:
services:
# ... 你现有的n8n服务 ...
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
networks:
- n8n-network
environment:
- OLLAMA_HOST=0.0.0.0
deploy:
resources:
limits:
memory: 6G
reservations:
memory: 4G
healthcheck:
test: ["CMD", "ollama", "ps"]
interval: 30s
timeout: 10s
retries: 3
volumes:
# ... 你现有的卷 ...
ollama_data:
这份配置的要点:
- 没有发布端口。 Ollama在容器内监听11434端口,但我们没有映射到宿主机。只有
n8n-network上的容器能访问它。这防止了互联网上任何人使用你的Ollama实例。 OLLAMA_HOST=0.0.0.0告诉Ollama在容器内所有接口上监听。不设置这个参数的话,它只绑定到localhost,n8n就无法从另一个容器访问它。- 内存限制防止Ollama耗尽VPS的全部内存。根据模型大小调整数值。
- 健康检查使用
ollama ps来查询服务器状态。如果Ollama无响应,Docker会重启容器。Ollama镜像中没有curl,所以我们使用内置CLI。
如果你的VPS有NVIDIA GPU并且已安装NVIDIA Container Toolkit,可以添加GPU直通:
ollama:
# ... 与上面相同,另外加上:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
启动更新后的服务栈:
docker compose up -d ollama
验证Ollama是否在运行:
docker compose logs ollama --tail 20
输出显示Listening on [::]:11434。现在拉取一个模型:
docker compose exec ollama ollama pull llama3.2:3b
这会下载30亿参数的Llama 3.2模型(约2 GB)。对于8 GB内存的VPS,这是最安全的起点。其他选项请参见下面的模型选型表。
验证模型已加载:
docker compose exec ollama ollama list
直接测试推理:
docker compose exec ollama ollama run llama3.2:3b "Say hello in one sentence"
你应该在几秒钟内收到响应。如果一切正常,Ollama就准备好连接n8n了。
如何为VPS选择合适的Ollama模型?
合适的模型取决于你的可用内存。经验法则:在Q4量化下,10亿参数大约需要1 GB内存。在没有GPU的VPS上,模型在CPU上运行,速度较慢但对批处理和后台工作流来说完全可用。
| 模型 | 参数量 | 磁盘大小 | 所需内存 | 适用场景 |
|---|---|---|---|---|
| llama3.2:3b | 30亿 | ~2 GB | 4 GB | 轻量任务,内存有限 |
| llama3.1:8b | 80亿 | ~4.9 GB | 8 GB | 通用场景,128K上下文 |
| mistral:7b | 70亿 | ~4.4 GB | 7 GB | 快速推理,欧洲模型 |
| qwen2.5:7b | 70亿 | ~4.7 GB | 8 GB | 多语言,编码任务 |
| gemma3:4b | 40亿 | ~3.3 GB | 5 GB | 多模态,良好的质量/大小比 |
在4 vCPU、8 GB内存的VPS上(如Virtua Cloud VCS-8),llama3.2:3b运行后仍有足够空间给n8n和操作系统。7-8B的模型可以装下但余量更少。对于这些模型,建议考虑16 GB内存的VPS。
继续之前请先拉取你选择的模型。以下所有步骤适用于表中的任何模型。
如何将n8n连接到Claude API?
在n8n中使用你的API密钥创建一个Anthropic凭证。然后在任何AI Agent工作流中使用Anthropic Chat Model子节点。n8n原生处理API调用,不需要HTTP Request节点。
生成API密钥
- 前往Anthropic Console > Settings > API Keys
- 点击Create Key
- 取一个容易识别的名称,如
n8n-vps - 立即复制密钥。你不会再看到它。
妥善保管密钥。不要把它粘贴到磁盘上的文件中。你将直接在n8n的凭证管理器中输入它,凭证管理器会对其加密。
在n8n中添加凭证
- 在n8n中,点击左侧边栏的Credentials
- 点击Add Credential
- 搜索Anthropic API
- 粘贴你的API密钥
- 点击Save
n8n在保存时会测试连接。输出显示"Connection tested successfully"。如果失败,检查你的API密钥是否有效以及你的VPS是否能访问https://api.anthropic.com(出站HTTPS不能被防火墙阻止)。
n8n的AI Agent系统是如何工作的?
n8n的AI能力基于LangChain构建。架构使用两种类型的节点:根节点(也称集群节点)定义代理的行为,子节点提供特定功能,如语言模型、记忆和工具。理解这个结构有助于构建和调试工作流。
根节点:
- AI Agent节点:主编排器。它接收输入,发送给语言模型,可以使用工具,并返回响应。这是你最常用的节点。
- Basic LLM Chain:比Agent更简单。接收输入,发送给LLM,返回输出。不能使用工具,没有推理循环。
子节点(附加到根节点):
- Chat Model(Ollama Chat Model或Anthropic Chat Model):生成响应的LLM
- Memory(Window Buffer Memory等):存储对话历史
- Tools(HTTP Request、Code、Calculator等):代理可以执行的操作
- Output Parser:将LLM响应结构化为可用数据
关键点:在Ollama和Claude之间切换只需要更换一个子节点。工作流的其余部分保持不变。这就是为什么n8n的架构非常适合同时测试本地和云端推理。
如何在n8n中构建AI分类工作流?
这个工作流通过webhook接收内容,将其发送给LLM进行分类和摘要,然后根据紧急程度路由结果。这是邮件分拣、工单路由或内容审核的实用模式。我们先用Ollama构建,然后切换到Claude。
第1步:创建webhook触发器
- 在n8n中创建一个新工作流
- 添加一个Webhook节点作为触发器
- 将HTTP方法设置为
POST - 将路径设置为类似
classify的值 - 在Response下,选择"Respond to Webhook"(稍后我们会添加这个节点)
- 保存并记下测试webhook URL
webhook将接收如下JSON:
{
"title": "Server disk full alert",
"body": "Production server db-01 has reached 95% disk usage. Immediate action required.",
"source": "monitoring"
}
第2步:添加带Ollama的AI Agent节点
- 在webhook后添加一个AI Agent节点
- 在Agent设置中,设定系统提示词:
You are a content classifier. For each incoming message, respond with valid JSON only:
{
"urgency": "high" or "low",
"category": "infrastructure" or "security" or "billing" or "general",
"summary": "one sentence summary"
}
Do not include any text outside the JSON object.
-
将Ollama Chat Model子节点连接到Agent:
- 点击AI Agent上的Chat Model连接器
- 选择Ollama Chat Model
- 在凭证下拉菜单中,点击Create New
- 将Base URL设置为
http://ollama:11434(Docker服务名) - 保存凭证
- 选择你的模型(如
llama3.2:3b)
-
将webhook输出连接到AI Agent输入。使用表达式映射消息文本:
Title: {{ $json.title }}
Body: {{ $json.body }}
Source: {{ $json.source }}
第3步:解析并路由响应
- 在AI Agent之后添加一个IF节点
- 设置条件:检查AI响应是否包含
"urgency": "high",或解析JSON并检查urgency字段 - True分支(高紧急度):添加通知节点(Slack、邮件或HTTP Request到你的告警端点)
- False分支(低紧急度):添加其他操作(记录到电子表格、发送摘要邮件等)
- 在每个分支末尾添加Respond to Webhook节点以返回分类结果
第4步:测试工作流
激活工作流进行测试。发送一个测试请求:
curl -X POST https://your-n8n-domain.com/webhook-test/classify \
-H "Content-Type: application/json" \
-d '{
"title": "Server disk full alert",
"body": "Production server db-01 reached 95% disk usage. Immediate action required.",
"source": "monitoring"
}'
查看n8n的执行历史。输出显示:
- webhook接收到了payload
- AI Agent将其发送给了Ollama
- Ollama返回了JSON分类结果
- IF节点将其路由到了正确的分支
仔细观察AI Agent节点上的执行时间。使用CPU上的Ollama(llama3.2:3b),预计需要3-8秒,具体取决于VPS规格。这对后台自动化来说足够了,但对实时面向用户的响应来说太慢。
同一个工作流在Ollama和Claude上的表现有何不同?
从Ollama切换到Claude大约需要30秒。工作流结构保持不变。只有Chat Model子节点需要更换。
- 点击AI Agent节点
- 删除Ollama Chat Model子节点
- 添加Anthropic Chat Model子节点替代
- 选择你的Anthropic凭证
- 选择模型(如
claude-sonnet-4-6) - 运行相同的测试curl命令
并排比较:
| 方面 | Ollama(llama3.2:3b,CPU) | Claude(claude-sonnet-4-6) |
|---|---|---|
| 响应时间 | 3-8秒 | 0.5-1.5秒 |
| JSON格式化 | 偶尔在JSON外添加文本 | 可靠地遵循JSON-only指令 |
| 分类准确度 | 对明确案例表现良好 | 对模糊或微妙内容表现更好 |
| 每次请求成本 | 免费 | 按token计费(参见Anthropic定价) |
| 数据隐私 | 内容永远不离开你的VPS | 内容发送到Anthropic的API |
输出格式相同。你的IF节点和路由逻辑不需要修改。这使得用Ollama进行开发和测试,然后切换到Claude用于需要速度或更好推理能力的生产工作流非常实用。
什么时候应该使用本地LLM而不是云端API?
当数据隐私很重要、你想要零API成本、或者处理的批量任务可以容忍延迟时,使用Ollama。当你需要快速响应、强大的推理能力、或处理实时面向用户的工作流时,使用Claude。你可以在n8n中通过更换一个子节点来切换模型,所以这不是一个不可逆的决定。
选择Ollama的场景:
- 敏感数据不能离开你的基础设施(医疗记录、财务数据、内部文档)
- 你运行批处理任务,每个请求几秒钟的延迟可以接受(每晚邮件摘要、日志分析)
- 你想要可预测的成本。VPS费用之后,无论多少请求,推理都是免费的
- 你在快速原型开发和迭代,不想担心API账单
选择Claude的场景:
- 你需要亚秒级响应用于面向用户的功能(聊天机器人、实时分类)
- 任务需要强大的推理能力或细致的理解(法律文档分析、复杂摘要)
- 你处理少量但高价值的请求,质量比成本更重要
- 你需要非常长的上下文窗口(Claude Sonnet支持最多1M token)
**混合方案:**很多生产环境同时使用两者。将简单、高频任务路由到Ollama。将复杂、低频任务路由到Claude。n8n的IF节点可以检查传入数据并选择正确的路径。
如何将Qdrant RAG添加到n8n AI工作流中?
RAG(Retrieval-Augmented Generation,检索增强生成)让你的AI工作流在生成响应之前搜索你自己的文档。将Qdrant作为向量存储添加到Docker Compose配置中。n8n有原生的Qdrant节点,可以作为工具连接到AI Agent。
将Qdrant添加到你的docker-compose.yml:
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
restart: unless-stopped
volumes:
- qdrant_data:/qdrant/storage
networks:
- n8n-network
environment:
- QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY}
volumes:
qdrant_data:
为Qdrant生成一个强API密钥:
openssl rand -base64 32
将密钥添加到你的.env文件:
QDRANT_API_KEY=<your-generated-key>
设置.env文件的严格权限:
chmod 600 .env
启动Qdrant:
docker compose up -d qdrant
现在在n8n中你可以:
- 添加Qdrant Vector Store节点作为AI Agent的工具
- 创建Ollama Embeddings子节点(或使用其他嵌入模型)来向量化你的文档
- 构建一个摄取工作流将文档加载到Qdrant中
- AI Agent在生成响应之前会在Qdrant中搜索相关上下文
RAG是一个深入的话题。完整的教程请参见我们的指南:在VPS上自托管AI代理。n8n自托管AI入门套件将n8n、Ollama、Qdrant和PostgreSQL打包在一个Docker Compose文件中。它是RAG架构的良好参考,不过它的设计偏向概念验证而非生产环境。
VPS上AI工作流的资源需求是什么?
在VPS上运行Ollama需要足够的内存来容纳模型、操作系统和其他服务。n8n本身使用约300-500 MB。Docker开销再增加200-300 MB。剩余部分给Ollama和你选择的模型。CPU核心数影响推理速度,但不影响模型是否能加载。
资源规划表:
| VPS规格 | Ollama可用内存 | 最佳模型匹配 | 工作流类型 |
|---|---|---|---|
| 4 GB内存 | ~2.5 GB | llama3.2:3b(紧张) | 仅轻量分类 |
| 8 GB内存 | ~5-6 GB | llama3.2:3b或mistral:7b | 通用自动化 |
| 16 GB内存 | ~12-13 GB | llama3.1:8b或qwen2.5:14b | 复杂代理,RAG |
| 32 GB内存 | ~28 GB | 多个模型同时加载 | 生产级多代理 |
如果你只使用Claude API路径(不用Ollama),4 GB内存的VPS就足够运行n8n。LLM运行在Anthropic的基础设施上。
部署后监控资源使用:
docker stats --no-stream
这会显示每个容器的CPU和内存消耗。在推理期间关注Ollama容器。处理请求时内存使用会飙升,之后回落。
检查Ollama日志以排查性能问题:
docker compose logs ollama --tail 50
如果看到内存不足的错误,切换到更小的模型或增加VPS内存。
故障排除
n8n无法连接到Ollama:
- 验证两个容器是否在同一Docker网络上:
docker network inspect n8n-network - 检查Ollama凭证的Base URL是否为
http://ollama:11434(不是localhost) - 检查Ollama是否在运行:
docker compose exec ollama ollama ps - 检查是否在Ollama环境中设置了
OLLAMA_HOST=0.0.0.0
Ollama缓慢或无响应:
- 检查内存:
docker stats ollama - 尝试更小的模型。3B模型在CPU上比8B快很多。
- 如果推理超过30秒,模型可能对你的内存来说太大了。Ollama会交换到磁盘,这会严重影响性能。
Claude API返回错误:
- 在n8n凭证中验证你的API密钥(必要时重新输入)
- 检查VPS的出站HTTPS:
curl -I https://api.anthropic.com - 查看n8n执行日志中的具体错误信息。常见问题:密钥过期、速率限制、余额不足。
AI Agent返回混乱或非JSON输出:
- 改进系统提示词。明确说明输出格式。
- Claude比小型本地模型更可靠地遵循格式指令。
- 添加Output Parser子节点(Structured Output Parser)来强制执行JSON schema。
- 使用Ollama时,较大的模型(8B+)比3B模型更好地遵循指令。
日志在哪里?
# n8n logs
docker compose logs n8n --tail 100
# Ollama logs
docker compose logs ollama --tail 100
# All services
docker compose logs --tail 50
n8n还在其Web界面的左侧边栏Executions中保存执行历史。每次执行会显示每个节点的输入/输出,这是调试工作流问题最快的方式。
版权所有 2026 Virtua.Cloud。保留所有权利。 本内容为 Virtua.Cloud 团队原创作品。 未经书面许可,禁止复制、转载或再分发。