Skip to content

Agent 核心循环

Agent 的核心运行机制是 Observe(观察) → Think(思考) → Act(行动) 的循环,称为 ReAct 模式(Reason + Act),这是 Agent 区别于 Workflow 和 Chatbot 的关键所在。

循环结构图

text
                    ┌─────────────────┐
                    │      开始       │
                    └────────┬────────┘


                    ┌─────────────────┐
                    │    Observe      │
                    │  观察/用户输入   │
                    └────────┬────────┘


                    ┌─────────────────┐
                    │     Think       │
                    │   推理/规划决策   │
                    └────────┬────────┘


                    ┌─────────────────┐
                    │      Act        │
                    │  执行工具/回复   │
                    └────────┬────────┘


                    ┌─────────────────┐
                    │   目标达成?     │
                    └────────┬────────┘

              ┌──────────────┴──────────────┐
              │                             │
              是                            否
              │                             │
              ▼                             │
     ┌─────────────────┐                    │
     │      结束       │                    │
     └─────────────────┘                    │

                                            └──────→ 回到 Observe

Observe(观察)

定义:Agent 收集所有与当前任务相关的信息,形成对"我现在处在什么状态"的认知。

观察的来源

来源说明
用户输入用户的原始指令或问题
环境反馈执行动作后外部系统返回的结果(API返回、搜索结果、代码执行输出)
工具返回调用工具后得到的数据
短期记忆本次会话中之前的观察、思考、行动记录
长期记忆向量数据库中存储的过去知识或用户偏好
系统状态当前时间、剩余 token 数量、已执行步骤数等

举例:订机票 Agent

  • 用户输入:"帮我订一张明天去北京的机票。"
  • 当前时间:今天下午 3 点
  • 内部记忆:用户曾说过"我喜欢靠窗座位"
  • 尚未执行任何动作

Think(思考)

定义:大模型对观察到的信息进行推理,决定下一步做什么。这是 Agent 具备"智能"的核心环节。

思考的内容

  • 分析当前状态:目前完成了什么?缺少什么信息?遇到了什么问题?
  • 评估进度:离最终目标还有多远?是否需要修正之前的计划?
  • 规划下一步:接下来应该采取什么动作?使用哪个工具?需要向用户问什么?
  • 考虑备选方案:如果 A 方案失败,备选方案是什么?

思考的输出(结构化):

字段说明
Thought文字描述自己的思考逻辑
Action具体要调用的工具名称或内部函数
Action Input传递给工具的数据

订机票 Agent 思考后

Thought:"用户想订明天去北京的机票。我目前还不知道出发地、预算。我需要先获取完整信息。"
Action:`ask_user`
Action Input:`"请问您从哪里出发?对航班时间或价格有偏好吗?"`

Act(行动)

定义:执行思考阶段决定的动作,改变环境状态或获取新信息。

常见的行动类型

类型说明
调用工具搜索、计算、API 请求、数据库查询、代码执行等
与用户交互向用户提问、确认信息、输出最终结果
更新记忆将重要信息存入长期记忆
内部状态变更修改目标、调整策略
结束循环目标已完成或无法完成时主动终止

行动的输出:行动会产生一个观察结果(Observation),作为下一轮循环的输入。

循环的终止条件

条件说明
目标达成Agent 认为自己成功完成了任务
最大迭代次数防止无限循环,设置上限
主动放弃Agent 经过思考后认为无法完成目标
用户中断用户发送"停止"指令
异常错误工具调用连续失败

完整示例:复利计算

任务:计算"如果每天存 10 元,按照年化 5% 的利率,10 年后本息和是多少?"

第一轮循环

  • Observe:用户输入问题,无历史记录
  • Think:需要计算复利,应该用公式或工具。我可以用 Python 代码解释器
  • Act:调用 python_repl,输入代码
  • Observe:代码执行报错,Agent 发现逻辑有误

第二轮循环

  • Observe:看到了上一个行动的错误
  • Think:这其实是"每日定投"的复利计算,应该用等比数列求和公式。我应该正确写出代码
  • Act:再次调用 python_repl,输入正确代码
  • Observe:代码成功运行,输出结果 ≈ 47,236 元

第三轮循环

  • Observe:已经得到了计算结果
  • Think:目标达成。应该把结果用友好格式回复给用户
  • Act:输出最终答案
  • End:任务完成

与 Workflow 的对比

Workflow 与 Agent 的核心区别已在第 1 篇中详述(决策者、流程确定性、工具使用方式)。这里仅补充 ReAct 循环视角下的关键差异:

维度WorkflowAgent (ReAct 循环)
流程固定顺序 A→B→C→D动态生成,每一步由"思考"决定
错误处理预定义异常分支Agent 自己观察错误,思考新方案
信息缺失流程卡住或预设询问节点Agent 自动决定反问用户或查其他来源
工具选择代码中写死Agent 根据上下文自主选择

直观比喻

  • Workflow 像火车:轨道和站点都是固定的,只能按时刻表走
  • Agent 像自动驾驶汽车:目的地固定,但路径、车速由车自己根据实时路况决定

记忆要点

观察现状动脑筋,动手执行看反馈,循环往复达目标。

阶段要点
Observe看清楚现状(用户说什么、工具返回什么、记忆有什么)
Think动脑子决定下一步(分析、规划、选择工具)
Act动手执行(调用工具、问用户、输出答案)
循环行动后世界变了,重新观察,直到任务完成