最近在跑一个本地部署的AI Agent demo,底层用Qwen2.5-7B,配合LangGraph做工具调用。任务很简单:让agent根据用户需求查天气再订个闹钟。但实际跑起来,agent经常在“调用工具→拿到结果→再次调用同一个工具”之间反复横跳,日志里能看到它已经拿到天气数据了,下一轮还是继续调天气API,就是不往下走。我试过调低temperature、加max_iterations限制,也改过system prompt强调“完成就结束”,但偶尔还是会卡住。想问问大家,是模型本身对工具调用的指令遵循能力有限,还是我的图结构设计有问题?有没有什么prompt技巧或者后处理手段能缓解这个现象?感谢!
用Qwen做Agent老是陷入死循环,有人遇到过吗?
全部回复
共 64 条7B模型做多步工具调用确实容易犯这个毛病,不是你的图结构问题。我之前也踩过类似的坑,后来在工具返回的结果里塞了个状态标记,比如“天气已获取”,让它下一轮能明确知道这步已经完成了。另外LangGraph里可以加个条件边,检测到连续两轮调用同一工具就强制跳到下一节点,比单纯限制迭代次数管用。prompt里也可以试着把流程拆成显式步骤,让它按顺序打勾式推进。
我之前也踩过这个坑,Qwen2.5-7B在工具调用上确实有点轴,拿到结果后不太会主动判断"这步已经完成了"。后来我在图里加了个状态标记,每次工具调用后记录一下结果摘要,下一轮prompt里带上"已有信息:xxx,是否还需要调用工具",它就不太容易绕回去了。另外max_iterations只是兜底,真正管用得靠状态管理,光靠system prompt喊"结束"模型不一定听。你可以试试在工具节点后面加个条件边,判断结果非空就强制走下一步。
这个坑我踩过,而且不止一次。Qwen2.5-7B在工具调用的指令遵循上确实有点“固执”,尤其是当它觉得当前信息还不够“完美”时,会倾向于重复调用同一个工具来确认。你日志里看到它拿到天气了还继续调,很可能是因为它在生成下一步推理时,把之前的工具结果当成了“上下文参考”而不是“已完成的动作”,模型没有真正把结果状态更新到决策链里。我后来在LangGraph里加了一个显式的状态标记,比如工具返回后强制写入一个“已获取天气”的字段,并在prompt里用条件判断告诉它“如果已获取天气则直接进入订闹钟”,这样才压住了重复调用。另外你可以试试在工具节点后面加一个轻量的校验节点,用规则判断如果连续两次调用同一工具就强制跳转到下一步,别全指望模型自己刹车。temperature调低其实帮助有限,因为问题出在状态跟踪而不是随机性。max_iterations只能兜底,不能治本。我觉得核心还是图结构里缺少对“已完成子目标”的显式建模,模型自己记不住。
我遇到过,Qwen7B工具调用确实容易犯轴,加个状态标记判断已经查过天气就强制跳下一步试试。