AI Agent为什么反复调用同一个工具?从调用指纹、幂等键到终止条件完整排查

AI Agent为什么反复调用同一个工具?从调用指纹、幂等键到终止条件完整排查 一、典型故障现象用户提出:查询订单A1001并告诉我是否已经发货。Agent轨迹却变成:Step 1:调用query_order(A1001) Step 2:调用query_order(A1001) Step 3:调用query_order(A1001) Step 4:调用query_order(A1001) ……如果工具只是查询,问题主要是延迟和成本。如果工具具有副作用,例如:创建订单;发送短信;提交审批;扣减库存;发起支付;重复调用就可能造成真实业务事故。二、先区分“合理重试”和“无意义重复”以下情况属于合理重试:网络超时;服务返回临时错误;限流后等待;工具明确声明操作未完成;第一次调用结果无法解析。以下情况通常属于无意义重复:参数完全相同;上一次已经成功;Observation已返回完整数据;没有新增信息;重复调用不会改变结果。建议给每次工具调用生成指纹:importhashlibimportjsondefbuild_call_fingerprint(tool_name:str,arguments:dict)-str:normalized=json.dumps(arguments,ensure_ascii=False,sort_keys=True,separators=(",",":"))raw=f"{tool_name}:{normalized}"returnhashlib.sha256(raw.encode("utf-8")).hexdigest()相同工具、相同标准化参数会得到相同指纹。三、根因一:工具结果没有进入下一轮上下文错误流程:模型生成工具调用 → 系统执行工具 → 结果只写日志 → 下一轮模型不知道已经执行正确流程:模型生成工具调用 → 系统执行工具 → 将结果写入消息历史 → 模型根据Observation继续判断示例消息:{"role":"tool","tool_call_id":"call_123","name":"query_order","content":"{\