aionclaw工具调用失败源于模型输出结构与解析器不兼容,需确认模型原生支持tool_calling、配置tool_choice="required"、校验工具定义小写规范,并通过verbose日志定位执行断点。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

切换模型后AionClaw工具调用失败,说明新模型虽能响应文本请求,但未真正触发工具函数——问题卡在模型输出结构与AionClaw解析器的兼容断层上,不是技能本身坏了,而是“语言不通”。
确认新模型是否支持原生工具调用
第一步:打开AionClaw配置目录,执行openclaw config --show-path,定位到openclaw.json文件。
第二步:在该文件中查找当前生效的模型ID(如"model": "qwen2.5-7b"),然后访问对应模型的官方文档或Ollama模型库页面,确认其明确标注 support_tool_calling。Gemma4、Phi-3-mini、Qwen2-VL等轻量视觉模型默认不支持,强行配置会导致工具字段被静默丢弃。
第三步:若文档无明确说明,用curl直连验证——把模型名填入以下命令并执行:
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{"model":"qwen2.5-7b","messages":[{"role":"user","content":"查北京天气"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"获取城市天气","parameters":{"type":"object","properties":{"city":{"type":"string"}}}}}]}'
如果返回中不含"tool_calls"字段,只有"message"文本内容,说明该模型根本不识别工具调用指令,必须换模型。
强制启用工具调用约束
方法一:在openclaw.json中,找到对应模型配置块,在options下添加"tool_choice": "required"。这一步不可省略——仅靠prompt里写“请调用天气插件”,Qwen2.5、DeepSeek-R1等模型会自由生成回复而非结构化调用。
方法二:若使用TaoToken统一通道,在网关层配置中追加tool_choice=required参数。TaoToken会透传该参数给下游模型,避免AionClaw CLI层做二次解析时丢失。
【注意:tool_choice必须为字符串"required",不能写true/false/always】
校验工具定义是否被新模型正确加载
① 运行openclaw tools list,确认目标工具(如get_weather)出现在已注册列表中。若未出现,说明工具文件未被扫描,检查skills/目录下对应工具的SKILL.md是否存在且命名规范(全小写、无空格、无中文)。
② 打开该工具目录下的SKILL.md,检查## function_name标题行是否与index.ts中导出的函数名完全一致(大小写敏感)。常见错误是SKILL.md写GetWeather而代码里是getWeather,AionClaw加载时直接跳过该工具。
③ 用openclaw tools validate get_weather命令校验JSON Schema。若报错invalid property: Parameters,说明parameters字段首字母大写了——OpenClaw解析器只认全小写字段名,【Parameters → parameters,Properties → properties,必须全部小写】。
验证工具执行链路是否贯通
第一步:启动AionClaw时添加--verbose参数,例如openclaw run --verbose。
第二步:发起一次带工具意图的请求(如“查上海天气”),观察终端日志流。
第三步:搜索关键词executing tool:。若全程未出现该字样,说明模型返回未被解析为有效tool call,问题出在前三个环节;若出现但后续报错tool not found或execution failed,则聚焦工具函数本身返回值是否为合法JSON对象(不能是字符串、undefined或Promise未await)。











