Login
首页 > 精选好文 > AI大模型

3小时彻底吃透ReAct:构建自主AI代理的底层能力矩阵(附完整代码)

聚客AI 2025-08-06 14:27:54 人看过

一、ReAct 模式:AI 代理的“思考-行动”循环

ReAct(Reasoning + Action)是一种让大语言模型(LLM)自主完成任务的核心架构。与传统直接生成答案的模式不同,ReAct 要求代理交替执行以下两步:

推理(Reasoning)分析当前状态,规划下一步行动

行动(Action)调用工具(Tools)获取信息或执行操作


二、为什么需要 ReAct?突破 LLM 的固有局限

image.png

典型案例

用户问:“特斯拉当前股价是多少?相比去年同期涨了多少百分比?”传统 LLM 可能直接编造数据,而 ReAct 代理会:

调用金融API获取当前股价

查询历史数据库找出去年同期股价

使用计算工具执行百分比运算

三、推理+行动:ReAct 代理的工作原理

ReAct 代理以思考 → 行动 → 观察的循环方式运行,重复进行直到找到解决方案或最终答案。

这与人类解决问题的方式类似:

我们思考该做什么

执行某项操作(例如查找某些内容或进行计算),

观察结果

然后将其融入到我们的下一个想法中。

ReAct 框架使用提示工程来强制执行这种结构化方法,交替模型的思想和行动/观察。
以下是ReAct 循环的逐步分解:
思考:由法学硕士 (LLM) 驱动的代理会分析用户的查询和内部语境,并用自然语言生成推理步骤。这通常不会向最终用户展示,而是代理自言自语的一部分。例如:“问题询问一个国家的人口数量;我应该使用网络搜索来查找最新数据。”

动作:基于想法,代理决定执行哪个外部工具或操作。它会输出指示操作的指定格式。例如:Action: WebSearch("population of Canada 2023")。代理本质上是通过名称“调用”某个函数(工具),通常会附带一些输入参数。

观察:代理的环境(我们的代码)执行请求的操作,并将结果(观察)返回给代理。例如,网页搜索工具可能会返回:“ Observation: The population of Canada in 2023 is 38 million.”。此观察结果会被输入到代理的上下文中。

智能体获取新信息后返回第一步(另一个思考)。它会利用新数据进行推理。在我们的例子中,它可能会想:“现在我有了人口数据;我可以回答这个问题了。”

这个“思考/行动/观察”循环不断重复,允许代理根据需要,串联使用多种工具(例如搜索,然后进行计算,再进行一次搜索等等)最终,代理决定可以回答用户的问题。此时,它不再输出“行动”,而是输出“最终答案”。
正如我们将在从头开始的实施中看到的那样,在整个过程中,代理维持对话及其自己的中间步骤。
每个想法和观察都可以附加到对话上下文中,以便 LLM 记住当中所做的任何操作。

这对于连贯性至关重要。最终结果是,代理能够有效地动态规划其方法,将推理与执行相结合。
这种动态方法比僵化的脚本或单轮响应更具适应性。它能够处理不可预见的子任务,类似于人在出现新信息时进行及时的调整。

四、工具调用:代理的“双手”

工具是实现行动的关键,需满足 3 个设计原则

原子性每个工具只做一件事(如 Calculator 仅负责计算)

强契约明确定义输入/输出格式(如 JSON Schema)

安全性隔离高风险操作(如数据库写入需权限控制)

常用工具示例

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]}"
    )
]

五、Prompt 工程:驱动推理的核心

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  # 提前终止循环

错误回退:工具调用失败时尝试替代方案

令牌压缩:用摘要替代完整历史记录减少 token 消耗

动态工具加载:运行时按需加载工具降低内存占用

置信度阈值:低置信度时要求人工干预

七、与框架的共生关系

image.png

推荐策略用原生实现理解原理 → 在 CrewAI 中实践复杂任务 → 定制框架扩展点

ReAct 不仅是工具调用模式,更是 LLM 实现“自驱动”的认知框架。关注我,我们下期见。更多AI大模型应用开发学习视频内容和资料,尽在聚客AI学院


版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章

大厂标准培训
海量精品课程
汇聚优秀团队
打造完善体系
Copyright © 2023-2025 聚客AI 版权所有
网站备案号:湘ICP备2024094305号-1