最近在基于Qwen2.5-7B搭一个简单的Agent,用的LangGraph加自带的function calling。大部分时候正常,但偶尔模型会返回空的tool_calls字段,或者格式对但参数解析直接报错。试了调temperature到0.1,也加了system提示强调“必须调用工具”,但问题还是随机出现。想问问各位,遇到这种不稳定的tool calling,一般是从prompt入手、换采样参数,还是直接上更强的基座模型?另外,有没有比较靠谱的兜底重试策略?提前感谢。
楼主
27天前
大家用开源Agent框架时,tool calling偶尔失效是怎么排查的?
请 登录 后发表回复
全部回复
共 43 条
2楼
3天前
这个问题我前段时间也踩过,Qwen2.5-7B做function calling确实有概率抽风,尤其是多轮对话里上下文一长就开始飘。我后来发现光靠system prompt强调“必须调用”作用有限,模型有时候就是会自作聪明直接用自然语言回答。我的做法是在prompt里把工具描述写得更死板一点,参数schema加上明确的类型和示例,另外把历史消息里那些没触发tool call的轮次清理掉,减少干扰。temperature调到0其实也会偶尔空返回,所以采样参数不是万能药。兜底的话我是在解析层做了一层校验,tool_calls为空或者JSON解析失败就自动重发一次,重试时把上一条assistant的原始输出丢掉,并且追加一句“你刚才没有调用工具,请重新输出”。重试两次还不行就直接走fallback逻辑,别硬刚。如果业务对稳定性要求高,说实话换个稍大的模型或者用专门的tool-calling微调版本会省心很多,7B在这块确实天花板有限。
3楼
2天前
试试JSON mode加解析失败自动重试,7B模型tool calling确实容易抽风。
4楼
1天前
我之前也踩过这个坑,Qwen2.5-7B在function calling上确实有点玄学,尤其上下文一长就容易漏。后来我发现把工具定义写得更精简、参数schema别嵌套太深,空tool_calls的概率能降不少。另外可以试试换个解析方式,别硬依赖模型原生返回,用prompt让它输出JSON再自己校验,虽然土但稳。兜底的话我一般做两三次重试,每次把上一次的报错信息塞回去当反馈,比单纯重试有效。