当前位置: 首页 > news >正文

Agent学习-ReAct框架

ReAct 框架学习笔记

一、什么是 ReAct?

ReAct(Reasoning and Acting)是一种将**推理(Reasoning)行动(Acting)**相结合的 AI Agent 框架。它让大语言模型能够:

  • 通过思考来分析问题
  • 调用外部工具获取信息
  • 基于观察结果继续推理
  • 最终得出答案

核心思想:Think → Act → Observe → Think → …


二、ReAct 的工作流程

2.1 核心循环

1. Thought(思考):分析当前问题,规划下一步 2. Action(行动):调用工具或输出答案 3. Observation(观察):获取工具执行结果 4. 重复 1-3,直到得出最终答案

2.2 实现架构

classReActAgent:-llm_client:大语言模型客户端-tool_executor:工具执行器-max_steps:最大迭代步数-history:历史记录(Action+Observation)

三、关键技术细节

3.1 提示词设计

关键要素:

  • 当前时间:让模型知道当前日期,避免搜索过时信息
  • 工具列表:明确可用工具及其用法
  • 格式规范:严格定义 Thought/Action 输出格式
  • 历史记录:提供之前的 Action-Observation 对

示例:

当前时间:2026年03月15日 可用工具: - Search[query]: 网页搜索 格式: Thought: 你的思考 Action: Tool[input] 或 Finish[答案] Question: 华为最新的手机是什么? History: [之前的交互记录]

3.2 输出解析

三个关键解析函数:

  1. _parse_output(text): 从 LLM 响应中提取 Thought 和 Action
  2. _parse_action(action_text): 解析 Action 格式ToolName[input]
  3. _parse_action_input(action_text): 提取 Action 的输入参数

注意事项:

  • 需要处理 LLM 输出的格式变化(如反引号)
  • 使用正则表达式进行鲁棒解析
  • 支持re.DOTALL处理多行输入

3.3 历史记录管理

每次工具调用后,将 Action 和 Observation 追加到历史:

self.history.append(f"Action:{action}")self.history.append(f"Observation:{observation}")

这让模型能够基于之前的结果继续推理。


四、实际案例分析

4.1 问题:华为最新的手机是什么?

执行过程:

第 1 步:

  • Thought: 需要搜索最新信息,我的知识可能过时
  • Action:Search[华为最新手机型号 2026年]
  • Observation: 返回华为 Mate X6、Pura 系列等信息

第 2 步:

  • Thought: 需要确认 Mate X6 的详细配置和卖点
  • Action:Search[华为Mate X6 2026年 主要卖点 配置]
  • Observation: 获取折叠屏、电池、摄像头等详细信息

第 3 步:

  • Thought: 已收集足够信息,可以回答
  • Action:Finish[华为最新手机是 Mate X6...]

4.2 关键改进点

问题:模型搜索时带了错误年份(2023)

原因:

  • 提示词中没有提供当前时间
  • 模型使用了训练数据的截止日期

解决方案:

