如何识别并终止 Agent 工具调用循环,同时保留合理重试?

考查重点:重复检测与有进展的重试。对规范化调用参数、结果和状态做重复检测;错误可恢复且有新信息才重试,无进展或预算耗尽则停止并交代缺口

本题目录

参考答案

核心回答

识别工具调用循环,不能只看“同一工具调用了几次”,而要结合动作是否重复、任务是否推进、错误是否可恢复来判断,再由执行系统设置预算和停止条件。

  1. 记录调用轨迹:保留工具名、规范化参数、结果摘要、错误类型及关键任务状态,发现同一动作反复出现或多个动作来回切换。
  2. 检查实际进展:是否获得新证据、完成子任务或改变业务状态。返回文本变长、调用成功,都不一定代表推进了目标。
  3. 分类处理失败:瞬时故障可以在预算内退避重试;参数错误要先修正;缺权限、明确不可恢复的错误应停止或转人工。合理轮询按接口约定等待,并设置截止时间。
  4. 程序强制止损:限制单次调用、重试和整个任务的时间、次数及成本;持续无进展时切换策略、返回已有结果或交给人工,保留停止原因。

例如查询后台任务状态,重复得到“处理中”可能是正常轮询;但对不存在的任务 ID 反复请求,或不断改写同义查询却拿到相同资料,就需要处理无效循环。两者不能只凭重复次数区分。

展开说明

先确认循环为什么没有推进

先看最近几轮执行记录,判断是决策出了问题,还是执行与反馈出了问题:

  • 工具已经报错,但错误没有回传给模型,模型误以为上一步尚未执行。
  • 参数缺失或格式错误,模型每次只改表述,没有修正真正的错误字段。
  • 结果已经足够,但任务没有明确的完成条件,模型继续搜索。
  • 工具结果被截断或摘要丢失,下一轮又重复获取同一内容。
  • 工作流的回边没有退出条件,或者外层调度不断重启已经失败的任务。

因此需要把模型请求、实际工具执行、结果回传和状态更新串起来。只看最终回答或模型生成的“下一步计划”,很难判断重复发生在哪一层。

用动作指纹发现重复,再用任务状态判断有无进展

动作指纹可以由工具名、规范化后的业务参数及相关任务状态组成。规范化可以统一参数顺序、补齐默认值,并排除纯日志用的随机请求 ID,避免同一调用被误认为不同动作。

但不能随意删除有业务含义的字段。例如分页游标变化,通常意味着在读取不同页;查询时间、资源版本或任务状态变化,也可能让相同工具调用变得必要。反过来,不能把每轮递增的计数器或不断追加的聊天记录当作“状态变了”,否则每一轮看起来都不同,无法发现循环。

重复检测既要看同一个动作连续出现,也要留意“搜索→读取→搜索”这样的周期。它只负责发现可疑模式,最终还要检查进展,例如:

  • 检索是否得到新的相关证据,而不是相同文档换个排序。
  • 代码修改后,原失败用例是否有所变化,是否修复了一个明确问题。
  • 业务操作是否到达新的状态,或仍在合法的等待阶段。

“信息增益”在这里通常是任务相关的判据,不必强行套成一个通用的语义相似度分数。

按错误类型保留合理重试

瞬时网络故障、服务暂时不可用或限流,可以在接口允许、操作可安全重复的条件下,采用有上限的退避与随机抖动;服务给出等待时间时,按其约定处理。重试也应计入总截止时间,不能等待无限延长。

确定性的参数或业务错误,应把具体字段和原因回传给模型,让它修改参数、补充信息或选择其他路径。相同错误请求原样重发,通常不会得到不同结果。

权限不足或需要用户决策,应停在对应节点,说明需要什么输入或授权,不让模型通过持续重试尝试绕过边界。

写入结果不确定,要先查操作状态。请求超时不代表写入没有发生;只有结合幂等键、去重或业务状态确认,才适合重试,避免重复下单、发送或扣款。

还要区分工具层重试与 Agent 重新规划。底层 HTTP 客户端可能已经重试过,Agent 层再重复一整轮会放大请求量。应明确哪一层负责重试,并统一记录与约束总尝试次数。

无进展时先改变条件,再决定是否继续

对于可疑循环,可以回传简短、明确的反馈:已经尝试过什么、结果为什么不足,以及还缺什么。随后让 Agent 在剩余预算内改查询、换工具、补信息或重新规划。

