主题
高频面试题
什么是 Agent Loop(智能体循环)?一个典型的 Agent Loop 包含哪些步骤?
这道题表面在问循环步骤,实际是在看你能不能把“模型自己往下做”讲成一个可验证、可停止、可恢复的工程状态机。
面试官角度分析,想考什么
什么是 Agent Loop?典型步骤有哪些?
考你能否把它说成受控的任务推进闭环,而不是简单 while true。它和 ReAct 是什么关系?怎么知道该停?
考循环意识:ReAct 是常见实现形态;停止要靠完成、失败、预算和人工接管,不能只靠模型自觉。失败时怎么排查?
考 trace:看动作选择、参数、工具结果、状态更新和停止条件,而不是只看最终回复。
可直接抄走的 30 秒参考答案
text
Agent Loop 是智能体推进任务的主循环。它不是调一次大模型就结束,而是每一轮先读目标和当前状态,让模型判断下一步该做什么,再由系统校验动作、执行工具、把结果写回状态,最后判断是继续、完成、失败、追问用户还是转人工。典型步骤可以记成:理解目标、构建上下文、选择动作、校验动作、执行工具、观察结果、更新状态、判断停止。生产里最关键的是停止条件、权限控制和 trace,不然很容易写成一个无限调工具的 `while true`。面试回答详解,知其所以然
这道题不要答成“Agent Loop 就是 while 循环”。更准确的说法是:Agent Loop 是一个受控的任务推进闭环。模型可以提出下一步动作,但外层系统要负责状态、工具执行、校验、记录和停止。
1. Agent Loop 解决什么问题
普通 LLM 应用通常是一问一答:
text
用户输入 -> LLM -> 输出但 Agent 面对的是需要多步推进的任务,比如“查资料并写报告”“定位测试失败并修复”“查询订单并判断能否退款”。这些任务不能靠一次模型调用完成,需要边做边看结果,再决定下一步。
Agent Loop 的价值就在这里:
text
目标 -> 决策 -> 行动 -> 观察 -> 更新状态 -> 再决策它让模型从“只生成答案”变成“参与任务推进”。但只要进入循环,就必须处理失控风险:重复调用工具、越权执行、上下文膨胀、成本飙升、提前结束、假装完成。
2. 一个典型 Agent Loop 的步骤
面试里可以把典型 loop 拆成七步:
- 接收目标:理解用户要完成什么,抽取约束、输入、验收标准和风险边界。
- 读取状态:查看当前已经做了什么、缺什么、有哪些工具结果和历史决策。
- 决策下一步:由 LLM 或 planner 判断下一步是调用工具、继续推理、询问用户还是给最终答案。
- 校验动作:外层 runtime 检查工具名、参数、权限、预算、幂等和安全策略。
- 执行动作:调用搜索、数据库、代码执行器、文件系统、业务 API 等工具。
- 观察结果:把工具返回、错误、环境反馈或用户回复整理成 observation。
- 更新并停止:把 observation 写回结构化 state,再判断成功、失败、继续、转人工或超预算。
可以用一个更工程化的流程表示:
text
Receive Goal
-> Build Context
-> Select Action
-> Validate Action
-> Execute Tool / Ask User / Final Answer
-> Observe Result
-> Reduce State
-> Check Stop Condition
-> Continue or Exit3. ReAct 是 Agent Loop 的经典思想来源
ReAct 可以理解成 Agent Loop 的经典语言层范式:
text
Thought -> Action -> Observation -> Thought -> ...模型先思考当前该做什么,再执行一个动作,拿到 observation 后继续思考。ReAct 的贡献是把 reasoning 和 acting 交错起来,让模型能基于外部反馈修正计划,而不是一次性把答案编完。
现代 Function Calling / Tool Calling 可以看作 ReAct 的工程化版本:模型不再输出脆弱的 Action: search(...) 文本,而是输出结构化 tool call;应用层执行工具,再把 tool result 回灌给模型,进入下一轮。
4. 生产里的 Agent Loop 是状态机,不是模型独角戏
Demo 里常见写法是:
text
while not done:
ask_llm()
call_tool()
append_result()这个结构能演示概念,但不能直接当生产实现。生产里的 Agent Loop 更像状态机:
- 模型只提出候选动作,不直接拥有执行权。
- Runtime 校验工具、参数、权限和预算。
- Tool executor 负责真实调用、超时、重试和错误包装。
- Reducer 负责把 observation 写成结构化 state。
- Stop checker 负责判断任务是否完成、失败、需要用户或转人工。
- Trace 记录每一步,便于调试和评估。
这也是 LangGraph 这类框架强调 graph、state、node、edge 的原因:Agent 需要循环,但循环不能没有边界。
5. 停止条件是 Agent Loop 的关键
一个成熟的 Agent Loop 必须知道什么时候停。停止条件不能只写在 prompt 里,因为模型可能忘记、误判或假装完成。
常见停止状态包括:
success:目标已满足,输出最终答案或产物。need_user:缺少必要输入,需要向用户澄清。insufficient_evidence:证据不足,不能继续可靠回答。permission_denied:工具或数据无权限访问。handoff_to_human:高风险或复杂场景需要人工处理。max_steps_reached:超过最大步数,防止死循环。timeout:超过时间预算。repeated_action_blocked:重复调用相同工具或参数,被循环检测拦截。
面试时把这些 stop reason 说出来,会比只说“设置 max_steps”更有工程味。
6. 好的 Agent Loop 要能被观测和评估
Agent Loop 每一步都应该留下 trace。至少记录:
- 当前 step 编号和 state 摘要。
- 模型看到的关键上下文。
- 模型提出的 action 和 reason。
- 工具名、参数、延迟、成本和返回结果。
- reducer 如何更新 state。
- 当前 stop reason 或下一步计划。
否则 Agent 失败时只能靠猜:到底是模型选错工具、参数错、工具返回错、observation 被误读、状态没写回,还是停止条件缺失。
面试官追问3个问题
追问一:Agent Loop 和 ReAct 是一回事吗?
- 考察点:是否能区分思想范式和工程实现。
- 回答方向:ReAct 是一种典型 Agent Loop 范式,强调 Thought / Action / Observation 交替;Agent Loop 是更宽的工程概念,可以用 ReAct、tool calling、状态机、graph 或 workflow + 局部 agent 节点实现。
追问二:怎么避免 Agent 无限循环?
- 考察点:是否知道 max_steps 只是底线。
- 回答方向:要结合最大步数、超时、重复 action 检测、参数相同检测、状态进展检测、工具错误分类、预算控制和明确 stop reason。更关键的是把停止条件写在 runtime 里,而不是只靠 prompt。
追问三:Observation 应该怎么写回上下文?
- 考察点:是否理解工具结果不能原样无限追加。
- 回答方向:工具结果应先结构化,区分成功、失败、错误码、可重试性和关键数据。短结果可以进入当前上下文,长结果要摘要、分页或落盘;关键事实还要写入结构化 state,供后续步骤稳定读取。
扩展知识
Agent Loop 和 ReAct 的关系
ReAct 论文提出把 reasoning traces 和 task-specific actions 交错生成。它的简单形式是:
text
Thought: 我需要先查订单状态
Action: lookup_order(order_id)
Observation: 订单已发货
Thought: 需要再查退款政策
Action: lookup_policy(...)
Observation: 已发货不可自动退款
Final Answer: ...这给 Agent Loop 提供了一个很好理解的心智模型:Agent 不是先想完整答案再行动,而是在行动过程中持续修正认知。现代 API 里的 Function Calling / Tool Calling 把这个流程结构化了,但思想仍然来自 ReAct:推理和行动交替,外部反馈驱动下一轮推理。
Agent Loop 和 Workflow 的区别
Workflow 的控制流主要由代码提前写死:
text
分类 -> 检索 -> 生成 -> 审核 -> 返回Agent Loop 的控制流则由模型在运行时参与决定:
text
当前状态 -> 模型选择下一步 -> 工具反馈 -> 更新状态 -> 再选择区别不是谁更高级,而是谁决定下一步。如果路径固定、规则清楚、风险高,Workflow 更稳;如果任务路径不确定,需要根据中间结果动态探索,Agent Loop 更合适。真实系统通常混合使用:外层 Workflow 管风险边界,局部复杂节点内部用 Agent Loop。
Agent Loop 的最小工程骨架
一个可控 loop 至少要有这些角色:
planner:基于目标和状态提出下一步动作。validator:校验动作、参数、权限和预算。executor:执行工具,并返回结构化结果。reducer:把 observation 写回 state。stop_checker:判断成功、失败、继续或转人工。tracer:记录每一步,服务调试和评估。
如果缺少 validator,Agent 可能越权或乱调工具;缺少 reducer,Agent 会把状态留在自然语言里,越跑越乱;缺少 stop checker,Agent 会死循环或假装完成;缺少 tracer,线上 badcase 很难复盘。
常见 loop 类型
不同 Agent 的 loop 形态不完全一样:
- Turn-based Loop:每次用户消息触发一轮或少量几轮动作,常见于客服和办公助手。
- Goal-based Loop:围绕一个明确目标持续运行,直到完成、失败或需要用户确认。
- Evaluator Loop:生成结果后由评估器检查,不满足就修正,适合代码、写作和结构化输出。
- Long-running Loop:跨较长时间运行,需要 checkpoint、恢复、取消、通知和人工介入。
面试里一般先讲 goal-based loop,因为它最能体现 Agent 的“目标驱动 + 反馈控制”。