松江品划网站建设开发电商网站开发的现状
ReAct:结合推理和行动的大语言模型推理架构
GitHub Code: 人人都能看懂的最小实现
引言
在人工智能领域,大语言模型(LLM)的应用日益广泛,但如何让模型能够像人类一样,在思考的基础上采取行动,并根据行动结果继续推理,这是一个重要的研究方向。ReAct(Reasoning + Acting)推理架构就是为解决这一问题而生的。本文将深入剖析 ReAct 推理架构的实现原理和具体应用。
ReAct 架构概述
ReAct 是一种结合了推理(Reasoning)和行动(Acting)的语言模型推理架构。它允许模型在回答问题时,通过不断的思考、采取行动、观察结果,最终得出答案。这种方式模拟了人类解决问题的过程,使得模型的推理过程更加透明和可控。
核心组件
- 思考(Thought):模型对当前情况进行分析和推理
 - 行动(Action):根据推理结果选择并执行特定工具
 - 观察(Observation):获取行动的结果
 - 最终答案(Final Answer):综合所有信息得出的结论
 
技术实现解析
1. 工具定义
class WebSearch:def __init__(self, name:str='web_search', threshold:int=8000):self.system_prompt = """
你是一位洞察研究员。
1. 为用户查询寻找详细信息,并尽可能简单地将内容总结为一句话
2. 如果用户的问题是关于具体数值的,只返回数值结果,不需要任何额外解释。
"""self.name = nameself.description = "用于网络搜索的工具"
 
这个实现展示了如何定义一个工具类,每个工具都包含:
- 名称(name)
 - 描述(description)
 - 系统提示(system_prompt)
 - 执行逻辑(__call__方法)
 
2. 推理流程实现
ReAct 的核心推理流程通过 react 函数实现:
def react(question: str, tools: List[Callable]) -> str:# 构建提示模板# 循环执行推理过程# 解析响应并执行工具# 返回最终答案
 
关键步骤解析:
-  
提示词构建
- 将可用工具信息注入到提示模板中
 - 设定标准化的输出格式
 - 引导模型按照 Thought-Action-Observation 循环进行推理
 
 -  
循环推理过程
- 获取模型响应
 - 解析响应中的行动指令
 - 执行相应工具
 - 将观察结果反馈给模型
 
 -  
结果处理
- 使用正则表达式提取最终答案
 - 格式化输出结果
 
 
实现细节深度解析
1. 消息格式化
def format_message(messages: List[Dict], last_content_length: int = 0) -> int:"""格式化打印新增的消息内容"""
 
这个函数巧妙地实现了增量式的消息打印,通过记录上次打印的内容长度,只打印新增的内容,提高了交互体验。
2. 工具执行机制
工具执行采用了装饰器模式,通过 __call__ 方法实现了统一的调用接口:
def __call__(self, query:str):results = serpapi_search(query)msg = [{"role":"system","content":self.system_prompt},{"role":"user", "content": f"查询内容是:{query},搜索结果是:{results}"}]answer = get_model_response_sync(model_name="deepseek-chat", messages=msg)return answer
 
3. 正则表达式解析
使用正则表达式精确提取模型响应中的关键信息:
regex = r"Action: \[(.*?)\][\s]*Action Input: (.*?)(?:\n|$)"
action_match = re.search(regex, response, re.DOTALL)
 
应用示例
以下是一个实际的应用示例:
def main():query = "2024年欧洲杯和2024年美洲杯冠军"print("\n🚀 Starting new query:", query)search_tool = WebSearch()tools = [search_tool]result = react(query, tools)print("最终答案:")print(result)
 
这个例子展示了如何使用 ReAct 架构来回答一个需要实时信息的问题。系统会:
- 初始化搜索工具
 - 提交查询
 - 通过反复推理和搜索
 - 最终得出答案
 
总结
ReAct 推理架构为大语言模型提供了一个强大的推理框架,使其能够像人类一样思考和行动。通过将推理过程分解为思考、行动和观察三个步骤,不仅提高了模型的推理能力,还增强了推理过程的可解释性。
这种架构特别适合需要多步推理和外部工具调用的复杂任务,例如信息搜索、数据分析等。通过合理的工具设计和灵活的扩展机制,ReAct 架构可以适应各种不同的应用场景。
