Langgraph实战-Agent-ReAct(Reason+Act)概述

Langgraph实战-Agent-ReAct(Reason+Act)概述

概述

ReAct 架构将推理与动作相结合,使Agent能够通过生成想法并基于这些想法执行动作。这种决策透明度使Agent能够更负责地执行任务,因为它会记录每一步的推理过程。

这种架构最适合Agent需要评估多个选项并选择最佳操作的任务。例如,它可以用于客户服务应用程序,Agent必须评估客户查询并决定如何响应。

ReAct Agent代表了AI系统推理(reasoning)与行动(acting)整合的突破,旨在基于动态输入和外部数据实时做出决策并采取行动。该架构由普林斯顿大学和谷歌研究院的姚顺宇等人(2023)在 ReAct 论文中提出。ReAct 框架以交错的方式将语言推理和特定任务的操作结合在一起,从而实现推理轨迹和操作之间的协同作用。这带来了更强大的任务解决能力,尤其是在动态或知识密集型任务中。

历史上,AI系统要么专注于推理(例如,思维链或 CoT 提示),要么专注于执行动作(例如,强化学习)。这些方法虽然单独使用时有效,但在需要reasoning和acting结合的任务中却常常失效。例如,纯粹基于推理的模型常常会产生幻觉,而基于动作的模型则缺乏情境和规划能力。ReAct 通过在推理(思维)和动作(执行任务并收集额外信息)之间建立反馈回路来解决这些缺陷。这种架构已被证明在 ALFWorld 等交互式环境和 HotPotQA 等知识密集型任务中有效。

ReAct 的关键概念

  • 推理和行动协同: Agent通过可用数据或选项进行推理,然后根据该推理选择行动。
  • 透明的决策: Agent记录其想法和行动,提供决策如何做出的清晰记录。
  • 迭代过程:推理和行动周期可以重复,如果初始行动没有产生预期的结果,则允许 Agent改进其方法。
实施步骤
  1. 定义环境和 Agent目标:首先,描述Agent运行的环境。定义 Agent需要实现的目标。
  2. 列出可用操作:列举 Agent可以执行的所有操作。这些操作可能包括查询数据库、调用 API 或响应用户查询。
  3. 记录观察结果:记录所采取的行动和由此产生的观察结果(例如,行动成功还是失败?有哪些新数据可用?)。
  4. 生成推理:基于观察结果,促使 Agent对下一步行动产生想法或推理。此过程持续进行,直至目标达成。
  5. 执行动作:一旦 Agent完成推理过程,它就会选择一个动作并执行它。

LangGraph中的ReAct Agent

LangGraph以高度灵活的方式实现了ReAct架构,允许用户创建能够进行推理、工具调用和决策的动态Agent LangGraph ReAct Agent采用模块化结构,其中大型语言模型 (LLM) 逐步推理,并动态决定是否调用工具、检索数据或终止流程。

LangGraph 中 ReAct的关键组件
  1. 推理:Agent根据输入产生想法并决定潜在的行动。
  2. 工具调用:基于推理,Agent决定调用特定工具,例如 API 或知识库,并将工具输出集成回到推理循环中。
  3. 观察:工具的输出被传回推理阶段,使Agent能够完善其思维并采取进一步的行动或最终确定其反应。
  4. 记忆:Agent可以在多次交互中保留数据,从而允许它根据之前的步骤做出明智的决策。
构建 ReAct Agent的最佳实践
  1. 结构化的思考和行动的循环:确保Agent的推理步骤与行动步骤分离。这样可以清楚地识别Agent的思维方式和正在采取的行动。
  2. 有效的工具集成:ReAct Agent应该能够访问丰富的工具集,以便在需要时获取外部数据。在 LangGraph 中,工具集范围从简单的 Python 函数到复杂的 API。
  3. 记忆的使用:对于较长的对话或任务,保持记忆至关重要,这能让 Agent“记住”过去的步骤和交互。LangGraph 提供了用于短期和长期记忆的记忆模块。
  4. 迭代思维-行动(Thought-Action)循环:设计您的 ReAct Agent根据需要多次循环推理和行动,让它们在每次循环中完善对任务的理解。
  5. 错误处理和反馈:实施反馈机制,使Agent可以识别错误并从错误中恢复,或者如果不确定下一步,则要求澄清。

ReAct Agent的例子

计算加法和乘法
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent# 1. 通过 ChatOpenAI 初始化一个 LLM 模型
local_llm = "Qwen/Qwen2.5-7B-Instruct"
# 使用硅基流动提供的模型服务s
base_url = "https://api.siliconflow.cn/v1"
llm = ChatOpenAI(model=local_llm, base_url=base_url, api_key="sk-xxx")# 2. 定义工具
def add(a: int, b: int) -> int:"""Add two numbers together."""return a + b
def multiply(a: int, b: int) -> int:"""Multiply two numbers together."""return a * btools = [add, multiply]# 3.创建ReAct agent
graph = create_react_agent(model=llm, tools=tools)# 4. 用户输入
# inputs = {"messages": [("user", "Add 3 and 4. Multiply the result by 2.")]}
inputs = {"messages": [("user", "(3+4*2)*2=?")]}# 5. 运行ReAct agent
messages = graph.invoke(inputs)for message in messages["messages"]:print(message.content)
输出结果
PS D:\my_dev\do_langx> & C:/Users/issuser/.conda/envs/ailab/python.exe d:/my_dev/do_langx/react_agent_1.py
(3+4*2)*2=?
To solve the expression \((3 + 4 \times 2) \times 2\), we need to follow the order of operations (PEMDAS/BODMAS):1. First, perform the multiplication inside the parentheses: \(4 \times 2 = 8\).
2. Then, add this result to 3: \(3 + 8 = 11\).
3. Finally, multiply the result by 2: \(11 \times 2\).Let's perform the final multiplication using the `multiply` function.22
The result of the expression \((3 + 4 \times 2) \times 2\) is \(22\).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记(七十九)STOMP: Stochastic Trajectory Optimization for Motion Planning

