本文较长,建议点赞收藏,以免遗失。由于文章篇幅有限,文中我还会插入一些针对该知识点更详细的技术文档,自行领取,以便帮助大家更好的学习。
ReAct(Reasoning + Action)是一种让大语言模型(LLM)自主完成任务的核心架构。与传统直接生成答案的模式不同,ReAct 要求代理交替执行以下两步:
传统 LLM 缺陷 | ReAct 解决方案 |
---|---|
依赖预训练知识,无法获取实时数据 | 调用搜索引擎/API 获取最新信息 |
复杂计算容易出错 | 集成计算工具执行精确运算 |
多步骤任务逻辑混乱 | 拆解为“思考-行动”链式决策 |
典型案例:
用户问:“特斯拉当前股价是多少?相比去年同期涨了多少百分比?” 传统 LLM 可能直接编造数据,而 ReAct 代理会:
ReAct 代理以“思考 → 行动 → 观察”的循环方式运行,重复进行直到找到解决方案或最终答案。
这与人类解决问题的方式类似:
ReAct 框架使用提示工程来强制执行这种结构化方法,交替模型的思想和行动/观察。
以下是ReAct 循环的逐步分解:
思考:由法学硕士 (LLM) 驱动的代理会分析用户的查询和内部语境,并用自然语言生成推理步骤。这通常不会向最终用户展示,而是代理自言自语的一部分。例如:“问题询问一个国家的人口数量;我应该使用网络搜索来查找最新数据。”
动作:基于想法,代理决定执行哪个外部工具或操作。它会输出指示操作的指定格式。例如:Action: WebSearch("population of Canada 2023")。代理本质上是通过名称“调用”某个函数(工具),通常会附带一些输入参数。
观察:代理的环境(我们的代码)执行请求的操作,并将结果(观察)返回给代理。例如,网页搜索工具可能会返回:“ Observation: The population of Canada in 2023 is 38 million.”。此观察结果会被输入到代理的上下文中。
智能体获取新信息后返回第一步(另一个思考)。它会利用新数据进行推理。在我们的例子中,它可能会想:“现在我有了人口数据;我可以回答这个问题了。”
这个“思考/行动/观察”循环不断重复,允许代理根据需要,串联使用多种工具(例如搜索,然后进行计算,再进行一次搜索等等)。最终,代理决定可以回答用户的问题。此时,它不再输出“行动”,而是输出“最终答案”。
正如我们将在从头开始的实施中看到的那样,在整个过程中,代理维持对话及其自己的中间步骤。
每个想法和观察都可以附加到对话上下文中,以便 LLM 记住当中所做的任何操作。
这对于连贯性至关重要。最终结果是,代理能够有效地动态规划其方法,将推理与执行相结合。
这种动态方法比僵化的脚本或单轮响应更具适应性。它能够处理不可预见的子任务,类似于人在出现新信息时进行及时的调整。
为了让你更彻底明白其逻辑,我整理了两个示例,并带你从头构建 ReAct 一个代理,粉丝朋友自行领取(附代码):
《Python 和 LLM 从头构建 ReAct 代理全流程》
工具是实现行动的关键,需满足 3 个设计原则:
常用工具示例:
from math import sqrt
tools = [
Tool(
name="GoogleSearch",
func=search_api, # 对接搜索引擎API
description="获取实时信息,输入:搜索关键词"
),
Tool(
name="Calculator",
func=lambda x: eval(x), # 注意:生产环境需替换为安全计算库
description="执行数学计算,输入:数学表达式"
),
Tool(
name="DataPlotter",
func=generate_chart, # 数据可视化工具
description="生成折线图,输入:{x:[1,2,3], y:[4,5,6]}"
)
]
ReAct 的思考质量取决于 Prompt 设计,经典模板如下:
你是一个自主代理,请通过以下步骤解决问题:
1. 思考:分析当前需要什么信息
2. 行动:调用工具获取信息(格式:ACTION: 工具名(参数))
3. 观察:记录工具返回结果
4. 循环直到得出最终答案
当前任务:{query}
历史记录:
{memory}
请输出下一步指令:
实际生成示例:
思考:需要知道2024年奥斯卡最佳影片
ACTION: GoogleSearch("2024 Oscar best picture winner")
观察:"《奥本海默》获得2024年奥斯卡最佳影片"
思考:用户还要求主演名单
ACTION: GoogleSearch("Oppenheimer cast")
观察:"基里安·墨菲、艾米莉·布朗特..."
思考:答案已完整
FINAL_ANSWER: 最佳影片是《奥本海默》,主演包括...
原生实现后需考虑五大增强方向:
if "答案直接可见" in tool_result:
return tool_result # 提前终止循环
原生实现 | CrewAI/LangChain |
---|---|
✅ 完全掌控底层逻辑 | ✅ 快速构建生产系统 |
✅ 适合研究/定制化场景 | ✅ 内置负载均衡、容错机制 |
❌ 需自行处理并发/监控 | ❌ 抽象层掩盖关键细节 |
推荐策略:
用原生实现理解原理 → 在 CrewAI 中实践复杂任务 → 定制框架扩展点
ReAct 不仅是工具调用模式,更是 LLM 实现“自驱动”的认知框架。关注我,我们下期见。如果本次分享对你有所帮助,记得点个小红心,你的鼓励就是我更新的动力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。