龙虾AI · OpenClaw 中文教程与资料 OpenClaw 第三方中文资料站 · 非官方

本地模型 · 接入

OpenClaw 接 Ollama 能聊天,却不调用工具:从哪一层查起

Ollama 能回答一句话,只能说明那次聊天有回复;龙虾能不能动手,要看有没有真正发出工具调用、收到结果、据此回答。遇到光说不做,先看接的是不是 Ollama 原生接口、地址从 Gateway 那台机器够不够得着,然后查模型与工具。

命令和选项以 2026 年 10 月的官方文档为准;每改一处,用同一个小任务再试一遍。

OpenClaw 官方 Ollama 文档中的模式说明和不使用 /v1 的警告
2026年9月官方公开页截图:模式说明与不使用 /v1 的警告,见 OpenClaw 官方 Ollama 文档。

只说「我去查看」却没有工具调用:按现象找该查的那一层

模型说「我去查看」不算调用了工具。到当前会话记录或日志里找工具名称、调用参数和返回内容;只有一段像工具指令的文字,同样不算。

你看到什么下一步查哪里
只说要查看,没有工具事件接口类型、模型能力、可用工具
把工具 JSON 当普通文字吐出来优先检查是否接了 /v1
已有调用,返回路径或权限错误执行环境、目录和工具策略,见「短任务能调工具、长会话不调,或者报权限拒绝」一节

官方明确提醒,Ollama 的 OpenAI 兼容路径可能破坏工具调用,出现原始工具 JSON 文本。碰到这种输出,先查接法,依据见原生接口说明。其他工具也失败时,可接着看工具调用排查清单。

Ollama 的 baseUrl 带了 /v1,工具 JSON 被当成文字输出

OpenClaw 的 Ollama 原生接法使用 /api/chat。配置里的 baseUrl 只写到主机和端口,例如 http://127.0.0.1:11434;不要在基址后拼 /v1,也不用手填 /api/chat。见官方基址警告。

新接入可以运行 openclaw onboard,选择 Ollama,再选 Local only,按提示填实际基址。如果已经有配置,跑引导前留一份副本、记下当前主模型,因为引导会改配置。入口见官方设置步骤。

手动配置时,看 models.providers.ollama 里的两个字段:baseUrl 指向实际的 Ollama 服务,api 是 ollama。Ollama 和 Gateway 在同一台机器上时,最小的写法是下面这段,把它并进 ~/.openclaw/openclaw.json,已有的其他 provider 和 agent 设置原样保留:

{
  models: {
    providers: {
      ollama: {
        baseUrl: "http://127.0.0.1:11434",
        apiKey: "ollama-local",
        api: "ollama",
        models: []
      }
    }
  }
}

models: [] 留空,它会继续自动发现这台 Ollama 上的模型;要手填模型条目的,写法见官方配置示例。

Gateway 连不上 Ollama:在 Gateway 所在的机器上测 11434 端口

在 Gateway 所在的同一台机器、同一运行环境检查下面两项。示例假设 Ollama 就在这个环境的本机地址;分开部署时,换成配置中实际可达的地址。

openclaw gateway status --deep
curl http://127.0.0.1:11434/api/tags

Gateway 在容器里,就进入对应容器环境查;在 VPS 上,就去 VPS 查。在笔记本上 curl 成功,说明不了 VPS 的情况;容器里的 localhost 指的是容器自己。模型要装在基址指向的 Ollama 服务那台主机上。见官方连接排错。

拿不到模型目录时,看报的是连接失败、超时还是鉴权错误,把这一层处理掉。拿到目录后,看里面有没有目标模型。别为了让这条 curl 通过,把 11434 端口开放到公网。

openclaw models list 列得出模型,agent 用的却不是它

接着运行 openclaw models list --provider ollama,看 OpenClaw 这一侧能不能列出候选;这是官方提供的验证命令。然后跑 openclaw models status,看当前生效的模型是不是刚才列出来的那个 Ollama 模型。

模型名对照那台机器上 ollama list 的输出一个字一个字地比,标签别省。手填了非空的 models 列表才会跳过自动发现;写成 models: [] 的自托管地址仍然会自动发现模型。官方通过 /api/tags 读取目录、通过 /api/show 读取能力,见模型发现说明。

到这里先别下载更大的模型,下一步让当前模型做一件能看到结果的小事。

用一个空目录测试有没有真的发出工具调用

手动建一个专用的空测试目录,只给当前 agent 列目录用的只读工具和这个目录的访问范围,别挂私人文件夹。容器场景填工具实际看得见的绝对路径,它和宿主机上的路径可能不一样。

请调用可用的只读工具,列出【测试目录绝对路径】下的文件名。不读文件内容,不创建或修改文件;如果工具不可用,请直接说明,不要猜目录内容。

发送前把占位符换掉,并在会话里发一条 /tools:生效的工具列表里没有能列目录的工具,就停在这里补配置,催模型没有用。要把执行范围收小,可参考沙箱与权限边界。

结果看三样:会话里有真实的工具事件,工具结果回到了会话,模型根据结果给出最终回答。空目录应该得到空的返回;只有模型一句「没有文件」而没有工具事件的不算,它可能是猜的。如果已经报了权限错误,请求其实走到了调用这一层,接下来查授权范围和路径,基址不用再改。

短任务能调工具、长会话不调,或者报权限拒绝

空目录任务能过、长会话才出问题时,开一个新会话重复同一个测试,然后逐项加回历史和工具。连短任务也没有工具事件,就回头查工具在不在列表里、模型选得对不对、接口有没有带 /v1,不用先扩大窗口。

Ollama 对 OpenClaw 本地使用的建议是至少 64K 上下文。上下文越大越占内存,别照抄大窗口之后把内存不足当成工具坏了。依据分别见集成建议和上下文长度说明;已有内存报错时,再看内存与显存排错。

报错明确是策略拒绝的,只补这次只读动作需要的那一项授权,把测试目录在执行环境里的真实路径和工具能看到的范围对一遍,不要把权限全开。部署模式也要分清:Ollama 有 Cloud + Local、Cloud only、Local only 三种:Cloud + Local 模式下,用到 :cloud 模型时推理在云端,选本地模型时仍在 Ollama 那台主机上;Cloud only 直接走 https://ollama.com。见模式说明;拿不准任务交给哪里,回看云端与本地的接入取舍。

常见问题

baseUrl 后面到底填不填 /api/chat?
baseUrl 只写到主机和端口,/api/chat 由原生接入自己加,/v1 也不要拼进去。这个地址要从 Gateway 所在的机器上访问得到。
用了 Ollama,就可以认为任务完全离线吗?
Ollama 接入有 Cloud + Local、Cloud only、Local only 三种模式。Local only 只用 Ollama 主机上的本地模型;Cloud + Local 模式下,用到 :cloud 模型时推理在云端;Cloud only 不经过本地 Ollama,直接走 ollama.com。联网工具不受模式影响,该访问外网时还是会访问。