STOMP: Stochastic Trajectory Optimization for Motion Planning 文章概括摘要一、引言二、相关工作三、STOMP 算法A. 探索B. 轨迹更新 四、机械臂的运动规划A. 设置B. 代价函数1)障碍物代价:2)约束代价:3)扭矩代价&a…

MCU开发学习记录9 - 通用定时器学习与实践(HAL库) -RGBLED控制、定时器输入捕获、主从定时器移相控制-STM32CubeMX

本文将介绍通用定时器的概念、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析(包括结构体配置、相关寄存器配置)。 本文以TIM2/TIM5、TIM3/TIM4为基础介绍通用定时器(包含通用定时器全部功能&#…

Java学习手册:TCP 协议基础

一、TCP 协议概述 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它在 IP 协议的基础上提供了可靠的 数据传输服务。TCP 通过三次握手建立连接,通过四次挥手…

删除排序数组中的重复项--LeetCode

题目 给你一个非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c…

【Elasticsearch】入门篇

Elasticsearch 入门 前言 官方地址:Elastic — 搜索 AI 公司 | Elastic ES 下载地址:Past Releases of Elastic Stack Software | Elastic 文档:什么是 Elasticsearch?|Elasticsearch 指南 简介 Elasticsearch 是一个分布式、…

2024新版仿蓝奏云网盘源码,已修复已知BUG,样式风格美化,可正常运营生产

说起网盘源码,网络上出现的也很多,不过可真正正能够用于运营的少之又少。今天将的蓝奏云网盘源码,其实网络上也有,不过是残缺版,bug很多。我今天分享的仿蓝奏云模板是经过长时间测试修复后的源码,源码实测可…

机器人结构认知与安装

机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件: OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座:包含控制主板、安全接口板、监测保护电路单元,支持外接急停开关,采用光耦…

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 ,这意味着该变量如果已经赋值,那么它不会被重新赋值,但是,如果它尚未赋值,那么它会被赋予新的给定值。 如果在此之前变量已经赋值,那就不使用默认值…

python自动化测试1——鼠标移动偏移与移动偏移时间

python对自动化测试运维提供了一个简易的库—pyautogui,我们可以借助这个库进行开发。 import pyautogui as pp.moveTo(100,100,3) 这里将鼠标光标移动到100,100处,并且用时3秒移动 鼠标移动是以固定坐标为单位,鼠标偏移则是在…

LX4-数据手册相关

数据手册相关 一 如何获取数据手册 ST官网:www.st.com 中文社区网: https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘宝的商品详情页 二 如何阅读数据手册 芯片手册 定义:由芯片制造商提供,详细…

如何使用 uv 构建 Python 包并本地安装

本文将逐步指导你创建一个简单的 Python 包,并将其本地安装到机器或云环境中。完成本教程后,你将拥有一个可复用的 Python 库,可直接通过 pip 安装或在项目中导入使用。 步骤详解 Step 0: 选择构建工具 - 使用 uv 推荐理由:uv 是…

Linux之安装配置Nginx

Linux系统下安装配置Nginx的详细步骤如下: 一、准备工作 系统环境:确保Linux系统已安装,并且具有网络连接(以便在线安装依赖或下载Nginx)。 安装依赖:Nginx依赖于一些开发库和工具,如gcc、pcr…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

语音合成之一TTS技术发展史综述

TTS技术发展史综述 引言TTS技术的起源与早期探索基于规则的TTS系统:原理与发展共振峰合成技术:作用与影响拼接合成技术:发展与应用统计参数语音合成:以隐马尔可夫模型(HMM)为例深度学习驱动的TTS&#xff1…

目标检测中的损失函数(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

🚀该系列将会持续整理和更新BBR相关的问题,如有错误和不足恳请大家指正,欢迎讨论!!! 📦目标检测的损失函数一般包含三个部分,分别是边界框损失也可称为定位损失、置信度损失和分类损…

结构型模式:适配器模式

什么是适配器模式? 适配器模式(Adapter Pattern)是一种常用的结构型设计模式,它的主要作用是将一个类的接口转换成客户端期望的另一个接口。就像现实生活中的各种转接头一样,适配器模式使得原本因接口不兼容而无法一起…

AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结

以下是主流AI Agent认知框架的详细说明、对比及表格总结: 1. 各认知框架详解 (1) ReAct (Reasoning Action) 定义:结合推理(Reasoning)和行动(Action)的循环过程。核心机制: 模型先推理&…

特征存储的好处:特征存储在机器学习开发中的优势

随着企业寻求提升机器学习生产力和运营能力 (MLOps),特征存储 (Feature Store) 的普及度正在迅速提升。随着 MLOps 技术的进步,特征存储正成为机器学习基础设施的重要组成部分,帮助企业提升模型的性能和解释能力,并加速新模型与生产环境的集成。这些存储充当集中式存储库,…

SPRING-AI 官方事例

springAI 关于最近看了很多SpringAi,阅读很多代码都感觉特别陌生 SpringAI依赖的springBoot版本都是3.3以上, 以及很多SpringAi都是依赖JDK版本最低17, 并且出现了很多新关键字例如 var,record 等写法, 烟花缭乱得lambda 表达式, 到处都是使用build 构…

Visual Studio Code 使用tab键往左和往右缩进内容

使用VSCode写东西,经常遇到多行内容同时缩进的情况,今天写文档的时候就碰到,记录下来: 往右缩进 选中多行内容,点tab键,会整体往右缩进: 往左缩进 选中多行内容,按shifttab&am…