在VPS上使用Ollama和Claude构建n8n AI工作流

3 分钟阅读·Matthieu·self-hostedlangchaindocker-composeai-workflowsclaudeollaman8n|

通过两条路径将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密钥

  1. 前往Anthropic Console > Settings > API Keys
  2. 点击Create Key
  3. 取一个容易识别的名称,如n8n-vps
  4. 立即复制密钥。你不会再看到它。

妥善保管密钥。不要把它粘贴到磁盘上的文件中。你将直接在n8n的凭证管理器中输入它,凭证管理器会对其加密。

在n8n中添加凭证

  1. 在n8n中,点击左侧边栏的Credentials
  2. 点击Add Credential
  3. 搜索Anthropic API
  4. 粘贴你的API密钥
  5. 点击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触发器

  1. 在n8n中创建一个新工作流
  2. 添加一个Webhook节点作为触发器
  3. 将HTTP方法设置为POST
  4. 将路径设置为类似classify的值
  5. Response下,选择"Respond to Webhook"(稍后我们会添加这个节点)
  6. 保存并记下测试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节点

  1. 在webhook后添加一个AI Agent节点
  2. 在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.
  1. Ollama Chat Model子节点连接到Agent:

    • 点击AI Agent上的Chat Model连接器
    • 选择Ollama Chat Model
    • 在凭证下拉菜单中,点击Create New
    • 将Base URL设置为http://ollama:11434(Docker服务名)
    • 保存凭证
    • 选择你的模型(如llama3.2:3b
  2. 将webhook输出连接到AI Agent输入。使用表达式映射消息文本:

Title: {{ $json.title }}
Body: {{ $json.body }}
Source: {{ $json.source }}

第3步:解析并路由响应

  1. 在AI Agent之后添加一个IF节点
  2. 设置条件:检查AI响应是否包含"urgency": "high",或解析JSON并检查urgency字段
  3. True分支(高紧急度):添加通知节点(Slack、邮件或HTTP Request到你的告警端点)
  4. False分支(低紧急度):添加其他操作(记录到电子表格、发送摘要邮件等)
  5. 在每个分支末尾添加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的执行历史。输出显示:

  1. webhook接收到了payload
  2. AI Agent将其发送给了Ollama
  3. Ollama返回了JSON分类结果
  4. IF节点将其路由到了正确的分支

仔细观察AI Agent节点上的执行时间。使用CPU上的Ollama(llama3.2:3b),预计需要3-8秒,具体取决于VPS规格。这对后台自动化来说足够了,但对实时面向用户的响应来说太慢。

同一个工作流在Ollama和Claude上的表现有何不同?

从Ollama切换到Claude大约需要30秒。工作流结构保持不变。只有Chat Model子节点需要更换。

  1. 点击AI Agent节点
  2. 删除Ollama Chat Model子节点
  3. 添加Anthropic Chat Model子节点替代
  4. 选择你的Anthropic凭证
  5. 选择模型(如claude-sonnet-4-6
  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中你可以:

  1. 添加Qdrant Vector Store节点作为AI Agent的工具
  2. 创建Ollama Embeddings子节点(或使用其他嵌入模型)来向量化你的文档
  3. 构建一个摄取工作流将文档加载到Qdrant中
  4. 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 团队原创作品。 未经书面许可,禁止复制、转载或再分发。

准备好亲自尝试了吗?

在VPS上自托管n8n并集成AI。

查看 VPS 方案