Appearance
Agent 核心循环
Agent 的核心运行机制是 Observe(观察) → Think(思考) → Act(行动) 的循环,称为 ReAct 模式(Reason + Act),这是 Agent 区别于 Workflow 和 Chatbot 的关键所在。
循环结构图
text
┌─────────────────┐
│ 开始 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Observe │
│ 观察/用户输入 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Think │
│ 推理/规划决策 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Act │
│ 执行工具/回复 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 目标达成? │
└────────┬────────┘
│
┌──────────────┴──────────────┐
│ │
是 否
│ │
▼ │
┌─────────────────┐ │
│ 结束 │ │
└─────────────────┘ │
│
└──────→ 回到 ObserveObserve(观察)
定义: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 循环视角下的关键差异:
| 维度 | Workflow | Agent (ReAct 循环) |
|---|---|---|
| 流程 | 固定顺序 A→B→C→D | 动态生成,每一步由"思考"决定 |
| 错误处理 | 预定义异常分支 | Agent 自己观察错误,思考新方案 |
| 信息缺失 | 流程卡住或预设询问节点 | Agent 自动决定反问用户或查其他来源 |
| 工具选择 | 代码中写死 | Agent 根据上下文自主选择 |
直观比喻:
- Workflow 像火车:轨道和站点都是固定的,只能按时刻表走
- Agent 像自动驾驶汽车:目的地固定,但路径、车速由车自己根据实时路况决定
记忆要点
观察现状动脑筋,动手执行看反馈,循环往复达目标。
| 阶段 | 要点 |
|---|---|
| Observe | 看清楚现状(用户说什么、工具返回什么、记忆有什么) |
| Think | 动脑子决定下一步(分析、规划、选择工具) |
| Act | 动手执行(调用工具、问用户、输出答案) |
| 循环 | 行动后世界变了,重新观察,直到任务完成 |
