Ollama 本地模型工具调用失效问题排查与解决

AI摘要

配置OpenClaw时使用Ollama模型的OpenAI兼容API(/v1)导致工具调用失效,表现为模型误读文件或拒绝调用工具。排查发现需改用Ollama原生API(去掉/v1,api设为"ollama")。修正配置后,模型成功调用read工具读取指定文件,心跳任务恢复正常。

背景

最近在配置 OpenClaw 心跳任务时,想让本地 Ollama 模型来执行定时检查。结果发现:模型能运行,但工具调用完全失效——要么读错文件,要么直接假设无法访问文件系统。

这篇文章记录了排查过程和最终解决方案。

问题现象

心跳任务需要读取 HEARTBEAT.md 文件,然后执行里面的任务清单。但本地模型表现各异:

模型 大小 问题
gpt-oss:20b 13GB 读错文件,读了 USER.md 而不是 HEARTBEAT.md
qwen3.5:35b 26GB 不调用工具,直接返回 HEARTBEAT_OK
llama3.1:8b 4.9GB 写 Python 代码解释怎么做,但不执行
gemma3:4b 3.3GB 无输出
qwen3:30b-a3b 53GB 内存不足(需要 53GB,系统只有 15GB)

模型的 thinking 过程显示:

"I can't actually access the file system"
"The tools provided don't include a file reading function"

它们直接假设自己无法访问文件,根本没尝试调用 read 工具。

排查过程

1. 检查模型是否支持工具调用

ollama show qwen3:30b-a3b --modelfile | head -30

发现模型的 template 里确实有 {{ .Tools }} 支持:

{{- if .Tools }}# Tools

You may call one or more functions to assist with the user query.

You are provided with function signatures within <tools></tools> XML tags:

说明模型本身支持工具调用。

2. 检查 OpenClaw 配置

查看 ~/.openclaw/openclaw.json

"ollama": {
  "baseUrl": "http://127.0.0.1:11434/v1",
  "apiKey": "ollama-local",
  "api": "openai-completions",
  ...
}

问题找到了!

根本原因

查阅 OpenClaw 官方文档,发现明确警告:

Do not use the /v1 OpenAI-compatible URL (http://host:11434/v1) with OpenClaw. This breaks tool calling and models may output raw tool JSON as plain text. Use the native Ollama API URL instead: baseUrl: "http://host:11434" (no /v1).

简单说:

  • 原生 Ollama APIbaseUrl: "http://host:11434" + api: "ollama" → 工具调用可靠
  • OpenAI 兼容模式baseUrl: "http://host:11434/v1" + api: "openai-completions" → 工具调用不可靠

之前的配置用了 OpenAI 兼容模式,导致工具调用失效。

解决方案

修改 ~/.openclaw/openclaw.json

"ollama": {
  "baseUrl": "http://127.0.0.1:11434",
  "apiKey": "ollama-local",
  "api": "ollama",
  "models": [
    {
      "id": "qwen3.5:9b",
      "name": "qwen3.5:9b",
      ...
    }
  ]
}

关键改动:

  1. 去掉 /v1baseUrl 改为 http://127.0.0.1:11434
  2. 使用原生 APIapi 改为 "ollama"

然后重启 Gateway:

systemctl --user restart openclaw-gateway.service

验证结果

测试心跳任务:

# 使用 ollama/qwen3.5:9b 测试
openclaw heartbeat test

模型正确调用了 read 工具:

<function=read>
<parameter=path>
/home/saiita/.openclaw/workspace/HEARTBEAT.md
</parameter>
</function>

成功!

最终配置

心跳任务配置:

"heartbeat": {
  "every": "30m",
  "model": "ollama/qwen3.5:9b",
  "target": "feishu",
  "to": "ou_xxx..."
}

选择 qwen3.5:9b 的原因:

  • 内存占用小(6.6GB),不会撑爆系统
  • 工具调用能力稳定
  • 推理速度适中

总结

  1. Ollama 有两种 API 模式:原生 API 和 OpenAI 兼容 API
  2. 工具调用必须用原生 APIbaseUrl 不带 /v1api 设为 "ollama"
  3. 选择合适的模型大小:考虑内存限制,qwen3.5:9b 是个不错的平衡点

参考

Saiita

我还没有学会写个人说明!

相关推荐

OpenClaw v2026.4.10:新增 Active Memory 自动记忆、Codex 原生支持、本地 MLX 语音

OpenClaw v2026.4.10版本带来了多项重要更新。核心亮点是全新的Active Memory插件,它能自动管理用户偏好和历史上下文,实现“无感记忆”,显著提升长期对话体验。同时,版本原生集成了Codex,方便开发者直接进行编程任务。针对macOS用户,新增了实验性的本地MLX语音支持,提供更低延迟和更好隐私的语音对话。其他更新还包括视频生成模型支持、Microsoft Teams功能增强、CLI

OpenClaw 2026.4.9 发布:Memory/Dreaming 增强,多项安全修复

OpenClaw发布2026.4.9版本,带来多项功能更新与安全修复。新功能包括增强记忆/梦境处理、结构化日记视图、字符氛围评估报告、提供商认证别名及iOS版本控制改进。关键安全修复涉及浏览器SSRF防护、环境变量安全、远程节点事件清理等。官方建议用户尽快升级,特别是使用浏览器功能或连接远程节点的用户。

OpenClaw 2026.4.8 发布:修复插件兼容性问题

OpenClaw 2026.4.8为修复版本,主要解决了上一版本(2026.4.7)的打包和插件兼容性问题,修复了Telegram、Slack等多个捆绑通道的加载错误,并优化了代理设置与计划工具。建议用户升级以获得更好的稳定性和兼容性。

暂无评论