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

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

相关推荐

Anti-Distill:当公司要求你把经验蒸馏给 AI 时,这个工具帮你反制

AI技能化趋势要求员工将隐性知识显性化并输入AI,可能削弱个人不可替代性。anti-distill工具通过生成“正确但无用”的清洗版应对。法律上,员工经验与默会知识不完全属于公司,涉及著作权、隐私及灰色地带,相关判例显示权益向劳动者倾斜。建议在劳动合同中明确知识提炼权限,当前可利用工具选择性保留核心经验。

Yourself Skill:把自己蒸馏成 AI,欢迎加入数字永生

开源项目yourself-skill可将个人聊天记录、日记等数据转化为AI技能,生成具有用户性格、语言风格的数字副本。其核心通过“自我记忆”和“人格模型”两部分模拟用户回应,并支持数据纠正与版本迭代。项目强调这并非复制灵魂,而是个人在特定时刻的“检查点”,为自我观察提供了新视角。

OpenClaw v2026.4.5 发布:内置视频/音乐生成工具、多语言控制面板与 ComfyUI 集成

OpenClaw v2026.4.5是一次重大更新,核心是新增内置视频与音乐生成工具,并集成ComfyUI工作流。控制面板新增12种多语言支持,同时引入了多个新AI提供商与模型。更新包含破坏性变更,移除了旧配置别名,建议升级后运行`openclaw doctor --fix`进行迁移。此外,本次更新还带来了大量稳定性修复、性能优化及移动端功能改进。

OpenClaw v2026.4.2 发布:Task Flow 恢复 + 多平台优化

OpenClaw v2026.4.2 正式发布,恢复了Task Flow核心功能并带来大量优化。主要更新包括:Task Flow支持托管与同步模式,新增状态追踪与管理命令;多平台(Android、Feishu等)功能增强;集中化安全配置以阻止不安全覆盖;并修复了多项重要Bug。建议所有用户尽快升级此维护版本。

暂无评论