---
title: "01-主流架构深度对比"
created: 2026-05-14
aliases:
- 主流架构深度对比
tags:
- 项目
---
# 主流架构深度对比
上一篇我们知道了Agent是什么,这篇来聊聊Agent是**怎么干活**的。
同样是完成一个任务,不同的Agent可能有完全不同的"工作风格"。有的边想边干,做一步看一步;有的先整体规划,再分步执行;有的做完还要自我检查,反复打磨。
这些不同的工作风格,在技术上叫做**Agent架构**。目前主流的有三种:**ReAct**、**Reflection**、**Plan and Execute**。
咱们用一个统一的场景来对比它们:假设你让Agent帮你**分析某个品类的电商竞品,给出定价建议**。
## ReAct:边想边干的实干派
### 核心思想
> ReAct的全称是**Reasoning + Acting**,核心理念是**思考和行动交替进行**。
>
> 它模仿的是人类解决问题的自然过程:遇到问题先想一想,想清楚就动手做,做完看看结果,根据结果再想下一步该怎么办。
>
> 用三个词概括:**Thought(思考)→ Action(行动)→ Observation(观察)**,然后循环往复。
### 论文背景
ReAct架构最早来自普林斯顿和Google的研究论文 **《ReAct: Synergizing Reasoning and Acting in Language Models》**,论文地址:
作者通过实验证明,单独的推理(Chain of Thought)或单独的行动(工具调用)都不如两者结合的效果好。
![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/06-系统讲解AI相关技术/08-智能体是什么/assets/Fs0S_zzjLkxAzOl2QAAOsAtVAz1b-2941971c.png]]
> 论文中的实验结果显示:
>
> - **标准方法**:直接让模型回答,容易产生幻觉
> - **纯推理(CoT)**:只思考不行动,缺乏外部信息
> - **纯行动(Act Only)**:只调工具不思考,容易走偏
> - **ReAct**:边想边做,能在行动中发现错误并修正
>
> 在多跳问答任务中,ReAct的准确率比其他方法有明显提升,特别是在需要多步推理的复杂问题上。
![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/06-系统讲解AI相关技术/08-智能体是什么/assets/Fuh018ggjJIkalghE5K9q9fk1eMC-9a583dbc.png]]
### 实际例子
用户说:"帮我分析蓝牙耳机品类的竞品定价"
**第一轮**:
- **Thought**:用户想知道蓝牙耳机的竞品定价,我需要先搜索主流的蓝牙耳机品牌有哪些
- **Action**:调用搜索工具,搜索"蓝牙耳机 热门品牌"
- **Observation**:搜索结果显示主流品牌有AirPods、Sony、华为FreeBuds、小米、漫步者...
**第二轮**:
- **Thought**:已经知道主流品牌了,现在需要查询它们的价格
- **Action**:调用电商API,查询这些品牌的产品价格
- **Observation**:AirPods Pro 1899元、Sony WF-1000XM5 1999元、华为FreeBuds Pro 3 1499元...
**第三轮**:
- **Thought**:价格信息收集完了,现在需要分析定价规律并给出建议
- **Action**:生成分析报告
- **Observation**:报告生成完成
每一轮,Agent都是先想清楚当前该做什么,然后执行,看结果,再决定下一步。
### 代码实现思路
ReAct的核心在于让LLM按照"思考→行动→观察"的模式输出。关键是**提示词设计**和**循环控制**:
```java
@GetMapping("/react-demo")
public String reactDemo(String conversationId) {
// 定义工具
ChatOptions chatOptions = ToolCallingChatOptions.builder()
.toolCallbacks(ToolCallbacks.from(new ProductTools()))
.internalToolExecutionEnabled(false) // 关闭自动执行,手动控制
.build();
// ReAct风格的系统提示词
String systemPrompt = """
你是一个电商数据分析助手,请按照以下模式工作:
1. Thought:先分析当前需要做什么
2. Action:执行具体的工具调用
3. Observation:观察工具返回的结果
4. 重复以上步骤直到任务完成
如果任务已完成,请直接给出最终结论。
""";
Prompt prompt = new Prompt(
List.of(new SystemMessage(systemPrompt),
new UserMessage("分析蓝牙耳机品类的竞品定价")),
chatOptions);
chatMemory.add(conversationId, prompt.getInstructions());
ChatResponse response = chatModel.call(new Prompt(chatMemory.get(conversationId), chatOptions));
chatMemory.add(conversationId, response.getResult().getOutput());
// 循环处理工具调用
while (response.hasToolCalls()) {
// 执行工具
ToolExecutionResult result = toolCallingManager.executeToolCalls(
new Prompt(chatMemory.get(conversationId), chatOptions), response);
// 工具结果加入记忆
chatMemory.add(conversationId, result.conversationHistory()
.get(result.conversationHistory().size() - 1));
// 继续调用模型
response = chatModel.call(new Prompt(chatMemory.get(conversationId), chatOptions));
chatMemory.add(conversationId, response.getResult().getOutput());
}
return response.getResult().getOutput().getText();
}
```
### 优缺点
> **优点**:
>
> - 灵活,能根据执行结果动态调整
> - 实现相对简单
> - 每一步都有思考过程,便于理解
>
> **缺点**:
>
> - 效率较低,每步都要调用LLM
> - 容易陷入局部思维,缺乏全局视角
> - 可能跑偏,需要多次尝试
>
> **适合场景**:任务相对简单、需要灵活调整、对响应速度要求不高
## Reflection:追求完美的反思派
### 核心思想
Reflection的核心是**自我批判、迭代改进**。Agent完成任务后,不是直接交付,而是先自己审视一遍:这个结果好不好?有没有问题?能不能改进?
就像写文章一样,初稿写完之后要自己检查几遍,修改润色,才能定稿。
![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/06-系统讲解AI相关技术/08-智能体是什么/assets/Fj2BSeBer86GNtAHb-uoj6rLw3i--36e657b3.png]]
### 实际例子
还是那个竞品分析的任务:
**初稿生成**:
Agent生成了一份竞品分析报告,包含了各品牌价格、市场定位等信息。
**第一轮反思**:
- **审视**:这份报告数据全面吗?逻辑清晰吗?结论有依据吗?
- **反馈**:报告缺少价格区间的对比分析,结论部分的建议不够具体,没有说明建议定价的依据
- **修订**:补充价格区间分析表格,细化定价建议,增加依据说明
**第二轮反思**:
- **审视**:修订后的报告是否解决了之前的问题?有没有新的问题?
- **反馈**:整体已经不错,但市场趋势部分可以补充一些数据支撑
- **修订**:增加近期销量趋势数据
**达标输出**:
经过两轮迭代,报告质量达到要求,输出给用户。
### 代码实现思路
Reflection通常需要两个"角色":一个负责生成,一个负责审视。可以是同一个模型扮演不同角色,也可以是不同的模型:
```java
public String reflectionDemo(String task) {
String draft = "";
String feedback = "";
int maxRevisions = 3;
int currentRevision = 0;
// 初稿生成
String writerPrompt = """
你是一位电商数据分析师,请根据用户需求生成分析报告。
任务:%s
""".formatted(task);
draft = chatModel.call(new Prompt(writerPrompt)).getResult().getOutput().getText();
// 迭代优化
while (currentRevision < maxRevisions) {
// 反思:让模型扮演审稿人角色
String reviewerPrompt = """
你是一位严格的分析报告审稿人,请审视以下报告:
%s
请从以下维度评价并给出改进建议:
1. 数据完整性
2. 逻辑清晰度
3. 结论可行性
如果报告已经足够好,请回复"APPROVED"。
""".formatted(draft);
feedback = chatModel.call(new Prompt(reviewerPrompt)).getResult().getOutput().getText();
if (feedback.contains("APPROVED")) {
break; // 质量达标,退出循环
}
// 修订:根据反馈改进
String revisePrompt = """
你是分析师,请根据审稿意见修改报告:
原报告:
%s
审稿意见:
%s
请输出修订后的完整报告。
""".formatted(draft, feedback);
draft = chatModel.call(new Prompt(revisePrompt)).getResult().getOutput().getText();
currentRevision++;
}
return draft;
}
```
### 优缺点
**优点**:
- 输出质量高,经过反复打磨
- 能发现并修正自身错误
- 适合对质量要求高的场景
> 可能陷入无限优化的循环——Reflection架构**必须设置最大反思轮次上限**,否则Token消耗会失控。
**适合场景**:报告生成、文章写作、代码审查等对质量要求高的任务
## Plan and Execute:运筹帷幄的规划派
### 核心思想
Plan and Execute的理念是**谋定而后动**。先做全局规划,把任务拆解成完整的步骤清单,然后按计划执行。
这种架构把"规划"和"执行"分成了两个独立的阶段,由不同的组件负责:
- **Planner(规划器)**:负责理解任务、制定计划
- **Executor(执行器)**:负责按计划执行每一步
![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/06-系统讲解AI相关技术/08-智能体是什么/assets/FrQxc7R4P08SF7GwxyOLH4acjxd9-f12a8a85.png]]
### 实际例子
用户说:"帮我分析蓝牙耳机品类的竞品定价"
**规划阶段**:
Planner分析任务后,输出计划:
```text
步骤1:搜索蓝牙耳机市场的主流品牌
步骤2:收集各品牌主力产品的价格信息
步骤3:整理价格数据,按区间分类
步骤4:分析各价格区间的竞争情况
步骤5:基于分析给出定价建议
```
**执行阶段**:
Executor按计划逐步执行,每完成一步就记录结果。
**汇总阶段**:
所有步骤完成后,汇总结果。如果发现某些信息不足,可能触发Replanner调整计划补充。
### 和ReAct的对比
ReAct是**边想边做**,每一步都是临时决定的;Plan and Execute是**先想后做**,一开始就规划好全部步骤。
打个比方:
- ReAct像是导航软件,走一段路重新规划一次
- Plan and Execute像是出发前就规划好完整路线,然后照着走
### 代码实现思路
Plan and Execute通常有三种实现方式:
**方式一:Plan内嵌ReAct**
```java
// 先用LLM生成计划
String plan = generatePlan(task);
// 用ReAct Agent执行每个步骤
for (String step : parseSteps(plan)) {
executeWithReAct(step);
}
// 汇总并判断是否需要重新规划
summarizeAndReplan();
```
**方式二:Plan直接指定工具调用**
```java
// Planner直接输出每步要调用的工具和参数
List toolCalls = plannerGenerateToolCalls(task);
// 按计划执行工具调用
for (ToolCall call : toolCalls) {
executeToolCall(call);
}
// 汇总给LLM做总结
generateSummary();
```
**方式三:多智能体协作**
把Planner、Executor、Replanner作为三个独立的Agent,相互协作完成任务。
### 优缺点
**优点**:
- 全局视角,规划更合理
- 执行效率高,可以并行
- 便于调试和审计,计划清晰可见
- 可以用小模型做执行,降低成本
**缺点**:
- 初始计划可能不完美,需要重规划机制
- 实现复杂度较高
- 对于高度动态的任务不够灵活
**适合场景**:复杂的多步骤任务、对可靠性要求高、需要可审计的场景
## 三大架构横向对比
| 维度 | ReAct | Reflection | Plan and Execute |
| --- | --- | --- | --- |
| 工作模式 | 边想边做,循环迭代 | 生成→审视→修订 | 先规划后执行 |
| 决策时机 | 每步临时决定 | 事后反思改进 | 事先全局规划 |
| 执行效率 | 低(串行) | 中 | 高(可并行) |
| 灵活性 | 高 | 中 | 中低 |
| 输出质量 | 中 | 高 | 中高 |
| 实现复杂度 | 低 | 中 | 高 |
| LLM调用次数 | 多 | 多 | 少 |
| 适合任务 | 简单灵活的任务 | 质量要求高的任务 | 复杂多步骤任务 |
![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/06-系统讲解AI相关技术/08-智能体是什么/assets/FiDplgmTTkD97o5bXqSl9RqeCWJ2-bd3af703.png]]
- 任务简单、需要灵活 → **ReAct**
- 对质量要求高、愿意多花时间 → **Reflection**
- 任务复杂、步骤多、需要可靠 → **Plan and Execute**
## 混合使用:取长补短
实际项目中,这三种架构经常**混合使用**,取长补短。
**常见的组合方式**:
- **Plan and Execute + ReAct**
- 用Plan制定整体计划
- 用ReAct执行每个步骤
- 遇到异常时用ReAct灵活处理
- **ReAct + Reflection**
- 用ReAct完成任务
- 用Reflection审视结果并改进
- **全家桶模式**
- Plan制定计划
- ReAct执行步骤
- Reflection检查结果
- Replanner调整计划
> 实际项目中,这三种架构经常**混合使用**,取长补短。比如某大厂的Agent系统,在Plan阶段规划好工具调用,用Workflow编排执行,遇到异常再用ReAct重新规划。既保证了效率,又保留了灵活性。
## 小结
这篇我们深入对比了三种主流Agent架构:
**ReAct**:边想边干,Thought→Action→Observation循环
- 灵活但效率低
- 适合简单灵活的任务
**Reflection**:自我批判,生成→审视→修订迭代
- 质量高但耗时
- 适合对质量要求高的任务
**Plan and Execute**:谋定后动,Planner→Executor→Replanner
- 高效但不够灵活
- 适合复杂多步骤任务
**选择建议**:
- 根据任务复杂度、灵活性需求、质量要求综合考虑
- 实际项目中经常混合使用
下一篇,我们来聊聊当一个Agent搞不定的时候,怎么让多个Agent协作起来——多智能体系统。
---
**企业级项目导航**:⬅️ [[05-智能体为什么需要技能包|05-智能体为什么需要技能包]] | 01-主流架构深度对比 | ➡️ [[02-多智能体深度协作|02-多智能体深度协作]]