现场是这样的。在本地用 LM Studio 起 1234 端口做 Agent 调试,请求里带 tools 和 tool_choice=auto,返回 400,原文 tools are not supported for this model。

中间走过弯路,把「tool_choice 用了 required 这类本地实现不认的值」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。所选模型本身没有工具调用模板,服务端直接拒绝;模型支持但没在加载时启用工具选项;消息历史里残留了上一轮的 tool 角色,结构不合法。

动手时先换一个明确支持工具的模型

curl -sS http://localhost:1234/v1/models | jq -r '.data[].id'

接着用不带 tools 的最小请求确认链路

curl -sS http://localhost:1234/v1/chat/completions -H 'content-type: application/json' -d '{"model":"qwen2.5-7b-instruct","messages":[{"role":"user","content":"hi"}]}'

补上工具定义再发,观察返回的 tool_calls

curl -sS http://localhost:1234/v1/chat/completions -H 'content-type: application/json' -d @tool_req.json

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

恢复的判定其实很直接。带 tools 的请求返回 200 且 finish_reason 为 tool_calls,tool_calls 里有合法的函数名与参数 JSON。

补一句。本地模型的工具能力取决于模板,同尺寸不同家族的差别很大,调 Agent 前先确认模型本身会吐 tool_calls。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189