ReAct 智能体是一种 AI 智能体,它使用“推理与行动”(ReAct) 框架,将思维链 (CoT) 推理与外部工具使用相结合。ReAct 框架通过增强大型语言模型 (LLM) 在智能体工作流中处理复杂任务和决策的能力,提升了其整体性能。
ReAct 由 Yao 等人首次在 2023 年的论文《ReACT: Synergizing Reasoning and Acting in Language Models》中提出,可以被普遍理解为一种机器学习 (ML) 范式,用于整合 LLM 的推理和采取行动的能力。
更具体地说,ReAct 是一个概念框架,用于构建 AI 智能体,这些智能体可以以结构化但适应性强的方式与其环境交互,方法是使用 LLM 作为智能体的“大脑”来协调从简单检索增强生成 (RAG) 到复杂的多智能体工作流的任何内容。
与传统的人工智能 (AI) 系统不同,ReAct 智能体不会将决策与任务执行分离。因此,ReAct 范式的开发是生成式 AI 演化的重要一步,使之从单纯的对话式聊天机器人向复杂问题解决迈进。
ReAct 智能体和衍生方法继续为可以自主规划、执行和适应不可预见情况的 AI 应用程序提供支持。
ReAct 框架的灵感来源于人类在逐步规划和执行复杂任务时可以直观地使用自然语言的方式,这通常是通过我们自己的内心独白。
ReAct 智能体并不执行基于规则或其他预定义的工作流,而是依靠其 LLM 的推理能力,根据新信息或先前步骤的结果动态调整其方法。
想象一下为一次短途旅行打包行李。你可能会先确定几个关键因素(“那里天气会怎样?”),然后主动查询外部信息(“我会查看当地的天气预报”)。
通过使用这些新信息(“天气会很冷”),您可以确定下一个考虑因素(“我有什么保暖的衣服?”)和行动(“我要看看我的衣橱”)。采取该行动后,您可能会遇到意想不到的障碍(“我所有保暖的衣服都收起来了”),并相应调整下一步(“我可以叠穿哪些衣服?”)。
类似地,ReAct 框架使用提示工程以交替执行思考、行动和观察的正式模式构建 AI 智能体的活动:
语言化的 CoT 推理步骤(想法)帮助模型将较大的任务分解为更易于管理的子任务。
预定义操作使模型能够使用工具、进行应用程序编程接口 (API) 调用以及从外部来源(例如搜索引擎)或知识库(例如内部文档仓库)收集更多信息。
采取行动后,模型会重新评估其进度,并使用该观察结果提供最终答案或通知下一个想法。理想情况下,观察还可以考虑先前信息,无论是来自模型标准上下文窗口的早期信息还是来自外部内存组件的信息。
由于 ReAct 智能体的性能在很大程度上取决于其中央 LLM 在完成复杂任务时的“口头”思考能力,因此 ReAct 智能体从具有高级推理和指令遵循能力的高能力模型中获益很大。
为了最大限度地降低成本和延迟,多智能体 ReAct 框架可能主要依赖更大、性能更高的模型作为中央智能体,其推理过程或动作可能涉及将子任务委托给使用更小、更高效的模型构建的更多智能体。
这个框架本质上创建了一个反馈循环,在这个循环中,模型通过迭代重复这个交错的思考-行动-观察过程来解决问题。
每次循环结束,即每次智能体采取了行动并根据行动结果进行了观察,智能体就必须决定是重复循环还是结束循环。
何时以及如何结束推理循环是 ReAct 智能体设计中的一个重要考虑因素。设定最大循环迭代次数是限制延迟、成本和词元使用量并避免无休止循环可能性的简单方法。
反之,也可以将循环设置为在满足某些特定条件时结束,例如当模型确定的潜在最终答案超过某个置信度阈值时。
为了实现这种推理和动作循环,ReAct 智能体通常使用 ReAct 提示的某种变体,无论是在提供给 LLM 的系统提示中,还是在用户查询本身的上下文中。
ReAct 提示是一种特定的提示技术,旨在指导 LLM 遵循 ReAct 的思维、行动和观察循环范式。虽然显式使用传统的 ReAct 提示方法对于构建 ReAct 智能体并不是绝对必要的,但大多数基于 ReAct 的智能体都实施了该方法或至少从中获得了直接灵感。
ReAct 提示首先在原始 ReAct 论文中概述,其主要功能是指导 LLM 遵循 ReAct 循环并确定在处理用户查询时可以使用哪些工具(即可以采取哪些操作)。
无论是通过明确的说明还是包含小样本示例,ReAct 提示都应该:
指导模型使用思维链推理:提示模型通过逐步思考,将想法与行动交织起来,对任务进行推理。
定义操作:确定模型可用的具体操作。操作可能需要生成特定类型的下一个想法或子提示,但通常涉及使用外部工具或创建 API。
指示模型进行观察:提示模型在每个操作步骤后重新评估其上下文,并使用更新的上下文为下一个推理步骤提供信息。
循环:如有必要,指示模型重复上述步骤。您可以提供结束循环的具体条件,例如最大循环数,或指示智能体在认为得出正确的最终输出时结束推理过程。
输出最终答案:只要满足这些结束条件,就向用户提供最终输出,以响应他们的初始查询。与 LLM 的许多用途一样,如同推理模型在确定最终输出之前采用思维链推理,ReAct 智能体经常被提示在“便笺簿”中进行推理过程。
ReAct 提示的经典示例是预构建系统的系统提示
Answer the following questions as best you can. You have access to the following tools:
Wikipedia: A wrapper around Wikipedia. Useful for when you need to answer general questions about people, places, companies, facts, historical events, or other subjects. Input should be a search query.
duckduckgo_search: A wrapper around DuckDuckGo Search. Useful for when you need to answer questions about current events. Input should be a search query.
Calculator: Useful for when you need to answer questions about math.
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [Wikipedia, duckduckgo_search, Calculator]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
ReAct 框架的引入是 LLM 驱动的智能体式工作流发展的重要一步。从通过 RAG 将 LLM 锚定到现实世界的实时外部信息,到促成后续突破(例如催生了现代推理模型的 Reflexion),ReAct 助力催化了 LLM 在文本生成之外的任务中的使用。
ReAct 智能体的效用主要来自 ReAct 框架的一些固有特性:
适应性:这种灵活性,加上它们在确定调用适当工具或 API 时所展现的动态和情境化特性,意味着 ReAct 智能体能够利用其推理过程来适应新挑战。尤其是在较长的环境窗口中操作或使用外部记忆增强时,它们可以从过去的错误和成功中学习,以应对不可预见的障碍和情况。这使得 ReAct 智能体变得灵活且具有弹性。
可解释性:ReAct 智能体的语言化推理过程易于遵循,这有助于调试并有助于相对用户友好地构建和优化。
准确性:正如最初的 ReAct 论文所指出的那样,仅靠思维链 (CoT) 推理就为 LLM 带来了很多优点,但也会增加产生幻觉的风险。ReAct 将 CoT 与信息源外部连接相结合,可显著减少幻觉,从而使 ReAct 智能体更加准确和可信。
智能体式 AI 的另一个重要范式是函数调用,它最初由 OpenAI 于 2023 年 6 月推出,以补充其 GPT 模型的智能体能力。
函数调用范例需要微调模型来识别特定情况何时应该导致工具调用并输出包含调用这些函数所需参数的结构化 JSON 对象。
许多专有和开源的 LLM 系列,包括 IBM® Granite、Meta 的 Llama 系列、Anthropic 的 Claude 和 Google Gemini,现在都支持函数调用。
是 ReAct 还是函数调用“更好”。通常取决于您具体用例的性质。在涉及相对简单(或至少是可预测的)任务的场景中,与 ReAct 智能体相比,函数调用可以更快地执行、节约令牌并且更易于实现。
在这种情况下,ReAct 智能体反复循环进行 CoT 推理所耗费的令牌数量可能会被认为是低效的。
其固有的弊端在于,模型相对缺乏自定义工具使用方式和时机的能力。同样,当智能体处理需要复杂推理的任务,或属于动态或不可预测的场景时,函数调用的僵化可能会限制智能体的适应性。在这种情况下,能够查看导致特定工具调用的逐步推理过程通常会大有裨益。
ReAct 智能体可以通过多种方式设计和实现,可以使用 Python 从头开始编码,或者借助 BeeAI 等开源框架进行开发。ReAct 范式的受欢迎程度和持久性,在 GitHub 和其他开发者社区上带来了大量有关 ReAct 智能体的文献和教程。
作为开发定制 ReAct 智能体的替代方案,许多智能体式 AI 框架(包括 BeeAI、 LlamaIndex 和 LangChain 的 LangGraph,提供了预配置的 ReAct 智能体模块供特定用例使用。
借助 IBM watsonx.ai 开发平台,让开发人员能够构建、部署和监控 AI 代理。
借助在业界首屈一指的全面功能,帮助企业构建、定制和管理 AI 智能体和助手,从而在提高生产力方面取得突破性进展。
借助专为提高开发人员效率而设计的 Granite 小型开放式模型,可实现 90% 以上的成本节约。这些企业就绪型模型可根据安全基准提供卓越的性能,且适用于多种企业任务,包括网络安全、RAG 等。