当前位置: 首页 > news >正文

【llm_inference】react框架(最小code实现)

ReAct:结合推理和行动的大语言模型推理架构

GitHub Code: 人人都能看懂的最小实现

引言

在人工智能领域,大语言模型(LLM)的应用日益广泛,但如何让模型能够像人类一样,在思考的基础上采取行动,并根据行动结果继续推理,这是一个重要的研究方向。ReAct(Reasoning + Acting)推理架构就是为解决这一问题而生的。本文将深入剖析 ReAct 推理架构的实现原理和具体应用。

ReAct 架构概述

ReAct 是一种结合了推理(Reasoning)和行动(Acting)的语言模型推理架构。它允许模型在回答问题时,通过不断的思考、采取行动、观察结果,最终得出答案。这种方式模拟了人类解决问题的过程,使得模型的推理过程更加透明和可控。

核心组件

  1. 思考(Thought):模型对当前情况进行分析和推理
  2. 行动(Action):根据推理结果选择并执行特定工具
  3. 观察(Observation):获取行动的结果
  4. 最终答案(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:# 构建提示模板# 循环执行推理过程# 解析响应并执行工具# 返回最终答案
关键步骤解析:
  1. 提示词构建

    • 将可用工具信息注入到提示模板中
    • 设定标准化的输出格式
    • 引导模型按照 Thought-Action-Observation 循环进行推理
  2. 循环推理过程

    • 获取模型响应
    • 解析响应中的行动指令
    • 执行相应工具
    • 将观察结果反馈给模型
  3. 结果处理

    • 使用正则表达式提取最终答案
    • 格式化输出结果

实现细节深度解析

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 架构来回答一个需要实时信息的问题。系统会:

  1. 初始化搜索工具
  2. 提交查询
  3. 通过反复推理和搜索
  4. 最终得出答案

总结

ReAct 推理架构为大语言模型提供了一个强大的推理框架,使其能够像人类一样思考和行动。通过将推理过程分解为思考、行动和观察三个步骤,不仅提高了模型的推理能力,还增强了推理过程的可解释性。

这种架构特别适合需要多步推理和外部工具调用的复杂任务,例如信息搜索、数据分析等。通过合理的工具设计和灵活的扩展机制,ReAct 架构可以适应各种不同的应用场景。

http://www.lryc.cn/news/498590.html

相关文章:

  • PT8M2103 触控 I/O 型 8-Bit MCU
  • 英语时态学习+名词副词形容词变形方式
  • 浏览器解析页面流程
  • 图的遍历之DFS邻接矩阵法
  • Java --- JVM编译运行过程
  • HTML5 拖拽 API 深度解析
  • GO--基于令牌桶和漏桶的限流策略
  • MongoDB性能监控工具
  • Axure设计之模拟地图人员移动轨迹
  • Android环境搭建
  • 前端工程化面试题(一)
  • 模型案例:| 手机识别模型!
  • 期权懂|个股期权交割操作流程是什么样的?
  • 【openGauss】openGauss execute执行update语句,获取更新的行数
  • P8780 [蓝桥杯 2022 省 B] 刷题统计
  • 切比雪夫不等式:方差约束下的概率估计
  • 使用CancellationTokenSource来控制长时间sql查询中断
  • 小红薯最新x-s 算法补环境教程12-06更新(下)
  • wazuh-modules-sca
  • Uniapp的App环境下使用Map获取缩放比例
  • 微信小程序配置less并使用
  • “全面支持公路数字化转型升级四大任务”视频孪生解决方案
  • 顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍
  • P3379 【模板】最近公共祖先(LCA)
  • 2030. gitLab A仓同步到B仓
  • 网易博客旧文-----如何在WINDOWS下载安卓(android)源代码并和eclipse做关联
  • MATLAB中axes函数用法
  • 构建 Java Web 应用程序:实现简单的增删查改(Mysql)
  • 3d行政区划-中国地图
  • 适合存储时序数据的数据库和存储系统