Agent Loop(智能体循环)完整详解
俗称 Agent 执行闭环,是所有智能体最核心的骨架。
先给出核心定义:
Agent Loop = 一套持续迭代的执行循环:大模型不断「思考 → 采取行动 → 接收外部反馈」,直到满足退出条件才停止,而不是普通
Chat 那样单次一问一答直接结束。
普通 Chat 流程(无循环)
用户提问 → LLM生成回答 → 流程终止
Agent Loop 流程(闭环)
用户目标 → 思考(Thought) → 行动(Action) → 获取观测(Observation) → 再次思考……【循环】→
任务完成,输出答案,退出
业界最经典范式:ReAct = Reason + Act(思考 + 行动),就是标准 Agent Loop。
一、标准 Agent Loop 五大核心阶段
1. Thought 思考阶段(大脑:LLM 负责)
输入:历史对话 + 用户目标 + 上一轮工具返回结果 (Observation)
LLM 要自主判断三件事:
当前信息是否足够回答用户?
如果信息不足:需要调用什么工具、入参是什么
如果信息足够:直接整理最终答案,终止循环
关键点:要不要调用工具,由模型自主决策,不是开发者硬编码 if 判断。
2. Action 行动阶段(执行层,代码侧)
当 LLM 输出工具调用指令(Tool Call / Function Call),程序解析指令,去执行外部能力:
- 联网搜索
- HTTP 接口调用
- 执行 Python 代码
- 查询数据库
- 端口探测、文件读写等
LLM 只输出调用意图与参数,真正执行操作是外部代码,模型本身不能触碰外部系统。
3. Observation 观测阶段(外部世界反馈)
工具执行完毕,拿到返回结果,包装成文本 / 结构化数据,送回给大模型。
示例:
Action:探测服务器 192.168.1.100:8080 端口
Observation:端口未开放,连接超时
4. 上下文组装
程序把:历史 Thought + Action + Observation 全部追加到上下文,送入下一轮 LLM 请求。
5. 终止判断 Exit Condition
每一轮思考后检查退出条件,常见终止条件:
LLM 判断现有信息足够,无需继续调用工具,生成最终回答
达到最大循环轮次(防止无限死循环!工程必加,比如最多循环 5 次)
工具连续多次调用失败、无可用工具
二、完整实例走一遍 Agent Loop
用户指令:查询沈阳今天气温,如果低于 20 度,提醒添加外套
假设模型本身没有实时天气数据
第 1 轮循环
- Thought:我没有实时天气,需要调用天气查询工具,参数:城市 = 沈阳,日期 = 今日
- Action:调用天气 API
- Observation:沈阳今日气温 16℃
- 未满足退出条件 → 进入下一轮
第 2 轮循环
- Thought:已获取温度 16℃ < 20℃,信息充足,不需要继续调用工具,可以整理最终回复
- Action:无工具调用,输出最终自然语言答案
- 触发终止条件,Loop 结束
最终回复:沈阳今日气温 16℃,气温偏低,建议增添外套。
👉 普通 Chat 模型只能等人主动追加信息;Agent 自动完成多轮迭代。
三、代码视角:极简伪代码理解 Loop
# Agent Loop 主循环
def agent_loop(user_query, max_round=5):
context = [{"role":"user", "content": user_query}]
for _ in range(max_round): # 最大轮次,防死循环
# 1. Thought:调用LLM思考
llm_response = llm.chat(context)
# 2. 判断:输出最终答案 or 需要调用工具
if need_final_answer(llm_response):
return llm_response.content # 退出循环
# 3. Action:解析工具调用,执行外部函数
tool_call = parse_tool_call(llm_response)
tool_result = execute_tool(tool_call)
# 4. Observation:把执行结果塞回上下文
context.append({"role":"assistant", "tool_call": tool_call})
context.append({"role":"tool", "content": tool_result})
# 达到最大轮次强制退出
return "任务迭代达到上限,无法完成查询"
这就是 LangChain、LangGraph、Spring AI Agent 底层最基础的骨架。
四、容易踩坑的工程问题(实战重点)
1. 无限循环问题(高频坑)
场景:模型不断重复调用同一个工具,得不到有效信息却一直循环。
解决方案:
强制设置最大迭代轮次(max_iterations)
在 prompt 约束:重复工具调用多次无果则停止
历史上下文增加约束,识别无效重复 Action
2. 上下文膨胀
每一轮 Thought/Action/Observation 都会塞进 prompt,轮次越多 token 越大。
解决方案:
摘要记忆、滑动窗口、向量长期记忆
对过长的 Observation 做截断
3. 模型幻觉产生错误的工具参数
模型编造不存在的函数名、错误参数。
方案:增加工具描述约束、参数校验,执行失败后将错误信息作为 Observation 回传给模型,让模型自我修正。
4. 区分:Function Calling ≠ Agent Loop
很多新手混淆:
- Function Calling:只是单次工具调用能力(一轮就结束)
- Agent Loop:持续多轮迭代机制,可以连续多次调用多个工具
单次 Function Call:
提问 → 调用一次工具 → 回答(无法连续二次调用)
Agent Loop:
可以连续调用工具 A→拿到结果→调用工具 B→调用工具 C…
五、延伸相关概念
- ReAct:最基础 Agent Loop 框架(Thought → Action → Observation)
- Plan-and-Solve / Plan-Execute
增强版 Loop:先整体规划任务步骤清单,再循环执行每一步(适合复杂长任务) - Reflection(反思型 Agent)
Loop 增加反思环节:行动结束复盘哪里出错,优化下一轮决策 - LangGraph
把 Agent Loop 改造为状态机,不再是简单线性循环,支持分支、跳转、回退,工业级常用
六、一句话总结
Agent Loop = 给大模型搭建一个持续自我迭代的循环跑道,允许模型多次 “思考、动手、接收反馈”,直到任务完成;普通对话没有这条循环跑道,只能一问一答。
更多推荐


所有评论(0)