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

排错 · 工具调用

工具调用总失败?智能体调不动工具的排查清单

龙虾不调工具,或者调了报错,这类问题可以不报红字,只是不干活或干错。先按现象分三类:压根不调、调了报错、MCP 工具不出现,各看 6 项里对应的几项。其中第 2 项是在出问题的那个会话里发 /tools,看当前生效的工具列表里有没有要用的那一个。

工具调用失败封面

不调工具、调了报错、MCP 工具不出现:各看哪几项

  • 压根不调:龙虾光描述该怎么做,就是不动手。换模型排除模型这一层(第 1 项),再发 /tools 看工具在不在(第 2 项)。
  • 调了报错:它确实尝试调了,但工具返回失败。看权限和路径(第 3、4 项),然后是参数格式(第 5 项)。
  • MCP 接进来的工具不出现:单独查 MCP 这一路(第 6 项)。

连模型本身都连不上的,不属于工具问题,看 连不上模型/API 怎么排。

第 1 项:当大脑的模型,工具调用能力够不够

龙虾光把答案说出来、不去调工具时,先排除模型这一层:换一个模型把同一件事再跑一遍——换了就好,说明问题不在你的工具配置。接的是 Ollama 本地模型的,先看两处:baseUrl 后面有没有带 /v1(官方 Ollama 文档写明带了会让工具调用失效),以及 ollama ps 的 CONTEXT 一栏是不是还停在 Ollama 默认的 4k。这一栏的数是哪一边定的、怎么改,见 显存/内存不够的 6 个办法里讲上下文长度的第 4 条。一步步的查法见 接 Ollama 不调用工具的排查。

第 2 项:这一轮里,工具到底在不在

工具策略在调用模型之前就生效:被策略拿掉的工具,模型这一轮收不到它的定义,也就不会去调。在出问题的那个会话里发 /tools,看当前生效的工具列表。要用的工具不在列表里,就按官方工具文档的顺序往下查:tools.profile 选的是哪一档(minimal、coding、messaging、full),tools.allow 和 tools.deny 有没有把它挡掉(两边都写了以 deny 为准);然后是服务商一层的限制、沙箱状态、频道权限,以及提供这个工具的插件有没有装上并启用。

第 3 项:权限够不够

报 Permission denied 时分三层看。第一层是操作系统的文件权限:运行龙虾的那个用户,对目标目录有没有读写权限。第二层是 tools.fs.workspaceOnly:设成 true 时,read、write、edit、apply_patch 只能碰工作区目录里的路径。第三层只在开了沙箱时才有(沙箱默认是关的):agents.defaults.sandbox.workspaceAccess 默认是 "none",沙箱里的工具看不到 agent 的工作区;"ro" 是只读挂载,write、edit、apply_patch 会被停用;"rw" 才可读可写。

第 4 项:路径对不对

相对路径在不同启动目录下会指向不同地方,Docker 里的路径又跟宿主机不是一回事。给它的路径尽量写绝对路径。Docker 场景还要确认目录有没有挂载进容器,在容器里列一下那个路径就知道:

docker compose exec openclaw-gateway ls <容器内的路径>

第 5 项:参数格式对不对(自己写的工具和 MCP 工具)

现象是工具确实被调用了,返回的却是参数校验一类的错误:缺字段、类型不对、多了不认识的字段。原因是模型生成的参数不符合工具要求,或者工具定义里字段说明含糊,模型只能猜。自己写的工具或 MCP 服务里的工具,把参数说明写清楚、给一个示例;内置工具出现这种情况,换一个模型再试。

第 6 项:MCP 接进来的工具不出现

MCP 这一路先用 openclaw mcp probe <name> 探一下配置好的那个服务。服务能连上、工具却不出现的,看是不是开了沙箱:沙箱模式是 "all" 或 "non-main" 时,tools.sandbox.tools 是多出来的一层限制,要把 bundle-mcp(或某个服务的通配写法,如 outlook__*)加进沙箱的工具放行名单;没加的话,MCP 服务照常加载,它的工具却在发给模型之前被滤掉。mcp.servers 里配置的服务遇到这种情况,openclaw doctor 能查出来。MCP 是什么、怎么接,见 MCP 是什么 和 MCP 生态。

常见问题

执行命令的工具突然每次都要我批准,怎么回事?
依次跑 openclaw config get tools.exec.host、openclaw config get tools.exec.security、openclaw config get tools.exec.ask 看这三项。都没设的时候,security 在 gateway 和 node 上默认是 full,ask 默认是 off,不会弹批准;开始弹了,说明本机或这个会话的策略被收紧过。更稳的做法是 security 设 allowlist、ask 设 on-miss,命令不在名单里时才问;要回到不弹批准,用 openclaw config set 把 tools.exec.host 设成 gateway、tools.exec.security 设成 full、tools.exec.ask 设成 off,再跑 openclaw gateway restart。日志里的 Approval required. 表示这条命令在等 /approve。
浏览器工具用不了怎么查?
跑 openclaw browser status,正常时显示 running: true 和选中的浏览器。再看 openclaw logs --follow:出现 unknown command 加 browser 字样的,是 plugins.allow 设了名单却没把 browser 列进去;出现 Failed to start Chrome CDP on port 的,是本机浏览器没启动起来;出现 browser.executablePath not found 的,是配置里的浏览器路径写错了。