current_date=datetime.now().strftime("%Y年%m月%d日")prompt=REACT_PROMPT_TEMPLATE.format(current_date=current_date,# 关键:注入当前时间tools=tools_desc,question=question,history=history_str)

五、ReAct 的优势

✅ 1. 可解释性强

  • 每一步都有明确的 Thought(思考过程)
  • 用户可以看到 Agent 的推理链路
  • 便于调试和优化

✅ 2. 灵活性高

  • 可以动态调用多种工具
  • 支持多步推理和信息整合
  • 适应复杂的多步骤任务

✅ 3. 容错能力

  • 通过历史记录纠正错误
  • 可以根据 Observation 调整策略
  • 支持重试和备选方案

✅ 4. 易于扩展

  • 添加新工具只需注册到 ToolExecutor
  • 提示词模板可灵活调整
  • 支持不同的 LLM 后端

✅ 5. 实时信息获取

  • 通过搜索工具获取最新数据
  • 突破 LLM 知识截止日期限制
  • 适合需要实时信息的场景

六、ReAct 的缺点

❌ 1. Token 消耗大

  • 每步都需要完整的提示词(工具列表 + 历史记录)
  • 历史记录随步数增长而膨胀
  • 成本随迭代次数线性增长

示例:

第1步:提示词 1000 tokens 第2步:提示词 1000 + 历史 200 = 1200 tokens 第3步:提示词 1000 + 历史 400 = 1400 tokens

❌ 2. 响应速度慢

  • 每步都需要调用 LLM(串行执行)
  • 无法并行处理独立任务
  • 多步推理导致总延迟高

❌ 3. 依赖 LLM 能力

  • 弱模型可能无法正确遵循格式
  • 输出解析容易失败(格式不规范)
  • 需要强大的推理能力才能有效规划

❌ 4. 容易陷入循环

  • 可能重复执行相同的 Action
  • 缺乏全局规划能力
  • 需要设置 max_steps 防止无限循环

❌ 5. 工具调用开销

  • 每次工具调用都有网络延迟
  • 搜索 API 可能有速率限制
  • 工具失败会浪费一个步数

❌ 6. 提示词工程复杂

  • 需要精心设计格式规范
  • 不同模型可能需要不同的提示词
  • 难以处理边界情况(如模型输出反引号)

七、优化建议

7.1 减少 Token 消耗

  • 压缩历史记录(只保留关键信息)
  • 使用更小的模型处理简单步骤
  • 实现历史记录摘要机制

7.2 提升响应速度

  • 使用流式输出(边生成边解析)
  • 缓存常用工具结果
  • 并行调用独立工具

7.3 增强鲁棒性

  • 添加输出格式校验和重试机制
  • 检测循环并主动打破
  • 提供更多示例(Few-shot)

7.4 改进规划能力

  • 在开始前生成完整计划
  • 使用更强的模型(如 GPT-4)
  • 结合其他框架(如 Plan-and-Execute)

八、总结

ReAct 是一个简单但强大的 Agent 框架,特别适合:

  • 需要多步推理的复杂任务
  • 需要调用外部工具的场景
  • 需要可解释性的应用

但要注意其成本和速度问题,在生产环境中需要权衡:

  • 任务复杂度 vs Token 成本
  • 响应速度 vs 推理质量
  • 通用性 vs 针对性优化

适用场景:

  • ✅ 信息检索和整合
  • ✅ 数据分析和报告生成
  • ✅ 客服和问答系统
  • ✅ 研究助手和知识探索

不适用场景:

  • ❌ 实时性要求极高的应用
  • ❌ 简单的单步任务
  • ❌ 成本敏感的大规模部署
  • ❌ 需要精确控制的确定性任务
http://www.jsqmd.com/news/483981/

相关文章:

  • 微信小程序端基础面试题
  • 指针和地址—C语言(快速了解指针,由浅至深)
  • 在openSUSE-Leap-15.6-DVD-x86_64中使用gnome-builder-45.0的基本功能(三)空白Meson工程
  • 安装英文版Linux
  • CPC认证是什么?CPC认证是怎么收费的?
  • 三菱FX3U PLC 与昆仑通泰触摸屏控制松下伺服电机使用例程分享
  • 智阅—基于大模型API的文档智能总结系统
  • 拼多多2026届校招春招开始啦!
  • python微信小程序的学习资料分享系统
  • 满树的遍历--题解
  • 90天蜕变!我的大模型入门项目管理计划,保姆级教程免费送!一个普通人的90天学习路线图
  • 机器学习34:元学习(Meta Learning)
  • c++问题:free (): double free detected in tcache
  • 小程序毕业设计-基于微信小程序的在线学习在线课程系统的设计与实现
  • spring框架的主要几个依赖
  • 8:《死亡笔记》历史必然性:私人执法者在法律崩溃时的永恒规律(从罗马到现代义警)
  • 1949 AI:轻量化智能工具的应用优势与实践价值
  • 电力系统调频控制技术与仿真建模实践
  • 2026 年南宁物业律师口碑榜出炉,哪家强?
  • 用这个办法修复扬声器----------JAMO低音炮喇叭维修小记
  • 计算机毕业设计ssm小型养猪场信息化管理系统 基于SSM框架的小型养猪场智能化管理系统开发 SSM架构下的小型养猪场数字化管理平台设计
  • 冒泡,选择,插入排序再学习
  • iOS 上架 4.3a 被拒【uniapp专讲】​
  • linux——目录及文件操作
  • 经典的openclaw提示词注入
  • 【全网首家】·openclaw开发的GEO优化系统|小龙虾GEO系统|小龙虾专属GEO优化助理
  • vscode, wsl 使用claude code
  • 一套全方位零售数字化经营系统:技术解析与业务赋能
  • 对一些主流模型的结构解析(pt/onnx/openvino/gguf)
  • 三个F数,像空间F数,近轴工作F数以及工作F数