2. 自托管 AI:用 n8n + Ollama 在 Mac 上运行本地 AI 工作流
如果你想让 AI 智能体跑在自家电脑上、用自己下载的模型、数据完全不离开机器,那这篇文章就是为你准备的。这是系列文章的第三篇。第一部分我们搭好了 PostgreSQL,第二部分介绍了大语言模型(LLM)的基本概念(模型、参数、量化、上下文、能力、VRAM)。今天把这些概念真正用起来:用 n8n 做工作流,用 Ollama 跑模型。前置条件只有一个:Docker。还没装的话,先按官方指南安装 Docker Desktop for Mac [Docker 文档]。
快速搭建:n8n
最快的路径是使用 n8n 官方的 Self-hosted AI Starter Kit(自托管 AI 入门套件)。它是一个 Docker Compose 模板,自带 n8n、Ollama、Qdrant(向量数据库)和 PostgreSQL,并预先配置好了这几个服务之间的通信 [n8n 文档]。
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git
cd self-hosted-ai-starter-kit
cp .env.example .env # file where your passwords are stored
.env 文件默认是隐藏的。在 Finder 里按 Command + Shift + Period 可以显示隐藏文件,或者直接在终端里编辑它。更新其中的凭据,例如:
POSTGRES_USER = admin
POSTGRES_PASSWORD = root
POSTGRES_DB = n8n
另外,把 N8N_ENCRYPTION_KEY 和 N8N_USER_MANAGEMENT_JWT_SECRET 的值也换成自己生成的随机字符串。
下面是一个 Mac 特有的细节:在 Apple Silicon 芯片上,Docker 无法使用 Mac 的 GPU,所以这套件的 README 建议在 Mac 上原生运行 Ollama 以提升速度,然后让容器通过网络连接它 [starter kit README]。我们正是采用这个方案。在 .env 里设置:
OLLAMA_HOST = host.docker.internal:11434
然后启动全部服务:
docker compose up
打开
ollama pull gemma4 # 下载模型
ollama run gemma4 # 在终端里直接和它聊天
ollama list # 查看所有已下载的模型
Ollama 会在 http://localhost:11434 启动一个 API 服务,n8n 就是通过这个地址来调用它的。如果拿不准某个模型适不适合你的机器配置或当前任务,第二部分会介绍怎么用 VRAM 计算器来检查,以及什么任务该用本地模型、什么任务该交给云端模型。
把 Ollama 接入 n8n
接下来就是有趣的部分了。在 n8n 里,Ollama 以一个模型节点的形式出现,你可以把它直接插到聊天对话和 Agent 里。
第一步:创建凭证。 在 n8n 中进入 Credentials(凭证)页面,新建一个 "Ollama" 凭证,然后填上 base URL(基础地址)。
这里有个坑要注意:n8n 跑在 Docker 容器里,而 Ollama 是在你的 Mac 上直接运行的,所以在容器内部用 localhost 是连不通的。要用下面这个地址 [n8n 文档]:
http://host.docker.internal:11434
实际上,starter kit 里已经内置了一个 "Local Ollama service" 凭证,你只需要编辑它,把 base URL 改成上面那个地址就行 [starter kit 说明]。本地 Ollama 没有设置认证,所以不需要填 API Key。
第二步:在聊天中使用。 创建一个 workflow(工作流),添加一个 Chat Trigger(聊天触发)节点,再接一个 AI Agent(AI 智能体)节点或 Basic LLM Chain(基础大模型链路)节点。在模型设置里选择 "Ollama Chat Model",选好凭证,然后从模型下拉列表里挑 gemma4。最后点击画布底部的 Chat 按钮,就能在 n8n 里和你的本地模型对话了 [Ollama 文档]。
第三步:给 Agent 配上工具。 AI Agent 节点支持挂载工具子节点,比如 HTTP Request(HTTP 请求)、Gmail、Qdrant 向量数据库,甚至另一个 workflow。模型会自己判断什么时候调用这些工具。
不过要注意,这个功能依赖模型对工具调用的支持,llama3.1 是支持的。在使用前,最好先去 ollama.com 上对应模型的页面确认一下有没有 "tools" 标签。如果连接被拒绝,绝大多数情况都是 base URL 写错了。记住这个规律 [n8n 文档]:
- n8n 在 Docker 里、Ollama 在宿主机上:用
host.docker.internal - 两者在同一个 compose 网络里:用服务名(
http://ollama:11434) - n8n 直接装在系统里:用普通的
localhost
那个 API Keys 页面是怎么回事?
你可能在 https://ollama.com/settings/keys 上看到过 API 密钥设置,怀疑自己是不是漏了什么步骤。别担心,你没漏。那些密钥是给 Ollama 的云服务用的——ollama.com 会在云端托管大模型,相当于一个远程的 Ollama 服务器 [Ollama 文档]。
如果哪天你想调用云端模型(比如任务对算力的要求超过了 Mac 本身的处理能力),就先去云端平台创建一个密钥,然后把基础地址填写为 https://ollama.com,再把密钥填入 n8n 的 Ollama 凭证里。所有本地调用则不需要密钥,也不用注册账号。