阅读指南
理解 Agent 的架构,就像理解人类的大脑结构——只有知道各个模块如何协作,才能真正掌握 Agent 的设计精髓。
如果要用一句话概括 Agent 的核心架构,那就是:感知(Perceive)→ 思考(Think)→ 行动(Act)→ 观察(Observe)→ 循环往复。
这个模式并不是 LLM 时代的发明,而是来自经典的「智能体理论」(Intelligent Agent Theory)。早在 1995 年,Stuart Russell 和 Peter Norvig 在《人工智能:一种现代方法》中就提出了这个框架。
传统的软件是这样工作的:
输入 → 处理 → 输出 → 结束
比如一个计算器程序:
2 + 35但 Agent 不同。它运行在一个 动态变化的环境 中,需要不断地:
用一个具体例子来理解这个循环。假设让 Agent 准备一次周末出游:
第 1 轮:
[感知] 用户目标:准备周末出游
环境信息:当前是周三,目的地未定
[思考] 分析:需要先确定目的地和天气
计划:查询几个热门城市的天气预报
[行动] 调用工具:get_weather(cities=["杭州", "苏州", "南京"])
[观察] 结果:杭州晴天,苏州多云,南京有雨
第 2 轮:
[感知] 新信息:杭州天气最好
用户偏好:喜欢自然景观(从历史对话记忆中提取)
[思考] 决策:推荐杭州西湖
计划:查询景点开放时间和门票信息
[行动] 调用工具:search_attractions("杭州西湖")
[观察] 结果:西湖免费开放,周末人流量大
第 3 轮:
[感知] 新信息:西湖周末人多
[思考] 优化:建议早上 7 点出发避开人流
计划:生成完整行程
[行动] 生成输出:给用户一份详细的周末出游计划
[观察] 用户反馈:满意,任务完成
我们会发现,这个循环的关键在于:
上面的例子展示了 Perceive-Think-Act 循环在具体场景中的运作方式。这个经典的理论框架,到了 LLM 时代被工程化为一种更具体的实现模式——ReAct(Reasoning and Acting)。
我们在第 2 节已经提到过,ReAct 是 Agent 演进路径中第二阶段的关键模式。
从演进路径来看,Stage 2(ReAct)是当前工程实践的基线,Stage 3(自主 Agent)则是尚在探索中的目标方向。第 2 节已经说明,自主 Agent 的各项能力——自主规划、长期记忆、主动发起、自我修正——目前仍处于早期阶段,在可靠性、成本和安全性上还有大量工程问题待解决。因此,生产环境中实际落地的 Agent 系统,绝大多数仍然运行在 ReAct 模式或其精细化变体之上。理解 ReAct 架构,正是掌握当前可用 Agent 工程实践的基础。
ReAct 并没有创造一个新的循环结构,而是 把 PTA 框架中的"思考"过程从黑盒变成了白盒。
传统方式(思考是黑盒):
Perceive → [Think:内部推理] → Act → Observe
↑
你看不到这部分
ReAct方式(思考显式输出):
Thought: "我需要先查询杭州的天气..."
↓(这段文本会被记录和展示)
Action: get_weather("杭州")
Observation: {"weather": "晴天"}
Thought: "天气不错,现在..."
↓
...
所以,PTA 和 ReAct 的关系可以这样理解:PTA 是理论框架,ReAct 是工程实现。PTA 描述了 Agent 应有的四个步骤——感知、思考、行动、观察;ReAct 则给出了在 LLM 系统中每一步具体怎么做。核心流程依然是:
感知输入 → 思考(现在可见) → 执行行动 → 观察结果 → 循环
ReAct 的价值:
它是当前最成熟、最可靠的 Agent 架构模式,也是整个第 3 节讨论各模块架构时依赖的核心框架。
现在理解了 Agent 的循环流程:Perceive(感知)→ Thought(思考)→ Action(行动)→ Observation(观察)→ 循环(ReAct 模式的完整形态)。
但如果去看实际的 Agent 系统代码,会发现它们通常被组织成这样的模块架构:
这就产生了一个问题:四步循环和五个模块,它们之间是什么关系?
两套概念的本质区别
═══════════════════════════════════════
● ReAct 循环
- 这是「流程视角」
- 描述 Agent **做什么**
- 关注时间顺序:先感知,再思考,再行动
● 五个模块(感知层/规划层/推理层...)
- 这是「架构视角」
- 描述 Agent **怎么实现**
- 关注功能划分:每个模块负责什么
看看 ReAct 循环的每个步骤是由哪些模块实现的:
1. Thought(思考)被拆成了两个模块:
因为"思考"这个动作太复杂了:
人类也是这样:计划"准备一次旅行"时,会先规划整体流程(订票、订酒店、查景点),然后在每个环节中推理具体操作(订哪个航班、选哪家酒店)。
2. Observation(观察)没有独立的层:
观察其实是三个动作的组合:
记录和反馈都好理解,但为什么需要单独强调"分析"?
假设 Agent 调用天气 API 后收到错误:
{"error": "城市不存在"}
如果只是简单"记录"和"反馈",Agent 会把错误原封不动地传给下一轮,可能陷入死循环。
但如果有"分析"环节,推理层会:
这就是为什么观察不只是被动接收,还包含主动分析和判断。
3. 记忆系统是贯穿整个循环的:
记忆系统不是循环中的某一步,而是全程参与:
职责:将外部世界的各种输入转化为LLM可以理解的文本形式。
可以把感知层想象成Agent的"翻译官":它负责把来自物理世界、数字系统、用户交互的各种信息,统一翻译成LLM能理解的语言。
感知层处理的输入来源:
关键工作:
1. 多模态转文本:
2. 结构化数据处理:
例如天气 API 返回:
{"city": "杭州", "temp": 25, "weather": "晴"}
两种处理方式都可以:
Observation: {"city": "杭州", "temp": 25, "weather": "晴"}Observation: 杭州当前温度25度,天气晴朋3. 上下文组装:
示例:
用户输入:“帮我查一下明天杭州的天气”
感知层组装的 Prompt:
## 系统信息
当前时间:2024年12月9日 14:30
用户位置:上海
## 用户信息
用户偏好:喜欢详细的天气信息(温度、湿度、风力)
## 可用工具
1. get_weather(city, date): 获取指定城市和日期的天气
2. search_web(query): 搜索网络信息
## 用户请求
帮我查一下明天杭州的天气
这样,LLM 就能全面理解当前的“环境”了。
再看一个工具返回的例子:
假设调用 get_weather("杭州", "2024-12-10") 后得到:
{
"city": "杭州",
"date": "2024-12-10",
"temperature": {"max": 18, "min": 8},
"humidity": 65,
"wind": {"speed": 12, "direction": "东北"},
"weather": "多云"
}
感知层有两种选择:
方式1:保持 JSON
Observation: {"city": "杭州", "temperature": {"max": 18, "min": 8}, ...}
→ 优点:保持结构,如果需要传给下一个工具很方便 → 缺点:嵌套层级多时,LLM 可能难以快速提取关键信息
方式2:转为自然语言
Observation: 杭州2024年12月10日天气多云,温度8-18℃,湿度65%,东北风12m/s
→ 优点:LLM 更容易理解和推理,特别是需要总结时 → 缺点:如果下一步需要结构化数据,还得让 LLM 重新解析
实践中的选择原则:
职责:将高层目标拆解为可执行的子任务序列。
在最新的 Agent 架构中,规划能力 被认为是 Agent 与普通聊天机器人的最大区别。
两种规划策略:
1. 一次性规划(Plan-then-Execute)
先生成完整的任务计划,再逐步执行,适合目标明确、环境稳定的场景。比如用户说"帮我写一份周报",Agent 会先制定完整计划:
检索本周工作记录 → 提取关键成果和数据 → 按照模板生成周报正文 → 校对和格式化
然后按照这个计划一步步执行。
2. 边规划边执行(Interleaved Planning)
每执行一步后,根据结果重新规划下一步,这就是 ReAct 模式 的核心思想,适合环境动态变化、目标不明确的场景。
比如用户说"帮我研究一下最新的 Agent 框架":
每一步都根据上一步的结果来决定下一步做什么。
职责:在每一步决策中,分析当前状态,选择最优行动。
这是 LLM 的核心能力所在。现代 Agent 的推理层通常包括两部分:
1. 知识推理:
2. 逻辑推理:
用户问:“我应该选杭州还是南京旅游?”
Agent 的推理过程:
[Step 1] 首先,我需要了解这两个城市的天气情况
→ 调用 get_weather("杭州"), get_weather("南京")
[Step 2] 杭州晴天,南京有雨 → 天气角度杭州更好
[Step 3] 接下来,检索用户偏好 → 用户喜欢自然风景
[Step 4] 杭州有西湖,符合用户偏好 → 综合判断:推荐杭州
这种逐步推理的方式,让 Agent 的决策过程 可解释、可追踪、可调试。
新趋势:
职责:将决策转化为具体的执行动作。
LLM Agent 的行动层与传统机器人不同,它不是控制电机转动,而是 调用工具(Tool Calling)。
常见的行动类型:
职责:存储和检索历史信息,使 Agent 能够“记住”过去的交互。
这是目前Agent 研究的 热点领域。没有记忆的 Agent 就像“金鱼”,每次对话都是从零开始;有了记忆,Agent 才能真正成为“助理”。
两种记忆类型:
1. 短期记忆(Short-term Memory)
示例:
用户:我喜欢吃川菜
(存入短期记忆)
Agent:好的,我记住了。
用户:帮我推荐一家餐厅
Agent:根据您喜欢川菜,我推荐...
(从短期记忆中提取)
挑战:
2. 长期记忆(Long-term Memory)
目前,向量数据库 被认为是 Agent 记忆系统的最佳选择:
[存储阶段]
用户信息:“我喜欢吃川菜”
→ Embedding 模型转化为向量
→ 存入向量数据库(如 Pinecone, Weaviate, Chroma)
[检索阶段]
用户问:“帮我推荐餐厅”
→ 将查询转为向量
→ 在数据库中搜索相似向量
→ 检索到:“用户喜欢川菜”
→ 将这条信息添加到当前 Prompt
Agentic 是什么?
现在,你会发现很多技术都加上了"Agentic"前缀:Agentic RAG、Agentic Workflow、Agentic Search...
Agentic = 赋予 Agent 特性,核心含义是:
- 从"被动执行"变为"主动决策"
- 从"一次性处理"变为"多轮迭代"
- 从"固定流程"变为"自主规划"
简单来说,给任何技术加上Agentic,就是让它具备Agent的自主性和循环能力。
传统 RAG 是"一次性检索":Agent 提问 → 检索 → 生成答案。
Agentic RAG是"多轮自主检索":
第 1 轮:检索到一些信息
Agent:这些信息不够,我需要更多关于 X 的内容
第 2 轮:重新检索,调整查询
Agent:现在信息足够了,可以生成答案
这种模式让 Agent 对知识的获取更主动、更灵活。
现在了解了 Agent 的模块架构,但可能会好奇:这些模块背后的核心能力到底是如何实现的?感知如何理解环境?思考如何进行推理?行动如何准确执行?
下一节,我们将深入剖析 Agent 的三大核心能力——从多模态感知到 Chain-of-Thought 推理,再到工具调用的技术细节,可以看到,原来 Agent 的"智能"是通过这些具体的能力实现的。
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 感知-思考-行动 | PTA (Perceive-Think-Act) | /piː tiː eɪ/ | Agent运行的核心理论循环框架 |
| 感知层 | Perception Layer | /pərˈsepʃn ˈleɪər/ | 将外部输入转化为LLM可理解形式的模块 |
| 规划层 | Planning Layer | /ˈplænɪŋ ˈleɪər/ | 将高层目标拆解为可执行子任务序列的模块 |
| 推理层 | Reasoning Layer | /ˈriːzənɪŋ ˈleɪər/ | 每一步决策中分析当前状态选择最优行动的模块 |
| 行动层 | Action Layer | /ˈækʃn ˈleɪər/ | 将决策转化为具体执行动作的模块 |
| 自主检索增强生成 | Agentic RAG | /eɪˈdʒentɪk ræɡ/ | 多轮自主检索,Agent主动调整查询策略的知识获取方式 |