如何判断 Agent Loop 的结束条件?
未标记
考查重点:目标完成与运行退出。模型终答只是候选结束信号;按任务核对必要数据或产物,成功、错误、预算耗尽或取消分别退出,缺输入则保存状态等待
本题目录
参考答案
核心回答
Agent Loop 的结束条件需要同时考虑任务是否完成,以及运行是否还允许继续。工具调用型 Agent 常见的机制是:模型请求工具就执行并回传,模型给出最终回复且没有新的工具请求时结束本轮;但这不自动代表业务目标已经达成。
实际应区分几种情况:
- 正常完成:所需结果已经取得,必要的工具执行和产物检查通过,可以返回答案。
- 异常或预算退出:遇到不可恢复错误,或达到总时长、调用次数、Token 等上限,返回已完成部分及未完成原因。
- 主动终止:用户取消,或运行策略明确要求终止,停止相应执行。
- 暂停等待:缺少必要输入或等待外部决策,保存进度后等待恢复,不能标成任务已完成。
模型负责根据当前信息判断是否还需要行动;运行时负责执行停止规则、维护状态并记录退出原因,避免只靠模型输出一句“完成了”。
展开说明
1. 机制上的停止:模型输出怎样影响下一步?
在常见 Tool Calling Loop 中,模型回复带有工具调用时,程序执行工具并把结果写回状态,再进入下一轮。模型返回普通答案、没有新的工具请求时,路由就可以转向结束。LangGraph 官方示例中的 should_continue 就检查最新消息的 tool_calls,决定进入工具节点还是 END。
这个规则表示模型本轮不再要求行动。若它的回复是在追问用户,当前执行也可以返回并等待下一次输入;若它遗漏了工具调用,循环同样可能过早停止。因此,模型停止、一次运行结束和业务任务完成要分开记录。
还要确认得到的是完整模型结果。流式连接断开、生成达到输出上限、工具参数尚未生成完整,都不能仅因“暂时没看到工具调用”就按正常最终答案处理。
2. 业务上的完成:用任务要求和真实结果判断
以教程中的“两座城市哪个更热”为例,完成条件可以是:取得两地可比较的天气数据,核对温度单位和时间含义,再给出比较及依据。若只查到北京,上海查询失败,即使模型停止调用工具,也只能返回部分结果,不能凭空选出更热的城市。
其他任务也应有相应依据:生成文件要看文件是否实际生成、格式是否满足要求;修改代码要结合变更范围和适当验证;诊断问题要有支撑结论的证据,并说明仍未确认的部分。
能由程序检查的条件优先用程序。涉及开放式内容质量时,可以引入评分、规则或人工判断,但需要明确评价标准,不能把另一个模型说“通过”当成所有事实和外部操作的证明。
3. 运行上的退出:给探索和重试设置边界
每次继续调用前,应检查用户取消、总截止时间和剩余预算;模型与工具返回后更新消耗和错误状态。调用次数、Token、耗时是不同维度,单次输出上限也不等于整个任务预算。
可恢复错误可以在限定次数内重试或换可用方案;参数长期无效、无权限或依赖不可用时,应返回具体原因。还可以识别没有进展的重复行动:例如连续得到相同错误,模型却始终用同一参数重试。判断时要结合任务是否本来就需要轮询或分页,不能只因调用参数相同就停止。
内层工具重试和外层模型探索各有计数,同时还要受总预算约束。否则每轮都重新获得一份重试额度,局部上限也阻止不了整体无限运行。
不同框架的计数含义也不同。例如 LangGraph 的 recursion_limit 限制图执行的 super-step,不能直接当成模型调用次数;达到上限后的异常处理和部分结果返回也需要设计。
4. 停下来后,要让调用方知道任务处于什么状态
运行结果可以分别保存状态、退出原因、已完成事项、产物或证据,以及继续执行所缺的信息。这样,达到预算可以明确为“已查询北京,上海仍未取得”,而不会因为返回了自然语言就显示为全部成功。
等待用户或外部事件时,可保存任务状态并释放当前执行,之后在同一任务上恢复。若要跨进程恢复,还需要相应持久化存储,不能只依赖进程内内存。
取消请求还应尽可能传给正在运行的工具。工具已经造成的外部变更不会因 Loop 停止自动撤销;结果不确定时要记录并核对,避免恢复后盲目重复执行。恢复细节可结合Agent 中断与恢复理解。
常见追问
没有 tool_calls 就能结束吗?
作为基础工具循环的路由规则可以,但还要区分最终答案、追问和异常截断。若产品要求完成一个明确任务,还应检查必要结果是否已具备。某些框架也支持工具结果直接返回或结构化最终输出,因此不应只依赖一种消息形式。
模型自己说任务完成,程序还要检查什么?
检查与任务直接相关的事实,例如必要数据是否齐全、文件是否存在且可用、工具返回是否真正成功、是否仍有未结束的必要步骤。模型的完成判断可以作为候选信号,但外部结果以执行回执和任务状态为准。
达到次数上限后,应该继续让模型总结吗?
可以预留少量输出预算,让它整理已完成部分和剩余问题;也可以由程序返回简洁状态。如果预算已耗尽,就不应再无上限地调用模型“做最后一次总结”。返回时明确是预算退出,保留必要的恢复信息。
等待人工输入属于失败吗?
通常属于暂停或需要输入,和失败、取消、完成不同。当前执行可以结束,但任务还未达成目标;恢复时继续使用相应状态和仍然有效的授权,不重新假定所有前置条件都已满足。
对应教程
- Agent 智能体:回看工具反馈后继续或结束的运行循环,并用两城市天气比较理解多次调用怎样形成最终结果。
- Tools 工具调用:区分模型的调用请求与程序回执,理解停止判断为什么应依据实际工具结果。
参考资料
- 国内:JavaGuide:AI Agent 基础:依据 Agent Loop 的工具结果回填、停止信号与调用上限,说明正文中循环退出和预算边界的设计。
- 国内:ranxi2001:一个 Agent 系统的核心组成:采用目标、状态与评估的分工,说明正文中完成、失败和等待输入如何分别表示。
- 国内:JavaGuide:Workflow、Graph 与 Loop:依据继续、退出和运行上限的区分,说明正文中内外重试如何划分作用域并共享总预算。
- 国外:Anthropic:Building effective agents:依据环境结果、进度检查与停止条件,说明正文中模型判断和运行限制如何配合。
- 国外:LangChain:Workflows and agents:依据 Agent 图检查工具调用并路由至
END的示例,区分正文中的图终止与业务成功。


