Agent 原理
Categories: AI
Agent 原理
引言:从 ChatGPT 到 Agent
近几年,大模型(如 ChatGPT)已经很好用了:能聊天、能写代码、能总结资料。
但如果你仔细观察,会发现它仍然更像一个「超强的函数」而不是一个真正的「智能体」:
- 你给它一个提示(prompt),它给你一次性输出;
- 它不会主动拆解长任务,也不会自己决定「先查资料再算账、最后再写总结」;
- 它不会持久记住你的目标,也不会自行规划步骤或调用外部系统。
Agent(智能体),就是在大模型的基础上,加上目标、记忆、工具调用、环境交互和长期规划能力,让它从一个「问答机器」进化为一个能在复杂环境中自主完成任务的执行者。
agent-all-in-one 项目,就是一个用来演示各种 Agent 范式的教学/实验仓库:
- ReAct 范式
- Plan-and-Execute 范式
- Supervisor Multi-Agent 范式
- Reflection 范式
下面这篇文章,会围绕这几个问题展开:
- Agent 是什么?
- 为什么需要 Agent?
- Agent 的通用架构和运行循环是什么样?
- Agent 都有哪些典型范式?
agent-all-in-one中各自对应什么实现? - Agent 相关有哪些经典论文/代表性工作值得一看?
一、什么是 Agent?
先给一个工程视角的定义:
Agent 是一个能够围绕给定目标,持续感知环境、做出决策、调用工具并更新自身状态的智能程序。
拆开看,一个典型的 LLM Agent 至少包含几个关键要素:
- 目标(Goal)
- 例如:「帮我规划 7 天日本旅行」「写一篇技术博客」「做一轮代码 Review」。
- 目标可以是一次性的,也可以被长期持有、拆解为子目标。
- 感知(Perception / Observation)
- Agent 需要感知外部世界:搜索结果、数据库查询、API 响应、用户的追加指令等。
- 在
agent-all-in-one里,这就是工具返回值(Observation)。
- 记忆(Memory)
- 短期:本轮对话历史、当前任务上下文。
- 长期:过往项目、用户偏好、历史工具调用结果等(更高级的系统才有)。
- 推理与决策(Reasoning & Decision Making)
- 决定「下一步该干什么」:是继续问用户、调用搜索工具、还是直接给出答案?
- ReAct、Plan-and-Execute、Reflection 等范式,本质上都是在设计不同的决策流程。
- 行动(Action / Tool Use)
- 调用工具:搜索引擎、计算器、数据库、HTTP API、本地代码执行环境等。
- 在
agent-all-in-one中,对应search、calculator、get_current_time等工具。
- 环境(Environment)
- 包括互联网、文件系统、业务系统、游戏世界(如 Minecraft)、机器人控制系统等。
- Agent 通过工具与环境交互,从环境中获得新的 Observation。
用一个简单的框图来表示:
flowchart LR
U[用户 / 上层系统] -->|任务/指令| A[Agent]
A -->|调用| T[工具 / API / 子系统]
T -->|结果| A
A -->|中间结果 / 最终答案| U
A -->|读写| M[记忆 / 状态]
在 agent-all-in-one 里,Agent 本身往往被实现为一个「图(Graph)」,其中每个节点代表一个步骤(如 Planner、Executor、Supervisor、Worker、Reflector 等),这些节点一起实现了上图中的「感知 → 决策 → 行动 → 更新状态」循环。
二、为什么需要 Agent?
如果我们只用「普通 ChatGPT 模式」,会遇到几个典型问题:
- 无法可靠完成复杂多步骤任务
- 示例:「帮我调研 3 篇最新的 LangGraph 相关技术文章,提取要点,做一个对比表格」
- 这背后其实需要:搜索 → 逐篇阅读 → 提取关键信息 → 汇总成结构化结果 → 写总结。
- 单轮大模型回答,很容易「跳步骤」「幻觉」或遗漏细节。
- 缺乏与真实世界系统的连接
- 例如:「帮我查当前汇率,并按今天价格估个机票预算」
- 大模型本身看不到实时数据,一定要通过「工具」连接真实世界。
- 缺少可观测、可调试的执行流程
- 单次回答你很难知道:
- 它有没有去查资料?
- 它是怎么做中间推理的?
- Agent + 流程图(如 LangGraph)让整个过程变得可视化、可调试。
- 单次回答你很难知道:
- 无法持续执行长任务
- 比如「帮我持续监控某股票的新闻,重要消息发通知」。
- 这类任务需要长期运行的 Loop,而不仅仅是一次性输出。
因此,Agent 的价值可以概括为:
- 从「大模型 = 强函数」升级到「大模型 = 可编排的智能子系统」;
- 让大模型能主动拆解任务、选择工具、调用环境,并在过程中自我修正;
- 让开发者可以像搭积木一样,将 ReAct / Plan-and-Execute / Multi-Agent / Reflection 等模式组合起来。
三、通用 Agent 架构与运行循环
无论是哪种范式(ReAct / Plan-and-Execute / 等),背后都有一个类似的「总循环」:
接收任务 → 解析任务 → 规划/决策下一步 → 行动(调用工具/子 Agent)→ 观察结果 → 更新状态与计划 → 判断是否结束。
可以用一个伪代码式的循环来描述:
while not done:
1. 读取当前目标 + 状态 + 观察结果
2. 大模型做推理(思考):下一步该干什么?
3. 得到决策:
- 直接给出最终回答? -> done = True
- 调用某个工具? -> 调用工具,获取新 Observation
- 拆分为子任务? -> 生成子计划 or 分配给其他 Agent
4. 更新内部状态 / 记忆
简单的流程图示意:
flowchart TD
S[开始: 接收用户任务] --> P[解析任务 / 理解意图]
P --> D[决策: 下一步做什么?]
D -->|调用工具| A1[执行 Action 工具调用]
A1 --> O[观察 Observation]
D -->|直接回答| R[生成最终回答]
O --> U[更新状态 / 记忆]
U --> D
R --> E[结束]
在 agent-all-in-one 中,这个循环被用不同方式具体化:
react_agent/agent.py:在思考(Thought)— 行动(Action)— 观察(Observation)的循环中实现;plan_execute_agent/:把「规划」「执行」拆到不同节点(Planner / Executor);multi_agent/graph.py:通过 Supervisor 调度不同 Worker,在图结构中走不同路径;reflection_agent/:在 Generator ↔ Reflector 之间形成一个「改写—评价—再改写」的闭环。
四、Agent 常见范式总览
围绕 LLM 构造 Agent,目前比较常见的几类范式是:
- ReAct 范式:
- Thought(思考) + Action(行动) + Observation(观察)循环。
- 适合工具有限、任务较短的场景。
- Plan-and-Execute 范式:
- 先由 Planner 生成一个完整计划/任务分解,再由 Executor 逐步执行。
- 适合复杂、多步骤、可清晰拆解的任务。
- Supervisor Multi-Agent 范式:
- 有一个负责「任务分配」的 Supervisor,底下挂多个专长不同的 Worker。
- 适合需要多技能并行协作的场景,如「搜索 + 计算 + 写作」。
- Reflection 范式:
- Agent 会「审视自己之前的输出」,根据评审反馈做迭代改写。
- 适合对输出质量要求极高的任务,如技术文章、复杂分析报告。
agent-all-in-one 恰好分别实现了这四种范式,对应目录为:
react_agent/plan_execute_agent/multi_agent/reflection_agent/
五、agent-all-in-one 中的四种典型 Agent 范式
5.1 ReAct 范式:推理 + 行动
核心思想:
把大模型的自然语言推理能力(Reasoning)和工具调用能力(Acting)交替结合起来,在「思考—行动—观察」的循环中逐步解决问题。
一个典型的 ReAct 交互日志大概是这样的(简化版):
Question: 计算 123 * 456 等于多少?
Thought: 这是一个乘法计算,我应该调用计算器工具。
Action: calculator("123 * 456")
Observation: 56088
Thought: 已经得到结果,可以回答用户了。
Final Answer: 123 * 456 = 56088。
ReAct 的通用流程图:
sequenceDiagram
participant U as 用户
participant A as Agent (ReAct)
participant T as 工具
U->>A: 问题/任务
loop Thought-Action-Observation
A->>A: Thought: 推理下一步
A->>T: Action: 调用工具
T-->>A: Observation: 工具结果
end
A-->>U: Final Answer
在 agent-all-in-one 中:
- 实现位置:
react_agent/agent.py - 工具定义:
react_agent/tools.py - 特点:
- 实现简单、灵活;
- 把中间推理过程暴露为可观察的「Thought」文本,很好调试;
- 更适合「一次性问题」或「工具数量不太多」的场景。
5.2 Plan-and-Execute 范式:先规划,再执行
当任务很复杂时,直接用 ReAct 可能会「想到哪做到哪」,缺乏全局视角。
Plan-and-Execute 范式把整个过程拆为两层:
- Planner(规划器):一次性生成一个较完整的任务计划;
- Executor(执行器):顺着计划一步步执行,每一步内部可以再用 ReAct/工具等。
示意流程:
flowchart TD
U[用户任务] --> P[Planner: 生成计划 Step 1..N]
P --> E[Executor: 逐步执行每个 Step]
E --> R[执行结果 & 总结]
R --> U2[返回给用户]
一个典型例子:
用户任务:帮我规划一次去日本的 7 天旅行,包括:
- 机票预估预算
- 每天的城市安排
- 必去景点和大致价格区间
Planner 可能生成类似的计划:
Step 1: 通过搜索获取从用户城市飞往东京/大阪的往返机票平均价格
Step 2: 估算 7 天的住宿预算,按中档酒店标准
Step 3: 设计 Day 1-7 的城市和景点安排
Step 4: 输出包含预算和行程表的总结文档
Executor 按 Step 1 -> 2 -> 3 -> 4 顺序执行,每一步都可以用工具/子 Agent。
在 agent-all-in-one 中:
- 规划相关代码:
plan_execute_agent/planner.py - 执行相关代码:
plan_execute_agent/executor.py - Agent 入口:
plan_execute_agent/agent.py - 适用场景:
- 长任务、结构比较清晰的任务(旅行规划、项目 Roadmap 设计、调研报告等);
- 需要先看整体再细化的情况;
- 便于在 LangGraph Studio 中可视化:你能看到 Planner 节点出一个计划,Executor 节点按计划一步步跑。
5.3 Supervisor Multi-Agent 范式:多智能体协作
有些任务「内含多种技能」,比如:
「搜索今天的天气,计算 256 * 789,然后写一份总结。」
如果全部交给一个 Agent 来做,它当然也能完成,但会变得「又要查资料,又要算,又要写」,逻辑混杂。
多智能体范式把不同职责拆开,让多个专长不同的 Agent 协同工作,由一个上层 Supervisor 负责调度。
在 agent-all-in-one 中,多智能体结构大致是:
- Supervisor(主管):
- 在
multi_agent/supervisor.py - 负责理解全局任务,决定「什么时候让哪个 Worker 出场」。
- 在
- Workers(工作者):在
multi_agent/workers.py中定义,例如:Researcher:使用搜索工具获取信息;Calculator:负责准确计算(数学/逻辑计算);Writer:负责用自然语言输出总结/报告。
可以画成这样的结构:
flowchart TD
U[用户任务] --> S[Supervisor]
S --> R[Worker: Researcher]
S --> C[Worker: Calculator]
S --> W[Worker: Writer]
R --> S
C --> S
W --> S
S --> U2[最终回答]
一个典型的执行流程可能是:
1. 用户给出复合任务(搜索 + 计算 + 写作)
2. Supervisor 分析任务,先调用 Researcher 搜集事实
3. Researcher 用 search 工具查资料,返回 Observation
4. Supervisor 根据 Observation 调用 Calculator 完成数值计算
5. 最后 Supervisor 把数据交给 Writer 生成自然语言总结
6. 返回综合结果给用户
这种范式的优点:
- 职责清晰:每个 Worker 专精一类任务,更易于调试和扩展;
- 容易并行化:多个 Worker 可以并行执行子任务;
- 贴合现实团队协作:Supervisor 就像项目经理,Workers 像不同专业的工程师。
5.4 Reflection 范式:反思与自我改进
当你希望 Agent 产出高质量内容(比如技术文章、方案设计、代码优化建议),一次性输出往往不够。
Reflection 范式的核心,是让 Agent 拥有「自我审阅、反思并改写」的能力。
在 agent-all-in-one 中,典型角色和流程:
- Generator(生成器):
reflection_agent/generator.py- 根据任务和历史反馈,生成当前版本的答案。
- Reflector(反思器):
reflection_agent/reflector.py- 给当前答案做 Review:指出问题、不足、改进方向。
- 反馈可以从多个维度考虑:准确性、完整性、清晰度、结构等。
- 迭代闭环:
flowchart TD
U[任务说明] --> G[Generator: 生成答案 V1]
G --> R[Reflector: 评审 V1, 给出改进建议]
R --> G2[Generator: 生成答案 V2]
G2 --> R2[Reflector: 再次评审]
R2 -->|直到质量合格或达到最大轮数| F[最终答案]
一个简单例子(写技术文章):
Round 1:
Generator 输出一篇「LangGraph 简介」文章
Reflector 评审:指出缺少使用示例、对比传统流程编排方式、没有提到可视化调试
Round 2:
Generator 根据反馈扩展:加入代码示例、小项目 demo、图示
Reflector 再次评审:结构有点松散,可以重构为「概念 -> 使用 -> 示例 -> 总结」
Round 3:
Generator 重构结构,增加小结和实践建议
Reflector 认为已达到质量要求 -> 输出最终稿
优点:
- 易于反复打磨输出质量,尤其适合:技术博客、API 文档、系统设计说明;
- 天然适配「人类在回路中」的场景:Reflector 也可以是人,而不是模型;
- 在 LangGraph Studio 中,你能看到每一轮 Generator / Reflector 的中间版本,非常利于调试。
六、Agent 相关经典论文 / 代表性工作
下面按主题列出一些与 Agent、工具增强 LLM、多智能体协作相关的经典或代表性工作,你可以根据兴趣和需要选择阅读。
6.1 工具增强与推理(Tool-augmented Reasoning)
- ReAct: Synergizing Reasoning and Acting in Language Models
Yao et al., 2022- 提出了 ReAct 范式:将「自然语言推理(Thought)」与「行动(Action)」交替结合,用于工具调用和环境交互。
- 对应
agent-all-in-one中的react_agent/实现。
- Toolformer: Language Models Can Teach Themselves to Use Tools
Schick et al., 2023- 研究如何让大模型通过自监督方式,在预训练阶段就「学会插入合适的工具调用」,而不是只在推理阶段硬编码;
- 更偏向「模型训练策略」,但对实际 Agent 设计有启发:工具调用可以是训练出来的模式,而不是完全手工 Prompt。
- PAL: Program-Aided Language Models
Chen et al., 2022- 提出让模型生成可执行代码片段(如 Python)来完成复杂推理任务,再执行代码获得结果;
- 在 Agent 语境下,可以看作是「把工具 = 代码执行环境」,通过代码而不是纯文本进行严谨推理。
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
Wei et al., 2022- 不直接讲 Agent,但给出了让模型显式写出中间推理步骤(思维链)的技巧;
- ReAct 可以看作是在 CoT 基础上,再接了一层「工具行动」。
6.2 反思与自我改进(Reflection / Self-Refine)
- Reflexion: Language Agents with Verbal Reinforcement Learning
Shinn et al., 2023- 倡导让 Agent 对自己的行为结果做「语言化反思」,并利用反思来改进后续策略;
- 与
agent-all-in-one中的 Reflection 范式高度契合:Generator + Reflector 的闭环。
- Self-Refine: Iterative Refinement with Self-Feedback
Madaan et al., 2023- 让模型对自己的回答生成反馈(例如指出模糊、不准确之处),再根据反馈改写答案;
- 对写作、代码生成、翻译等任务非常实用,是很多 Reflection 型 Agent 的灵感来源。
6.3 规划、搜索与决策(Planning / Search)
- Tree of Thoughts: Deliberate Problem Solving with Large Language Models
Yao et al., 2023- 把大模型的推理过程看作在「思维树」上进行搜索,而不是一条线性的思维链;
- 为更复杂的规划型 Agent 提供了搜索框架:可以保留多条候选思路,做回溯和评估。
- Plan-and-Solve Prompting(可查阅相关工作)
- 思想与 Plan-and-Execute 很接近:先让模型显式写出计划,再按计划解决任务;
- 在
agent-all-in-one中,plan_execute_agent/其实就是这种思想的工程化实现。
6.4 多智能体与长期任务(Multi-Agent / Long-horizon Agents)
- Voyager: An Open-Ended Embodied Agent with Large Language Models
Wang et al., 2023- 在 Minecraft 环境中构建了一个「会自己探索、记忆、学习技能」的长期 Agent;
- 关键点在于:技能库(技能程序的记忆)、长期目标、与环境的持续交互。
- 对于理解「真正意义上的 Agent(不仅是 QA 机器人)」非常有启发。
- Auto-GPT / BabyAGI 等开源项目(虽然不都是论文)
- 把 LLM 装上「目标管理、任务分解、任务队列、执行器、记忆」等模块,形成较完整的 Agent 系统;
- 是许多工程实践中「多轮自动执行、反复调用工具」范式的早期样板。
七、如何选择和实践这些 Agent 范式?
结合 agent-all-in-one,可以给出一个简单的「学习和实践路径」:
- 从 ReAct 入门
- 先理解 Thought / Action / Observation 循环;
- 在
react_agent/中观察:- 模型是如何决定「该用哪个工具」的?
- 工具输入/输出是如何以文本形式被包装起来的?
- 向 Plan-and-Execute 过渡
- 在
plan_execute_agent/里理解 Planner / Executor 拆分后的好处:- Planner 只考虑「做什么」和「顺序」;
- Executor 只负责「一步步把事情做完」。
- 在 LangGraph Studio 中查看这两类节点的执行路径。
- 在
- 尝试 Multi-Agent 协作
- 打开
multi_agent/graph.py和workers.py,看看:- Supervisor 是根据什么信息决定调用哪个 Worker?
- Worker 之间有没有共享状态 / 记忆?
- 尝试给系统增加一个新 Worker(比如「翻译专家」),体会可扩展性。
- 打开
- 最后玩转 Reflection 范式
- 在
reflection_agent/中观察 Generator 和 Reflector 的反复交互; - 尝试调高/调低「迭代轮数」,看看输出质量和时间的权衡;
- 把你正在写的技术文章交给这个 Agent 打磨试试。
- 在
小结
- Agent 是什么:在大模型之上,加入目标、记忆、工具和环境交互的「智能执行体」。
- 为什么需要 Agent:为了解决复杂任务、多工具协同、长时运行以及可观测调试的问题。
- 常见范式:ReAct、Plan-and-Execute、Supervisor Multi-Agent、Reflection 等,各有适用场景。
agent-all-in-one的价值:它把这些范式都做了一个最小但完整的工程实现,配合 LangGraph Studio,可以清楚看到 Agent 的内部思考和工具调用链路,非常适合作为你在笔记库《Agent 原理》中的「理论 + 实战」桥梁。