只有表述变化、没有新依据的“再反思一次”,不能让重试计数和预算重新归零。策略切换后仍无进展,就应停止当前路径,并记录已完成部分、未完成目标、失败证据和可恢复的状态。终止循环是停止继续调度,不等于撤销已发出的写入;仍在执行的操作要按工具能力取消或查询最终状态。

正常轮询也需要清楚的契约:轮询哪个资源、预期哪些状态、间隔如何确定、何时超时。接口明确返回“仍在处理”,并且仍处于允许的等待区间时,重复查询可以保留;到达终态、明确失败或截止时间后就结束。

用分层预算兜底,并验证是否误杀

单次模型请求和工具调用要有超时;同一操作要有重试预算;整个任务还要有总耗时、调用次数及成本上限。仅在循环顶部计步,挡不住某一次工具一直不返回,因此超时和取消应落实到执行层。

模型没有生成工具调用时,应检查它是否给出有效的最终结果、明确拒绝或需要补充信息。空输出、解析失败或响应被截断属于异常,最多按预设策略有限恢复,随后明确报错,不能无条件进入下一轮。

验证时同时准备两类用例:重复坏参数、工具间来回切换、相同资料反复检索等无效循环;以及短暂故障后成功、合法分页、异步任务轮询等合理重复。检查能否及时停止浪费,也检查是否过早打断正常任务,并记录停止原因、额外调用量和恢复结果。

递进追问

直接设置最大步数不就够了吗?

最大步数可以兜底,但无法解释失败,也可能在无效循环中浪费大量预算,或截断本来需要多步的正常任务。需要同时有完成条件、进展判据和错误分类;最大步数负责最后止损。

重复次数和相似度阈值应该怎样定?

先用真实轨迹与故障用例,观察正常任务会有多少合法重复、不同错误多久能恢复,再按工具风险和任务成本选择阈值。相似度只能辅助发现模式,不能单独宣布死循环;阈值应通过误停率和无效调用量回归调整。

终止循环后,怎样让任务还能继续?

保存目标、已确认事实、已执行操作及结果、剩余工作和停止原因。恢复前先检查外部状态是否已经变化,尤其是结果未知的写入;补齐输入、服务恢复或人工决策到位后,再从合适节点继续,而不是原样重放全部调用。

对应教程

  • 《从零构建 AI 智能体》第 21 章:Agent 智能体:ReAct 部分解释了模型为什么会根据工具结果持续决策,小结与思考题补充了迭代上限、超时和错误兜底;本文进一步说明怎样结合进展、错误类别与操作语义区分循环和合理重试。

参考资料

相关面经

34 篇

帆软

Java开发
一面
查看原面经 →
Agent 针对同一问题反复调用搜索工具,结果相似却一直不结束,如何排查?

CVTE

应用开发工程师
校招秋招一面
查看原面经 →
在工具拉取数据的阶段,如果单次拉取了超大量级的日志,对于上下文(Context)的管理是怎么做的?如何剔除无效干扰信息并防止模型重复调用无效工具?

公司未注明

AI 应用开发工程师
一面
查看原面经 →
陷入循环怎么办

百度

AI智能体算法
一面、二面、三面
查看原面经 →
如果工具调用一直没有达到成功条件,任务不断重试并最终卡死,你会如何处理?

海康威视

Agent开发
秋招一面
查看原面经 →
thought - action - observation 的过程中,怎么防止死循环?(即:agent 一直没有得到它想要的结果应该怎么办)
展开剩余 29 篇面经

网易

Agent 开发工程师
一面
查看原面经 →
Agent如何防止死循环?有哪些终止条件设计?

滴滴

企业级算法实习生
实习一面
查看原面经 →
agent一直重试怎么办?如何评判agent每一步做的好不好?

懂车帝

后端开发工程师
秋招一面
查看原面经 →
● ReAct 如何防止死循环调用?

字节跳动

AI全栈实习生
日常实习一面
查看原面经 →
除了步数耗尽以外,还有什么方法防止Agent Loop死循环?

公司未注明

测试开发岗
一面、二面、三面
查看原面经 →
双重回炉重试逻辑,重试次数上限如何控制,什么条件下停止重试,防止死循环。

中科曙光

