先把当时的情况摆出来。把 tool_choice 设成 {'type':'function','function':{'name':'create_ticket'}},十次里有两次返回 content 而不是 tool_calls,业务侧拿不到参数,日志里 finish_reason 是 stop。
把日志和配置对完,能解释这个现象的基本就这几处。提示词要求先解释再调工具 模型优先服从文本。少数情况下是工具描述与用户意图不匹配 模型判断不该调。
另外,温度偏高 采样落到了文本分支。少数情况下是旧模型不支持强制指定函数。
先把 finish_reason 与 content 一起记日志
python -c "print('log finish_reason and tool_calls')"
随后删掉提示词里要求解释的句子再测
python eval_tool.py --prompt p_noexplain.txt --n 50
温度降到 0 看是否稳定命中
python eval_tool.py --temperature 0 --n 50
剩下的就是换支持强制调用的模型复测
python eval_tool.py --model gpt-4o-2024-08-06 --n 50
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
白天有业务在跑,能验证的部分都压到了晚上做。
恢复的判定其实很直接。五十次调用全部返回 tool_calls,finish_reason 为 tool_calls,content 为空。
tool_choice 是强提示不是硬约束,提示词里的自由文本要求会把它顶掉,两边要一起改。这类问题最好一次改到位,反复小改反而容易把原因搅混。
