使用 Ollama 的 OpenClaw:接入一个模型 本地
本指南介绍如何将 OpenClaw 连接到 Ollama,让助手运行在本地模型上:声明供应商、设置服务器地址、规划上下文窗口,以及选择能够调用工具的模型。工作量有一半在于避免那些不会显示任何错误的故障:上下文被截断、工具从未被调用、模型不在列表中。命令取自 Ollama 和 OpenClaw 的文档;由于两者更新很快,粘贴命令前应重新阅读文档;本页不包含自测、速度测量或模型排名。
#OpenClaw 与 Ollama:各自负责什么
OpenClaw 是一个网关:它从消息应用接收你的消息,将其传递给语言模型,并执行该模型请求的操作。Ollama 是模型服务器:它将模型加载到内存中,并在机器的 11434 端口上响应,默认地址为 http://localhost:11434。将两者连接起来,就是在 OpenClaw 中将 Ollama 声明为提供商,然后指定一个本地模型作为代理的主模型。
根据 OpenClaw 文档,这种连接通过 Ollama 的原生 API(端点 /api/chat)实现,该 API 支持流式响应和工具调用。这个细节比看起来更重要:后文会看到,地址写错一个地方,就足以让网关切换到另一种模式,在该模式下工具将无法运行。
- Ollama
- 加载模型,为其分配上下文窗口并生成文本。消耗多少内存由它决定。
- OpenClaw
- 每轮都会发送系统指令、可用工具的描述和对话历史,然后执行模型请求的工具。
- 该模型
- 必须能够记住长指令,并知道如何以预期格式请求工具。并非所有本地模型都具备这种能力。
- 不变的部分
- 无论模型供应商是谁,消息系统、助手记忆、令牌和网关安全性仍在 OpenClaw 侧配置。
这种连接方式比聊天界面的连接更复杂。聊天只会向模型发送几行内容;而代理从一开始就会向模型发送数千个 token 的指令和工具定义,甚至早于您的第一条消息。Ollama 的默认设置是为前一种情况设计的,而不是后一种。
#先决条件
在你的机器上执行操作的智能体:具备智能体能力的 Cline、MCP、n8n + Ollama、本地自动化。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
- OpenClaw 已安装
- 网关能够启动,诊断也能通过。这里不重复介绍安装过程:请参阅我们的指南《使用 Docker 安装 OpenClaw》。
- 已安装并更新至最新版本的 Ollama
- 下面使用的 ollama launch 命令仅存在于较新的版本中。安装过程请参阅我们的《安装 Ollama》指南。
- 为模型及其上下文提供的内存
- 仅计算权重时,Q4_K_M 的参考值为:70 亿参数模型约 5 GB,140 亿参数约 9 GB,320 亿参数约 19 GB。智能体要求的上下文窗口还要在此基础上增加。
- 访问终端
- 在托管网关的机器上;如果托管Ollama的机器不是同一台,也要在那台机器上。
最后一条命令应以 JSON 格式返回已安装模型的列表。连接被拒绝意味着 Ollama 尚未启动:请启动应用,或在终端中运行 ollama serve。在得到这一响应之前,无需继续进行。
#第 1 步:预留 64 000 个 token 的上下文
这是导致安装失败最多的设置,而且它是在 Ollama 侧完成的,不是在 OpenClaw 侧。Ollama 关于 OpenClaw 的页面指出,助手需要较大的上下文窗口,并建议本地模型至少使用 64 000 个 token。该页面关于上下文长度的说明,也为代理、网页搜索和代码工具给出了相同数值。
不过,Ollama 会根据可用显存默认选择上下文窗口:根据同一份文档,在 24 GiB VRAM 以下约为 4 000 tokens,24 至 48 GiB 之间为 32 000,从 48 GiB 起为 256 000。因此,在 12 或 16 GB 显存的显卡上,服务器启动时的窗口会比建议值小十六倍。系统不会对此发出提示:Ollama 会直接截断超出的内容,不显示错误消息。
如果 Ollama 已经作为应用程序运行(macOS、Windows),请不要运行此命令:第二个服务器会与端口 11434 发生冲突。请在应用程序设置中调整上下文长度。在 Linux 下,如果 Ollama 是作为 systemd 服务安装的,则应在服务本身中声明该变量。
#步骤 2:选择支持工具调用的模型
智能体只能通过工具行动:读取文件、运行命令、搜索网页。不会构造工具请求的模型只会礼貌地回复你的消息,却永远不会真正执行任何操作。本页面不对模型进行排名;它列出的是在接入模型前需要核查的标准。
- “tools”能力
- 命令 ollama show affiche 包含一个 Capabilities 部分。该部分必须包含 tools。在 Ollama 的库中,相应的筛选器位于地址 https://ollama.com/search?c=tools。
- 足够大的原生窗口
- 同一个命令会显示模型的最大上下文长度。为 8 000 或 32 000 个 tokens 设计的模型,无论服务器如何设置,都无法遵循 64 000 的建议。
- 现实可行的内存预算
- 模型权重和上下文必须共同容纳在 VRAM 中,或容纳在 Mac 的统一内存中。在一张 12 GB 的显卡上(RTX 3060、RTX 4070),这意味着只能选择明显小于该显卡在简单对话中可接受范围的模型;16 GB(RTX 4080)和 24 GB(RTX 4090)则留有更多余量。
- 长时间运行的稳定性
- 一个智能体会针对每个请求连续调用多个工具。极小型模型更容易弄错格式或工具。任何规格页都无法替代使用你自己的请求进行测试,首先应从低风险请求开始。
gpt-oss:20b 这个名称将在本指南后文作为示例使用:请将其替换为你选定的模型。Ollama 的集成页面会持续更新适用于 OpenClaw 的推荐模型列表,该列表会随着新版本发布而变化;与其依赖这里固定不变的列表,不如查看该页面。
#步骤 3:在 OpenClaw 中配置供应商 Ollama
有两种方式。第一种是执行一条Ollama命令,由它代您写入配置。第二种是在 OpenClaw 的配置中自行声明提供商;只要网关运行在 Docker 中,或Ollama位于另一台机器上,这种方式就是必需的。
#快速路径:ollama launch openclaw
根据 Ollama 的文档,此命令会选择一个模型,将 OpenClaw 配置为使用 Ollama,并启动网关;如果网关已经运行,它会自行加载新配置。项目的旧名称仍然可用:ollama launch clawdbot 是一个别名。该命令适用于直接安装在机器上的 OpenClaw,并且终端中可用 openclaw 命令。它并不能免除第 1 步:同一页面要求记录服务器的上下文。
#手动方式:自行声明供应商
OpenClaw 的文档首先介绍自动发现模式。我们提供一个伪造的密钥,因为Ollama不需要密钥;OpenClaw 会通过地址http://127.0.0.1:11434查询本地实例,以查找已安装的模型。
模型应写成 ollama/ 加上 ollama list 显示的确切名称,包括标签。网关作为服务运行时,优先将其写入配置,而不是使用环境变量:在终端中导出的变量不会传递给系统启动的进程。使用 Docker 安装时,每条 openclaw 命令前都要加上 docker compose run --rm openclaw-cli。
第二种方式是在采用 JSON5 编写的 ~/.openclaw/openclaw.json 文件中进行显式声明。当 Ollama 运行在网关机器之外、模型未出现在列表中,或者你想自行固定向智能体公布的窗口时,这种方式便派上用场。
- baseUrl
- 服务器 Ollama 的地址,包括端口,后面不要添加任何内容。Ollama 在另一台机器上运行时,只需修改这一行。
- api: "ollama"
- 明确要求使用 Ollama 的原生 API,即支持工具调用的那个 API。
- apiKey
- 一个虚假值。它仅用于激活供应商。
- contextWindow
- 向 OpenClaw 声明的窗口,OpenClaw 用它来管理历史记录的长度。它必须与 Ollama 实际加载的内容相符,而不是与模型理论上能够接受的长度相符。
- maxTokens
- 回答的长度上限。
- cost
- 一分钱都不用花:本地模型不会按 token 计费。
- agents.defaults.model.primary
- 代理默认使用的模型,格式为 ollama/模型名称。
此示例沿用了 OpenClaw 文档提供的结构;contextWindow 和 maxTokens 的值是我们设置的,需要根据你的模型进行调整。有两点需要记住。首先,对于推理模型,将 reasoning 设置为 true。其次,根据同一份文档,只要明确存在 models.providers.ollama 条目,自动发现就会被禁用:此时你想使用的每个模型都必须列在 models 中。
#在 Docker 中运行网关,或在另一台机器上运行 Ollama
在容器内部,localhost 指的是容器自身。因此,使用 Docker 启动的 OpenClaw 网关无法在地址 http://localhost:11434 看到主机的 Ollama:连接会被拒绝,尽管从你的终端上一切正常。解决方案取决于 Ollama 运行的位置。
- Docker Desktop(macOS、Windows)
- host.docker.internal 这个名称表示从容器访问宿主机。将 http://host.docker.internal:11434 指定为显式声明中的 baseUrl。
- Linux 下的 Docker Engine
- 这个名称默认不存在:必须像下面这样,使用 extra_hosts 将其添加到服务中。除此之外,Ollama还必须监听容器能够连接的接口;其原始设置仅限于环回接口,无法满足这一点。
- Ollama 在另一台机器上运行
- 将这台机器在本地网络或 VPN 中的地址填入 baseUrl,并以同样方式设置 Ollama 在这台机器上的监听。
Compose 文件是我们提供的示例,并非 OpenClaw 文档中的摘录:请将服务名称与您所用版本的 docker-compose.yml 进行比较。至于变量 OLLAMA_HOST,Ollama 的常见问题中对此有说明。请评估它的影响:使用 0.0.0.0 时,服务器会监听机器的所有接口,而 Ollama 的 API 不要求身份验证。防火墙必须将端口 11434 限制在 Docker 网络或本地网络内,该端口绝不能从互联网访问。我们的 Ollama 服务器安全指南详细说明了这些规则。
#步骤 4:验证端到端连接
一个只会回答“你好”的代理什么也证明不了:这个回答既不需要工具,也不需要上下文。有用的验证应逐层推进,从模型服务器一直检查到消息系统。
- 01仅在 Ollama 上测试工具调用使用下面的命令,向服务器发送一个附带虚构工具的问题。响应必须包含一个 tool_calls 字段,指出工具名称并传入一个参数。如果模型只用一句话回答,就不适合作为智能体。
- 02检查 OpenClaw 能看到什么命令 openclaw models list 应显示采用 ollama/模型名称 格式的模型,而 openclaw doctor 不应报告供应商错误。
- 03请求执行操作,而不是回答从控制界面或您的消息应用中发送一条要求代理使用工具的请求,例如列出其工作区中的文件。它必须真正执行,而不是描述自己会怎么做。
- 04查看 Ollama 加载了什么就在这次交流之后,在服务器机器上运行 ollama ps,并查看 CONTEXT 和 PROCESSOR 列。
在 ollama ps 的输出中,CONTEXT 列给出已加载模型实际分配到的窗口。如果它显示 4096,而你的目标是 64 000,那么第 1 步的设置并未生效,无论 OpenClaw 的配置显示什么。PROCESSOR 列给出显卡与处理器之间的分配情况:我们需要看到的是 100% GPU;混合分配表示模型及其上下文超出了显存。
#无声故障:症状及其原因
明确的错误(连接被拒绝、找不到模型)会出现在日志中。下面这些故障代价更高,因为助手仍会继续回答:只是回答得不对。
- 助手忽略其指令,或答非所问
- 最可能的原因:上下文被截断。系统指令和工具定义超出了 Ollama 加载的窗口,后者会在不提示的情况下截去其中一部分。请检查 ollama ps 的 CONTEXT 列,然后重新执行第 1 步。
- 显示的是 JSON,而不是操作
- 模型确实生成了工具调用,但网关将其作为文本接收。这表明地址使用了 /v1,或者供应商被声明为 OpenAI 兼容模式。请改回原生地址,并将 api 设置为 "ollama"。
- 它描述自己会做什么,却什么也没做
- 该模型没有声明 tools 能力,或者能力太有限,无法在较长指令中途使用。请重新执行第 4 步所述的 Ollama 直接测试;如果失败,请更换模型。
- 模型没有出现在 openclaw models list 中
- 有三种可能。供应商未启用(缺少虚假密钥,或变量未传递给服务)。存在明确的 models.providers.ollama 条目,但其中没有列出该模型。或者模型没有声明工具调用:根据我们所了解的文档,自动发现只会保留声明了工具调用的模型;这一行为可能会随版本变化。
- 上下文设置仍然没有效果
- 变量 OLLAMA_CONTEXT_LENGTH 已在终端中导出,但 Ollama 是作为服务或应用运行的:服务器从未看到这个变量。请在服务中或应用设置中声明它,然后重启 Ollama。
- 响应耗时很长,或者根本不会出现
- 要么模型溢出到处理器上(ollama ps 的 PROCESSOR 列),要么模型在一段时间不活动后被卸载,并在每条消息到来时重新加载:默认情况下,Ollama 会将模型保留在内存中五分钟。OLLAMA_KEEP_ALIVE 变量可以延长这一时间。
- 终端上一切正常,网关却什么也做不了
- 网关在容器中运行,并在自己的 localhost 上查找 Ollama。请参阅 Docker 相关章节。
- “Model context window too small”
- 这并非无声无息,而是令人困惑:我们所知的 OpenClaw 版本拒绝使用上下文窗口声明得过小的模型。请在明确声明中调整 contextWindow,并相应调整 Ollama 的上下文。
建立连接后需要牢记的一点限制是:正确接入的本地模型,在处理较长或含糊的任务时,未必会表现得像大型在线模型。本文不发布任何对比结果或吞吐量数据。请先从简单且无风险的请求开始,观察模型在哪些地方开始失效;如果助手是日常工作的一部分,请保留一家在线供应商作为备用方案。
#随手备查的官方资料
本指南不依赖任何自有测试:不包含时长、吞吐量或分数。命令和字段名称均取自两个项目的文档,而文档会随版本变化:ollama launch 选项、自动发现行为、默认值。如果本页面与文档存在差异,以文档为准。
#深入了解
连接建立在网站其他地方详细介绍的三个概念之上:Ollama 服务器、上下文窗口和工具调用。
- 安装 Ollama
- 模型服务器的安装、基本设置,以及可能离开机器的内容。https://quelllm.fr/guide/installer-ollama
- 理解上下文窗口
- token 衡量的是什么、上下文为何会消耗内存,以及如何确定其大小。https://quelllm.fr/guide/comprendre-fenetre-contexte
- 使用 Ollama 调用工具
- 工具请求的格式,以及在完全脱离代理的情况下测试工具的方法。https://quelllm.fr/guide/appel-outil-ollama-tutoriel
- Hermes Agent 搭配 Ollama
- 另一个连接到本地模型的自托管代理,用于比较不同方案。https://quelllm.fr/guide/hermes-agent-ollama-guide
- 使用 Docker 安装 OpenClaw
- 网关的安装、更新以及在 VPS 上的暴露规则。https://quelllm.fr/guide/installer-openclaw-docker
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。