概念定义

ReAct(Reasoning and Acting)是一种将语言模型的推理能力与执行具体行动相结合的框架,通过交织思考和行动步骤,使模型能够动态地与外部环境交互并解决复杂任务。

详细解释

ReAct由普林斯顿大学和谷歌研究院在2022年提出,2023年3月修订版进一步完善了框架。其核心创新在于将传统的纯推理过程(如思维链)与实际行动执行相结合,形成”思考-行动-观察”的循环模式。这种方法使大语言模型不再局限于内部知识,而能够通过调用外部工具、API和数据库来获取实时信息和执行具体操作。 2024年的发展显示,虽然ReAct框架仍然重要,但OpenAI、Anthropic、Mistral和Google等主要厂商推出的原生函数调用功能正在逐渐成为主流。这些原生实现在性能和易用性上往往优于传统的ReAct提示工程方法。然而,ReAct的思想仍然是理解现代LLM智能体工作原理的关键。 ReAct特别适合需要多步推理和外部信息整合的复杂任务,如问答系统、任务规划、代码调试等。其可解释性和可追踪性使其在需要高可靠性的应用场景中具有独特优势。

工作原理

ReAct框架工作流程

问题示例:“苹果公司当前股价是多少?“

ReAct循环过程

第一轮循环:
阶段内容详情
🤔 思考 1分析问题我需要查询苹果公司(AAPL)的实时股价。应该调用股票API。
行动 1API调用调用: StockAPI.get_price(symbol="AAPL")
👀 观察 1获取结果{"price": 189.95, "change": +2.3%}
第二轮循环:
阶段内容详情
🤔 思考 2深入分析已获得股价信息。需要获取更多背景,查询今日市场表现。
行动 2市场查询调用: MarketAPI.summary(date="today")
👀 观察 2市场数据市场整体上涨,纳斯达克: +1.8%,科技板块领涨
💡 最终思考与总结: 基于获得的信息,苹果股价为$189.95,上涨2.3%,表现优于大盘。在科技板块整体上涨的背景下,苹果股票表现强劲。

可集成的外部工具

工具类别具体工具
🔍 搜索工具Wikipedia • Google Search • Bing API
🧮 计算工具Python解释器 • 数学引擎 • SQL查询
📊 数据API天气API • 股票数据 • 新闻API
🔧 系统工具文件系统 • 数据库 • Shell命令

2024年:ReAct vs 原生函数调用

特性ReAct提示工程原生函数调用趋势
通用性适用所有LLM特定模型原生实现成主流
性能中等更优,延迟低ReAct思想仍是核心
可解释性过程透明良好-
维护成本较高更低-
ReAct的核心机制:
  1. 思考(Thought):分析当前状态,决定下一步策略
  2. 行动(Action):执行具体操作,调用外部工具
  3. 观察(Observation):接收行动结果,更新认知
  4. 循环迭代:重复上述过程直至任务完成

实际应用

基础ReAct实现

class ReActAgent:
    def __init__(self, llm, tools):
        self.llm = llm
        self.tools = tools
        self.history = []
    
    def run(self, question):
        """执行ReAct循环"""
        max_iterations = 5
        
        for i in range(max_iterations):
            # 1. 生成思考
            thought = self.generate_thought(question, self.history)
            self.history.append(f"Thought {i+1}: {thought}")
            
            # 2. 决定行动
            action = self.decide_action(thought)
            if action == "FINISH":
                return self.generate_final_answer()
            
            self.history.append(f"Action {i+1}: {action}")
            
            # 3. 执行行动
            observation = self.execute_action(action)
            self.history.append(f"Observation {i+1}: {observation}")
            
            # 4. 检查是否完成
            if self.is_complete(observation):
                break
        
        return self.generate_final_answer()
    
    def generate_thought(self, question, history):
        prompt = f"""
        问题:{question}
        历史:{history}
        
        基于以上信息,思考下一步应该做什么。
        Thought:
        """
        return self.llm.generate(prompt)

LangChain中的ReAct实现

from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType

# 定义工具
tools = [
    Tool(
        name="Wikipedia",
        func=wikipedia_search,
        description="搜索维基百科获取信息"
    ),
    Tool(
        name="Calculator",
        func=calculator,
        description="执行数学计算"
    ),
    Tool(
        name="Weather",
        func=get_weather,
        description="获取天气信息"
    )
]

# 创建ReAct智能体
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.REACT_DOCSTORE,
    verbose=True
)

# 执行任务
result = agent.run("2024年诺贝尔物理学奖得主是谁?他们的主要贡献是什么?")

2024年函数调用对比

原生函数调用(OpenAI风格)
# 现代LLM的原生函数调用
response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "获取苹果股价"}],
    functions=[
        {
            "name": "get_stock_price",
            "description": "获取股票实时价格",
            "parameters": {
                "type": "object",
                "properties": {
                    "symbol": {"type": "string"}
                },
                "required": ["symbol"]
            }
        }
    ],
    function_call="auto"
)

# LLM自动决定调用函数
if response.choices[0].message.get("function_call"):
    function_name = response.choices[0].message["function_call"]["name"]
    arguments = json.loads(response.choices[0].message["function_call"]["arguments"])
    result = execute_function(function_name, arguments)

典型应用场景

  1. 多步骤问答
    • 需要查询多个数据源
    • 综合多方信息得出答案
    • 例:研究报告生成、竞品分析
  2. 任务自动化
    • 文件操作和数据处理
    • API调用链编排
    • 例:数据ETL、报表生成
  3. 交互式调试
    • 代码执行和错误分析
    • 逐步修复和验证
    • 例:自动化测试、bug修复
  4. 决策支持
    • 收集决策所需信息
    • 评估不同选项
    • 例:投资分析、风险评估

性能对比

特性ReAct提示原生函数调用
通用性所有LLM特定模型
性能中等
可解释性优秀良好
实现复杂度较高较低
错误处理灵活规范化
2024采用率30%70%

相关概念

延伸阅读