ReAct Agent 详细讲解:概念、实现与应用
说明:这里的 “React Agent” 在 Agent 面试语境中通常指 ReAct Agent,不是前端框架 React。 ReAct = Reasoning + Acting,也就是”边推理、边行动”的智能体模式。
📚 Agent 开发系列:1. 面试扫盲 → 2. ReAct Agent(本篇) → 3. Harness → 4. MCP → 5. Skill
1. ReAct Agent 是什么?
1.1 一句话理解
ReAct Agent 是一种让大模型在推理过程中主动调用工具,并根据工具返回结果继续推理、继续行动,直到完成任务的 Agent 架构。
普通大模型回答问题时,通常是:
用户问题 → LLM → 直接回答ReAct Agent 的流程是:
用户问题
→ LLM 思考下一步该做什么
→ 调用工具
→ 观察工具返回结果
→ 再次思考
→ 再次调用工具或生成最终答案它不是一次性回答,而是一个循环过程:
Thought → Action → Observation → Thought → Action → Observation → Final Answer2. 为什么需要 ReAct Agent?
2.1 普通 LLM 的问题
普通大模型有几个明显短板:
- 容易幻觉:不知道的内容也可能编出来。
- 不能获取实时信息:模型训练数据是静态的。
- 不能操作外部系统:不能自己查数据库、调接口、下单、检索知识库。
- 复杂任务无法分步执行:遇到多步骤任务容易一次性乱答。
- 缺少可追踪过程:不知道它为什么得出这个结论。
2.2 ReAct 解决了什么
ReAct Agent 的核心价值是:
| 问题 | ReAct 的解决方式 |
|---|---|
| 模型不知道实时信息 | 通过 Search / API / Database 工具查询 |
| 模型容易编造 | 先检索证据,再基于 Observation 回答 |
| 任务复杂 | 拆成多轮 Thought + Action |
| 需要操作系统 | 通过 Tool Calling 调用真实后端服务 |
| 过程不可解释 | 保留 Thought / Action / Observation 执行轨迹 |
3. ReAct Agent 的核心结构
3.1 三个核心动作
1)Thought:思考
大模型先分析当前任务,判断下一步应该做什么。
示例:
Thought: 用户想知道某门课程是否适合自己,我需要先查询课程信息,再结合用户学习目标进行推荐。2)Action:行动
大模型选择一个工具,并生成调用参数。
示例:
Action: query_course_by_id
Action Input: {"courseId": 1001}3)Observation:观察
工具执行后,把结果返回给大模型。
示例:
Observation: 课程名称:Java 微服务实战;适合人群:有 Java 基础,想学习 SpringCloud 的学员。然后模型继续推理:
Thought: 我已经拿到课程信息,还需要结合用户当前基础进行判断。
Final Answer: 这门课适合你,因为……4. ReAct Agent 的标准执行流程
可以理解为一个循环:
1. 接收用户问题
2. LLM 生成 Thought,判断是否需要工具
3. 如果需要工具,生成 Action 和参数
4. 系统执行工具
5. 工具返回 Observation
6. LLM 基于 Observation 继续推理
7. 重复 2-6
8. 达到终止条件后输出 Final Answer4.1 流程图
用户输入
↓
LLM 思考 Thought
↓
是否需要工具?
├── 否 → Final Answer
↓
选择工具 Action
↓
执行工具
↓
返回 Observation
↓
继续思考
↓
Final Answer5. ReAct Agent 和 Tool Calling 的关系
5.1 Tool Calling 是能力,ReAct 是模式
很多人会混淆 ReAct Agent 和 Tool Calling。
| 概念 | 解释 |
|---|---|
| Tool Calling | 大模型调用外部函数或接口的能力 |
| ReAct Agent | 组织“思考 + 工具调用 + 观察结果 + 再思考”的执行模式 |
也就是说:
Tool Calling 是工具能力;
ReAct Agent 是使用工具完成任务的思考流程。5.2 只有 Tool Calling 不一定是 ReAct
例如用户说:
查询课程 id 为 1001 的课程信息系统直接调用:
CourseTools.queryCourseById(1001)然后返回结果,这只是一次 Tool Calling。
但如果用户说:
我想学 Java 后端,但不知道该买哪门课,帮我推荐一门并看看有没有优惠。ReAct Agent 可能会这样执行:
Thought: 用户需要课程推荐,我需要先了解用户目标。
Action: search_courses
Observation: 返回 Java 后端课程列表。
Thought: 需要筛选适合初学者的课程。
Action: query_course_detail
Observation: 返回课程详情。
Thought: 用户可能关注价格,我需要查询优惠券。
Action: query_available_coupon
Observation: 返回可用优惠券。
Thought: 可以结合课程和优惠券给出推荐。
Final Answer: 推荐你选择……这才是典型 ReAct。
6. ReAct Agent 和 Router Agent 的区别
你的简历里有 路由工作流 Agent,也有 ReAct ReportAgent。这两个要区分清楚。
| 对比项 | Router Agent | ReAct Agent |
|---|---|---|
| 核心目标 | 判断任务属于哪一类 | 分步推理并调用工具完成任务 |
| 典型动作 | 分类、分发 | Thought、Action、Observation |
| 适合场景 | 多业务意图分流 | 复杂任务执行 |
| 输出结果 | 分发到某个 Agent 或流程 | 最终答案 / 报告 / 操作结果 |
| 例子 | 判断用户是咨询、推荐还是购买 | 查询课程、检索知识库、调用订单工具、生成推荐 |
6.1 面试回答模板
如果面试官问:“Router Agent 和 ReAct Agent 有什么区别?”
可以这样答:
Router Agent 更偏任务分发,核心是识别用户意图,把请求路由到课程咨询、课程推荐、购买下单等不同业务智能体;
ReAct Agent 更偏任务执行,核心是让模型在执行复杂任务时按照 Thought、Action、Observation 的方式循环推理和调用工具。
所以 Router Agent 解决的是“任务交给谁处理”,ReAct Agent 解决的是“拿到任务后如何一步步处理”。
在我的项目里,云智汇更适合用路由工作流做业务分发,MiroFish 的 ReportAgent 更适合用 ReAct,让它自主调用图谱检索、主动搜索、Agent 采访和记忆召回工具生成报告。7. ReAct Agent 如何实现?
实现 ReAct Agent 有两种方式:
- Prompt 驱动式 ReAct
- 框架编排式 ReAct
8. Prompt 驱动式 ReAct 实现
8.1 基本 Prompt 模板
你是一个可以使用工具解决问题的智能体。
你必须按照以下格式进行推理:
Question: 用户问题
Thought: 你对当前问题的分析
Action: 要调用的工具名称,必须从工具列表中选择
Action Input: 工具参数,使用 JSON 格式
Observation: 工具返回结果
Thought: 基于观察结果继续分析
Final Answer: 给用户的最终答案
可用工具:
1. search_knowledge_base(query):检索课程知识库
2. query_course_by_id(courseId):根据课程 id 查询课程详情
3. query_user_progress(userId):查询用户学习进度
4. create_order(courseId, couponId):创建课程订单
要求:
- 如果信息不足,先调用工具,不要编造。
- 如果工具返回为空,要说明未找到结果。
- 涉及下单、支付等高风险操作时,必须先向用户确认。
- Final Answer 中只给用户可读结果,不暴露内部 Thought。8.2 示例执行过程
用户问题:
我想学 Java 微服务,有什么课程推荐吗?ReAct 执行:
Thought: 用户想要课程推荐,需要先检索 Java 微服务相关课程。
Action: search_knowledge_base
Action Input: {"query": "Java 微服务 SpringCloud 课程"}
Observation: 返回 3 门课程:Java 微服务实战、SpringCloud Alibaba、分布式项目实战。
Thought: 需要选择适合用户的课程,但用户没有说明基础,可以推荐并说明适用人群。
Final Answer: 推荐你优先看《Java 微服务实战》……9. 框架编排式 ReAct 实现
实际项目里,一般不会手写完整 Thought / Action / Observation 解析器,而是使用框架能力。
| 技术 | 实现方式 |
|---|---|
| Spring AI | ChatClient + Tool Calling + Advisor + ChatMemory |
| LangChain4j | AiService + Tools + Memory |
| LangChain / LangGraph | AgentExecutor / StateGraph + ToolNode |
| OpenAI Agents SDK | Agent + tools + handoffs + tracing |
| Dify / Coze | 可视化工作流 + 工具节点 |
| Camel-AI | 多智能体角色协作 + 工具调用 |
9.1 Spring AI 中的简化实现思路
在 Spring AI 中,ReAct 思路通常可以这样落地:
用户问题
→ ChatClient
→ 系统提示词约束模型先判断是否需要工具
→ Tool Calling 自动选择 CourseTools / OrderTools / SearchTools
→ 工具返回结果
→ ChatClient 继续生成回答
→ ChatMemory 记录上下文伪代码:
@Bean
public ChatClient chatClient(ChatClient.Builder builder,
CourseTools courseTools,
OrderTools orderTools,
KnowledgeTools knowledgeTools,
Advisor chatMemoryAdvisor) {
return builder
.defaultSystem("""
你是云智汇 AI 在线教育平台的教育智能体。
你需要根据用户问题判断是否调用工具。
对课程信息、订单信息、优惠券信息,不允许编造,必须通过工具查询。
涉及下单、支付等操作前必须让用户确认。
""")
.defaultTools(courseTools, orderTools, knowledgeTools)
.defaultAdvisors(chatMemoryAdvisor)
.build();
}调用:
Flux<String> result = chatClient.prompt()
.user(question)
.stream()
.content();工具示例:
@Component
public class CourseTools {
private final CourseClient courseClient;
@Tool(description = "根据课程ID查询课程详情")
public CourseInfo queryCourseById(@ToolParam(description = "课程ID") Long courseId) {
return courseClient.queryCourseById(courseId);
}
@Tool(description = "根据关键词搜索课程")
public List<CourseInfo> searchCourses(@ToolParam(description = "搜索关键词") String keyword) {
return courseClient.searchCourses(keyword);
}
}10. ReAct Agent 的核心模块设计
一个完整的 ReAct Agent 至少包括以下模块:
1. LLM 推理模块
2. Tool 工具注册模块
3. Tool Router 工具选择模块
4. Observation 结果回填模块
5. Memory 记忆模块
6. Stop Condition 终止条件
7. Guardrail 安全约束
8. Trace 日志追踪模块10.1 LLM 推理模块
负责生成下一步动作:
当前任务是什么?
我已经知道什么?
我还缺什么信息?
应该调用哪个工具?
什么时候可以结束?10.2 Tool 工具模块
工具可以是:
搜索工具
数据库查询工具
知识库检索工具
订单工具
课程工具
优惠券工具
图谱检索工具
Agent 采访工具
评审工具工具设计原则:
- 工具职责要单一
- 工具描述要清晰
- 参数命名要明确
- 返回结构要稳定
- 高风险工具要加权限和确认
- 工具失败要有兜底返回
10.3 Observation 结果回填
工具结果不能只给后端看,而是要重新交给模型。
例如:
Observation:
{
"courseName": "Java 微服务实战",
"price": 199,
"suitableFor": "有 Java 基础,想学习分布式微服务的学生"
}模型再基于这个结果生成自然语言回答。
10.4 Stop Condition 终止条件
ReAct Agent 必须有终止条件,否则可能无限循环。
常见终止条件:
1. 模型输出 Final Answer
2. 达到最大工具调用次数
3. 达到最大 token 长度
4. 工具连续失败
5. 用户主动停止生成
6. 触发安全策略11. ReAct Agent 在你的项目中怎么应用?
11.1 在云智汇 AI 在线教育平台中的应用
你的云智汇项目更偏 业务型 Agent。
可以这样应用 ReAct:
用户:“我想学 Java 后端,有没有适合我的课程?最好有优惠。”
Thought: 用户需要课程推荐和优惠券匹配。
Action: search_courses
Observation: 返回 Java 后端相关课程。
Thought: 需要结合用户学习进度判断适合程度。
Action: query_user_progress
Observation: 用户已完成 Java 基础课程,SpringBoot 进度 80%。
Thought: 用户适合学习微服务课程,还需要查询优惠券。
Action: query_available_coupon
Observation: 返回满 199 减 50 优惠券。
Thought: 可以给出课程推荐和优惠方案。
Final Answer: 推荐你选择《SpringCloud 微服务实战》……11.2 云智汇项目面试说法
在云智汇 AI 在线教育平台里,我没有让大模型直接回答所有问题,而是把课程查询、课程推荐、优惠券匹配、预下单等能力封装成 Tool。
当用户提出复杂请求时,Agent 会先判断用户意图,再通过工具查询真实业务数据,例如课程详情、用户学习进度和优惠券状态,最后基于工具返回结果生成回答。
这个过程本质上就是 ReAct 思路:模型先推理自己缺什么信息,再调用对应工具,拿到 Observation 后继续判断下一步动作。这样可以减少模型凭空编造,也能让大模型真正接入后端业务系统。11.3 在 MiroFish 增强版中的应用
MiroFish 项目里的 ReAct ReportAgent 更典型。
它的任务不是简单问答,而是生成可追溯预测报告,所以需要多步工具调用:
用户:“请预测某事件后续走势。”
Thought: 需要先检索图谱中相关人物、组织、事件。
Action: graph_retrieve
Observation: 返回实体关系和历史事件。
Thought: 需要补充最新外部信息。
Action: active_search
Observation: 返回最近新闻和公开材料。
Thought: 需要了解不同立场 Agent 的观点。
Action: interview_agents
Observation: 返回支持方、反对方、中立方观点。
Thought: 需要进行可信评审。
Action: confidence_review
Observation: 返回支持证据、反对证据、冲突点和置信度。
Thought: 信息足够,可以生成结构化预测报告。
Final Answer: 输出报告,包括核心结论、证据链、风险点、置信度和不确定性。11.4 MiroFish 项目面试说法
MiroFish 里我增强的是 ReAct ReportAgent。它不是一次性让大模型生成预测报告,而是让 ReportAgent 在生成报告前自主调用多个工具。
比如先调用 graph_retrieve 查询 Zep 图谱中的人物、组织、事件关系,再调用 memory_recall 召回历史材料,必要时调用 active_search 获取外部新信息,还可以调用 interview_agents 采访不同立场的模拟 Agent,最后调用 confidence_review 做可信评审。
这样报告的结论不是模型直接拍脑袋生成的,而是经过检索、采访、评审和证据整理之后生成的,最终可以输出证据链、冲突点和置信度。12. ReAct Agent 的优点
1. 能处理复杂多步骤任务
2. 能主动调用外部工具
3. 能基于真实数据生成回答
4. 能减少模型幻觉
5. 执行过程更可追踪
6. 适合和 RAG、Memory、Tool Calling 结合
7. 适合复杂业务系统中的智能助手13. ReAct Agent 的缺点和风险
13.1 容易陷入循环
模型可能反复调用同一个工具。
解决方案:
设置最大调用次数
记录工具调用历史
提示词约束不要重复调用同一工具
工具返回空结果时要求转入最终回答或追问用户13.2 工具调用错误
模型可能选错工具或参数错误。
解决方案:
工具描述写清楚
参数加校验
工具返回明确错误信息
必要时增加 Router Agent 先分类13.3 Observation 结果太长
工具返回内容过长会占用上下文。
解决方案:
工具层做摘要
只返回关键字段
RAG 召回 TopK 控制
历史上下文做压缩13.4 安全风险
模型可能调用高风险工具,例如下单、删除、支付。
解决方案:
高风险操作必须二次确认
后端做权限校验
工具层校验用户身份
敏感操作写审计日志
大模型只做建议,不直接绕过业务规则13.5 成本和延迟增加
多轮工具调用会增加响应时间。
解决方案:
控制最大推理轮次
并行执行可并行的工具
缓存热点查询结果
简单问题不走复杂 ReAct
使用 Router Agent 判断任务复杂度14. ReAct Agent 和 RAG 怎么结合?
RAG 可以作为 ReAct Agent 的一个工具。
例如:
Action: retrieve_course_knowledge
Action Input: {"query": "SpringCloud 和 Dubbo 区别"}
Observation: 返回课程讲义中的相关片段然后模型基于 Observation 回答。
14.1 结合方式
用户问题
→ ReAct Agent 判断需要知识库
→ 调用 RAG 检索工具
→ 获取相关知识片段
→ 判断是否还需要业务数据
→ 调用业务 Tool
→ 最终回答14.2 面试回答模板
RAG 解决的是知识召回问题,ReAct 解决的是多步任务执行问题。
在我的项目中,RAG 可以作为 ReAct Agent 的一个工具。当用户问课程知识点时,Agent 会先调用知识库检索工具,从 Pinecone 或 Chroma 中召回课程资料,再基于召回内容回答。如果用户的问题还涉及课程购买或推荐,Agent 还可以继续调用 CourseTools 或 OrderTools。
所以 RAG 是 ReAct Agent 的一个能力组件,而不是互相替代的关系。15. ReAct Agent 和 Memory 怎么结合?
Memory 可以帮助 ReAct Agent 记住上下文。
15.1 短期记忆
保存当前会话最近几轮消息:
用户刚才说自己是 Java 初学者
用户预算不超过 200 元
用户想学习后端开发15.2 长期记忆
保存长期用户偏好或世界状态:
用户已购买 Java 基础课
用户已完成 SpringBoot 课程 80%
某事件的历史发展记录
某组织和人物之间的长期关系15.3 面试回答模板
ReAct Agent 每一步推理都依赖上下文,所以需要 Memory 支持。
短期记忆用于保存当前多轮对话,比如用户前面提到的学习目标、预算和基础水平;长期记忆用于保存跨会话信息,比如用户历史学习进度、历史购买记录或世界事件状态。
在云智汇项目里,我用 MongoDB 存储多轮对话、工具调用结果和执行轨迹;在 MiroFish 项目里,我用 MySQL、Chroma 和 Zep GraphRAG 共同维护长期世界记忆。16. ReAct Agent 和多 Agent 怎么结合?
ReAct 可以作为某一个 Agent 的内部执行模式,也可以和多 Agent 协作结合。
16.1 单 Agent 内部 ReAct
ReportAgent 自己调用 graph_retrieve、active_search、memory_recall 等工具16.2 多 Agent 协作 + ReAct
Router Agent 判断任务类型
→ 分发给 ReportAgent
→ ReportAgent 使用 ReAct 调用工具
→ ReviewAgent 评审结果
→ FinalAgent 汇总输出16.3 面试回答模板
多 Agent 解决的是角色分工问题,ReAct 解决的是单个 Agent 如何执行任务的问题。
比如在 MiroFish 项目里,事实核查 Agent、支持方 Agent、反对方 Agent 可以分别从不同角度分析问题;而 ReportAgent 在生成最终报告时,可以使用 ReAct 模式主动调用图谱检索、历史记忆召回和可信评审工具。
所以两者可以结合:多 Agent 负责协作分工,ReAct 负责单个 Agent 的工具调用和推理执行。17. 如何设计 ReAct Agent 的工具?
17.1 工具设计原则
| 原则 | 说明 |
|---|---|
| 单一职责 | 一个工具只做一件事 |
| 描述明确 | 让模型知道什么时候调用 |
| 参数清晰 | 参数名称、类型、含义明确 |
| 返回稳定 | 返回结构化 JSON,避免随意文本 |
| 可校验 | 后端必须校验参数和权限 |
| 可追踪 | 记录工具调用日志 |
| 可降级 | 工具失败时有兜底方案 |
17.2 不好的工具设计
Tool: handle_user_request
描述:处理用户请求问题:太泛化,模型不知道什么时候调用,也不知道传什么参数。
17.3 好的工具设计
Tool: query_course_by_id
描述:当用户提供课程 ID 并希望查看课程详情时调用
参数:
- courseId: Long,课程 ID
返回:
- id
- name
- price
- suitablePeople
- outline18. ReAct Agent 如何控制幻觉?
18.1 核心思路
不让模型直接编答案,而是让它先查证据,再回答。18.2 具体方法
1. 系统提示词要求:课程、订单、优惠券等信息必须通过工具查询
2. RAG 召回为空时,明确回复“知识库中未找到”
3. Final Answer 必须基于 Observation
4. 工具返回结果要结构化,减少模型误解
5. 对事实类结论输出来源或证据链
6. 对预测类结论输出不确定性和置信度
7. 敏感操作必须后端校验,不信任模型判断18.3 面试回答模板
我主要从三个层面控制幻觉。
第一,在 Prompt 层约束模型,涉及课程、订单、优惠券等事实信息时必须先调用工具,不能凭空生成。
第二,在 RAG 和工具层提供真实上下文,让模型基于 Observation 生成回答。
第三,在输出层对没有证据支撑的内容进行兜底,如果知识库没有召回或工具返回为空,就明确告诉用户没有找到,而不是让模型硬编。
在 MiroFish 这种预测类场景中,我还会输出证据链、冲突点和置信度,避免把预测包装成确定事实。19. ReAct Agent 如何做异常兜底?
19.1 常见异常
工具调用失败
工具超时
工具返回空
参数缺失
权限不足
用户问题模糊
模型重复调用工具
RAG 召回不相关
外部 API 不可用19.2 兜底策略
| 异常 | 处理方式 |
|---|---|
| 参数缺失 | 追问用户补充信息 |
| 工具超时 | 返回稍后重试或使用缓存 |
| 工具返回空 | 明确说明未找到 |
| 权限不足 | 返回无权限提示 |
| 重复调用 | 设置最大调用次数 |
| 高风险操作 | 二次确认 |
| RAG 无召回 | 不回答或给通用解释并提示资料不足 |
| 外部服务异常 | 降级到基础问答或人工客服 |
20. ReAct Agent 的日志和可观测性
生产环境中不能只看最终答案,还要记录执行过程。
20.1 应记录的信息
sessionId
userId
requestId
用户输入
Agent 类型
每一次 Thought 摘要
工具名称
工具参数
工具返回结果摘要
耗时
错误信息
最终输出
token 消耗20.2 为什么重要
1. 方便排查工具调用错误
2. 方便分析路由是否准确
3. 方便评估 RAG 召回质量
4. 方便优化 Prompt
5. 方便审计高风险操作
6. 方便后续做 Agent Harness 评测21. ReAct Agent 面试高频问题
Q1:什么是 ReAct Agent?
答:
ReAct Agent 是 Reasoning + Acting 的智能体模式,也就是让大模型在完成任务时不是一次性回答,而是先思考当前需要什么信息,再选择工具执行动作,拿到工具返回结果后继续推理,直到生成最终答案。
它的典型流程是 Thought、Action、Observation、Final Answer。Q2:ReAct Agent 和普通 LLM 有什么区别?
答:
普通 LLM 通常是用户输入后直接生成回答,容易受限于已有知识,也容易幻觉。
ReAct Agent 会在回答前进行分步推理,并主动调用搜索、数据库、知识库、业务接口等工具,把外部真实信息作为 Observation 再生成答案。
所以它更适合复杂任务、实时信息查询和业务系统操作场景。Q3:ReAct Agent 和 Tool Calling 有什么区别?
答:
Tool Calling 是大模型调用外部工具的能力,而 ReAct Agent 是组织工具调用的执行模式。
一次简单的函数调用只能算 Tool Calling;如果模型能根据任务先思考、选择工具、观察结果、继续判断下一步,再输出最终答案,这才是 ReAct Agent。Q4:ReAct Agent 的核心流程是什么?
答:
核心流程是 Thought、Action、Observation、Final Answer。
Thought 是模型分析问题和决定下一步;
Action 是选择工具并生成参数;
Observation 是工具返回结果;
Final Answer 是模型基于前面推理和观察结果生成最终回答。
复杂任务中这个过程可能会循环多轮。Q5:ReAct Agent 如何避免无限循环?
答:
我会设置最大工具调用次数、最大 token 数、工具连续失败次数等终止条件。
同时在 Prompt 中约束模型不要重复调用同一个工具,如果工具返回为空或连续失败,就应该转为追问用户或给出明确兜底回答。Q6:ReAct Agent 如何选择工具?
答:
模型主要根据工具的 description、参数说明、系统提示词和当前上下文来选择工具。
所以工具描述必须清晰,比如 query_course_by_id 只用于根据课程 ID 查询详情,search_courses 用于按关键词搜索课程。
如果业务复杂,也可以在前面加 Router Agent 先做意图分类,再把请求交给对应领域的 Agent,降低工具选择复杂度。Q7:ReAct Agent 在你的项目里怎么用?
答:
在云智汇项目里,ReAct 思路主要体现在 AI 助手调用课程、订单、优惠券等业务工具的过程中。
用户提出复杂请求后,Agent 会先判断需要哪些信息,再调用 CourseTools、OrderTools 或 RAG 检索工具,拿到真实业务数据后再生成回答。
在 MiroFish 项目里更典型,我增强的 ReportAgent 会调用图谱检索、主动搜索、历史记忆召回、Agent 采访和可信评审工具,再生成可追溯预测报告。Q8:ReAct Agent 和 RAG 有什么关系?
答:
RAG 是知识召回能力,ReAct 是任务执行模式。
RAG 可以作为 ReAct Agent 的一个工具,比如 Agent 判断自己缺少课程知识时,就调用知识库检索工具,从 Pinecone 或 Chroma 中召回资料,再基于结果回答。
所以二者不是替代关系,而是可以组合使用。Q9:ReAct Agent 和多 Agent 有什么关系?
答:
多 Agent 解决的是角色分工问题,ReAct 解决的是单个 Agent 如何分步执行任务的问题。
比如 MiroFish 里可以有事实核查 Agent、支持方 Agent、反对方 Agent 等多个角色,而最终 ReportAgent 可以使用 ReAct 模式调用图谱检索、主动搜索、可信评审等工具生成报告。Q10:为什么说 ReAct Agent 更适合复杂任务?
答:
因为复杂任务通常不能一次性回答,需要先拆解问题、查询外部信息、根据结果继续判断下一步。
ReAct Agent 正好通过 Thought、Action、Observation 的循环,把复杂任务拆成多个可执行步骤,所以更适合报告生成、课程推荐、智能客服、数据分析等场景。22. ReAct Agent 面试追问与答法
追问 1:Thought 要不要展示给用户?
答:
不建议展示完整 Thought。
Thought 属于内部推理过程,可能包含中间判断、错误尝试或敏感信息。
用户只需要看到最终答案、必要的证据来源和工具结果摘要即可。
如果需要可解释性,可以展示简化后的“执行步骤”或“依据”,而不是原始 Thought。追问 2:如果工具返回错误,Agent 怎么办?
答:
工具返回错误时,不应该让模型继续编答案。
我会让工具返回结构化错误信息,比如 errorCode、message、retryable。
如果是参数缺失,就让 Agent 追问用户;如果是服务异常,就提示稍后重试或走降级逻辑;如果是权限不足,就返回标准权限提示。追问 3:如果 Agent 选错工具怎么办?
答:
首先在工具设计上减少歧义,让工具名称和描述更清晰。
其次通过 Router Agent 先做领域分发,减少单个 Agent 可见工具数量。
再次在工具层做参数校验和业务校验,即使模型选错工具,也不能绕过后端规则。
最后通过日志记录工具调用轨迹,后续根据错误样本优化 Prompt 和工具描述。追问 4:ReAct 会不会很慢?
答:
会有这个问题,因为 ReAct 可能涉及多轮模型调用和多次工具调用。
我的优化思路是:简单问题不走复杂 ReAct;设置最大调用轮次;对可并行的工具并发执行;对热点课程、常见问答做缓存;RAG 控制 TopK 和返回字段长度。追问 5:ReAct Agent 可以直接执行下单吗?
答:
不建议让模型直接完成最终下单,尤其是涉及支付、扣库存、创建订单等强一致性操作。
Agent 可以负责理解用户意图、查询课程、匹配优惠券、生成预下单建议,但真正创建订单前必须让用户确认,并由后端服务进行权限校验、库存校验和事务处理。23. ReAct Agent 学习路线
第一阶段:理解概念
掌握:
ReAct = Reasoning + Acting
Thought / Action / Observation / Final Answer
ReAct 和 Tool Calling、RAG、Memory、多 Agent 的关系第二阶段:能画流程
能画出:
用户输入 → LLM 思考 → 工具调用 → 工具返回 → 再思考 → 最终输出第三阶段:能结合项目讲
必须能讲:
云智汇:课程推荐 / 课程咨询 / 智能下单如何用 ReAct
MiroFish:ReportAgent 如何调用图谱检索、主动搜索、Agent 采访和可信评审工具第四阶段:能回答异常
重点掌握:
工具失败怎么办
路由错误怎么办
RAG 无召回怎么办
Agent 无限循环怎么办
高风险操作怎么控制24. 30 秒面试总结版
ReAct Agent 是一种 Reasoning + Acting 的智能体模式,它让大模型在完成任务时先思考当前缺什么信息,再调用工具获取外部结果,然后基于 Observation 继续推理,直到输出最终答案。
它的核心流程是 Thought、Action、Observation、Final Answer。
在项目里,ReAct 常和 RAG、Tool Calling、Memory 结合使用,比如课程推荐场景中,Agent 可以先检索课程知识库,再调用课程和优惠券工具,最后生成推荐结果;在 MiroFish 中,ReportAgent 可以调用图谱检索、主动搜索和可信评审工具生成可追溯预测报告。25. 1 分钟高分回答版
我理解的 ReAct Agent,本质上是把大模型的推理过程和外部工具调用结合起来。
普通大模型通常是用户问什么就直接生成答案,但 ReAct Agent 会按照 Thought、Action、Observation 的方式循环执行:先分析当前任务需要什么信息,再选择合适的工具,比如知识库检索、数据库查询、业务接口调用,拿到工具返回结果后再继续判断下一步,直到生成最终答案。
它和 Tool Calling 的区别是,Tool Calling 只是调用工具的能力,而 ReAct 是一种组织工具调用和多步推理的 Agent 执行模式。
在我的项目里,云智汇的课程推荐、课程咨询、智能下单可以用 ReAct 思路,让 Agent 先查课程知识库,再调用课程和订单工具;MiroFish 里的 ReportAgent 更典型,它会主动调用图谱检索、历史记忆召回、Agent 采访和可信评审工具,最后生成有证据链和置信度的预测报告。26. 最终背诵重点
必须背熟这 6 句话:
1. ReAct = Reasoning + Acting,是“边推理、边调用工具”的 Agent 模式。
2. 核心流程是 Thought → Action → Observation → Final Answer。
3. Tool Calling 是能力,ReAct 是使用工具完成复杂任务的执行模式。
4. RAG 可以作为 ReAct Agent 的一个检索工具,Memory 可以为 ReAct 提供上下文。
5. ReAct 适合复杂任务,例如课程推荐、智能下单、报告生成、数据分析。
6. 生产环境必须控制工具权限、最大调用次数、异常兜底和执行轨迹日志。