俗称 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 = 给大模型搭建一个持续自我迭代的循环跑道,允许模型多次 “思考、动手、接收反馈”,直到任务完成;普通对话没有这条循环跑道,只能一问一答。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