AI Agent
查看原面经 →
Agent循环怎么办

百度

Agent 算法工程师
一面、二面
查看原面经 →
Agent任务停滞、重复调用同一工具、无法推进任务,如何处理异常?

美团

AI 后端
校招秋招一面、二面
查看原面经 →
追问
定向补证和重新执行是否有最大次数限制?为什么这样设置?

阿里巴巴

AI Agent 算法
一面
查看原面经 →
**面试官:** Agent陷入死循环或重复调用同一个工具,你们的系统有什么兜底机制?

哔哩哔哩

AI Agent 开发
一面
查看原面经 →
### 15、Agent执行任务时,如果出现重复调用工具、无法结束或者任务循环的问题,应该如何设计保护机制?

灵犀互娱

AI 应用开发工程师
校招秋招
查看原面经 →
Agent 的终止条件怎么设置?如何避免陷入死循环?

百度

后端开发工程师
一面
查看原面经 →
ReAct模式的核心原理是什么?如何避免一直循环?

阿里巴巴

AI 应用开发工程师
秋招三面
查看原面经 →
如何防止 Agent 在求解过程中进入死循环?

阿里巴巴

AI 应用开发工程师
秋招二面
查看原面经 →
如何防止 Planner、Executor 和 Critic 之间反复循环?

MemTensor

全栈开发工程师
社招一面
查看原面经 →
Agent如何避免LLM连续撞墙或死循环?

字节跳动

后端开发工程师
一面
查看原面经 →
如何避免 Agent 死循环或者工具连续超时?

智元机器人

前端开发工程师
实习一面
查看原面经 →
观测层的作用是什么?如何观测并解决Agent循环调用或卡死的问题?
观测到问题后如何解决?比如限制工具调用次数或token阈值?

顺丰

Agent 开发工程师
社招一面
查看原面经 →
tool 调用死循环解决

字节跳动

后端开发工程师
社招一面、二面、三面
查看原面经 →
你们的agent 有多智能? 重复执行任务怎么办?

点点互动

Agent 开发工程师
秋招一面
查看原面经 →
Agent 一直循环怎么办?

法本信息

AI Agent 开发
查看原面经 →
多轮执行中,Agent可能反复读同一个文件或重复调用同一个工具。你是怎么识别重复状态的?

百度

Java 开发工程师(智能客服)
实习二面
查看原面经 →
ReAct 是一个不断思考、行动、观察的循环,它有没有可能一直循环下去,无法停止?
项目追问
你在项目中是否遇到过 Agent 无限循环的问题?你是怎么解决的?

米哈游

Agent 开发工程师
一面
查看原面经 →
ReAct Agent 为什么容易陷入循环?如何在不误杀正常重试的情况下终止循环?

快手

Agent 开发工程师
一面
查看原面经 →
如何防止 Agent 在工具调用过程中陷入循环?

快手

Java 开发实习生
一面
查看原面经 →
在rag模式下,如何避免反复调用工具造成死循环?

快手

Data Agent
一面
查看原面经 →
怎么防止出现死循环

公司未注明

Agent 岗位
查看原面经 →
超时、死循环等问题怎么解决

法大大

Java 开发工程师
实习一面
查看原面经 →
你那个ReAct循环怎么防止他无限调用的

阿里巴巴

Java 开发工程师
一面
查看原面经 →
有没有做多轮循环的控制?如果 agent 一直循环调用工具会怎么处理?

收录题集

7 个来源,共13 份题集

Agent 核心面试题

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

公司案例问答汇编

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

Agent与工具调用

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

Agent设计模式与工作流编排

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

Agent 工程追问

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →
展开剩余 8 份题集

阿里巴巴问答汇编

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

百度高频面试题

Rocky Ding · AIGC-Interview-Book · 3 条原题

查看题集 →

哔哩哔哩高频面试题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

AI 智能体与大模型应用开发面试题库

didilili · ai-agents-from-zero · 1 条原题

查看题集 →

Agent 面试题

Guide · JavaGuide · 1 条原题

查看题集 →

Agent 面试题

卡码笔记 · 个人整理 · 1 条原题

查看题集 →

Agent 面试题

小林 Coding · 个人整理 · 1 条原题

查看题集 →

Loop 工程教程面试题

Onefly · zero2Agent · 2 条原题

查看题集 →

相关题目

4 题