【AIGC】让AI像人一样思考和使用工具,reAct机制详解

server/2024/10/19 9:35:49/


reAct机制详解

  • reAct是什么
  • reAct的关键要素
  • reAct的思维过程
  • reAct的代码实现
    • 查看效果
    • 引入依赖,定义模型
    • 定义相关工具
    • 集合工具创建代理
    • 启动测试
    • 完整代码
  • 思考

reAct是什么

reAct的核心思想是将**推理(Reasoning)和行动(Acting)**结合起来。具体来说,reAct 赋予了 AI agent 思维链Cot的思考能力和使用工具Action的能力。对于一个复杂问题agent首先利用其强大的推理能力对环境进行分析和理解,识别出需要解决的问题和可用的资源。然后,它根据推理结果制定行动计划,并选择合适的工具或方法来执行计划。最后达到像人一样分析和使用工具最后解决问题的效果。

reAct的关键要素

  • 强大的推理能力
  • 丰富的工具库
  • 灵活的行动策略
  • 持续的反馈机制

reAct的思维过程

举个例子比如问模型一个问题羊村旁边的地方是什么?它的面积加上它的面积是多少?,正常模型肯定回答不了,可是添加上reAct他就被赋予了思考和使用工具获取信息的能力,分析过程大概如下:

分析1:我需要先搜索羊村旁边的地方,然后获取该地方的面积,最后计算面积的总和,首先我得先知道羊村旁边是什么地方行动1:调用地点搜索工具分析2:获取到的地点是狼堡,我需要搜索狼堡的面积,然后计算面积的总和行动2:调用地点面积搜索工具分析3:获取到面积是500,我已经获取了狼堡的面积,现在需要计算面积的总和。行动3:调用数字相加计算工具(如果数字比较复杂可能需要专业的数学工具计算)分析4:计算出结果是1000行动4:进行最终答复:羊村旁边的地方是狼堡,狼堡的面积是500,加上它的面积是1000。

就这样模型通过reAct完成了一整个复杂问题的拆解和逐步解决。我们可以通过代码来实现并查看一整个过程

reAct的代码实现

我们用langChain搭配deepseek模型去实现reAct的一整个过程,我们先来看看最终结果。

查看效果

在这里插入图片描述

可以看到利用reAct机制LLM确实跟我们预想的一样完成了推理和使用工具。下面我们来看实现.

引入依赖,定义模型

注意key换成deepseek的key

python">from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAImodel = ChatOpenAI(model='deepseek-chat', openai_api_key='xxx',openai_api_base='https://api.deepseek.com',max_tokens=4096
)

定义相关工具

python"># 定义数字计算工具
class SumNumber_tool(BaseTool):name = "数字相加计算工具"description = "当你被要求计算数字相加时,使用此工具"def _run(self, a, b):return a + b  # 直接返回两个数的和# 模拟地点搜索工具(实际使用可以调用内置的google-serper)
class PlaceSearch_tool(BaseTool):name= "地点搜索工具"description = "当你需要搜索地点时,使用这个工具"def _run(self, query):return "狼堡"# 创建地点面积搜索工具
class AreaSearch_tool(BaseTool):name= "地点面积搜索工具"description = "当你需要搜索地点面积时,使用这个工具"def _run(self, query):return 500

集合工具创建代理

python"># 工具集合
tools = [SumNumber_tool(), PlaceSearch_tool(), AreaSearch_tool()]
# 提示词,langchain hub内置提示词,之后文章会再做详细分析
prompt = hub.pull("hwchase17/structured-chat-agent")
# 定义AI Agent
agent = create_structured_chat_agent(llm=model,tools=tools,prompt=prompt
)
# 记录上下文
memory = ConversationBufferMemory(memory_key='chat_history',return_messages=True
)
# 创建一个代理执行器
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)

启动测试

python"># 测试场景
agent_executor.invoke({"input": "羊村旁边的地方是什么?它的面积加上它的面积是多少?"}) 

完整代码

python">from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI# 模型
model = ChatOpenAI(model='deepseek-chat', openai_api_key='xxx',openai_api_base='https://api.deepseek.com',max_tokens=4096
)# 定义数字计算工具
class SumNumber_tool(BaseTool):name = "数字相加计算工具"description = "当你被要求计算数字相加时,使用此工具"def _run(self, a, b):return a + b  # 直接返回两个数的和# 模拟地点搜索工具(实际使用可以调用内置的google-serper)
class PlaceSearch_tool(BaseTool):name= "地点搜索工具"description = "当你需要搜索地点时,使用这个工具"def _run(self, query):return "狼堡"# 创建地点面积搜索工具
class AreaSearch_tool(BaseTool):name= "地点面积搜索工具"description = "当你需要搜索地点面积时,使用这个工具"def _run(self, query):return 500# 工具集合
tools = [SumNumber_tool(), PlaceSearch_tool(), AreaSearch_tool()]
# 提示词,langchain hub内置提示词,之后文章会再做详细分析
prompt = hub.pull("hwchase17/structured-chat-agent")
# 定义AI Agent
agent = create_structured_chat_agent(llm=model,tools=tools,prompt=prompt
)
# 记录上下文
memory = ConversationBufferMemory(memory_key='chat_history',return_messages=True
)
# 创建一个代理执行器
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)# 测试场景
agent_executor.invoke({"input": "羊村旁边的地方是什么?它的面积加上它的面积是多少?"})

思考

reAct是AI agent很重要的一个概念,它赋予了agent能够逐步推理和执行任务的能力。通过将复杂的任务分解为一系列简单的步骤,并通过使用工具去解决问题,让agent能够更高效地解决问题,最终让agent像人一样能够处理复杂问题。


http://www.ppmy.cn/server/133009.html

相关文章

研报复现连载

东北证券-量化择时系列之一 【研报】精选32个技术指标在指数上的择时能力分析【研报】精选32个技术指标在指数上的择时能力分析-趋势类指标【研报】精选32个技术指标在指数上的择时能力分析-波动类指标【研报】精选32个技术指标在指数上的择时能力分析-动量类指标 【研报】精选…

【LLM】一文详解MHA、GQA、MQA原理

前言 本文回顾一下MHA、GQA、MQA,详细解读下MHA、GQA、MQA这三种常见注意力机制的原理。 self-attention A t t e n t i o n ( Q , K , V ) s o f t m a x ( Q K T d k ) V Attention(Q,K,V)softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)softmax(dk​ ​QK…

S7-1500 通过PN/PN Coupler 通信

概述 PN/PN耦合器,订货号:6ES7158-3AD10-0XA0,能够实现两个不同以太网子网进行数据交换。 图01.已安装电缆夹的PN/PN Coupler视图 主要属性: 1440 字节的输入数据和 1440 字节的输出数据。多达 16 个输入区域/输出区域可用于与…

Python知识梳理总结思维导图

Python 语法简洁且富有表现力。它采用简洁的缩进方式来划分代码块,增强了代码的可读性。变量无需事先声明类型,可随时赋值并根据值自动确定类型。Python 支持多种数据类型,包括整数、浮点数、字符串、列表、元组、集合和字典等。函数定义使用…

软考(网工)——网络操作系统与应用服务器

文章目录 网络操作系统与应用服务器🕐本地用户与组1️⃣Windows server 2008R2 本地用户与组2️⃣常见用户组与权限 🕑活动目录1️⃣活动目录2️⃣活动目录(Active Directory,AD)3️⃣活动目录工作组分类 🕒远程桌面与…

使用ETL进行数据接入的方式

数据接入 数据接入,作为现代信息技术架构中的一个关键环节,指的是将来自不同源头的数据整合到统一的数据平台或系统中。这一过程不仅是技术上的挑战,也涉及到组织结构、业务流程等多个层面的协调与优化。通过有效的数据接入,企业…

HDLBits中文版,标准参考答案 | 6 CS450

关注👆 望森FPGA 👆 查看更多FPGA资讯 这是望森的第 25 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 Cs450/timer 2 Cs450/counter 2bc 3 Cs450/history shift 4 Cs450/gshare 本文中的代码都能够正常运行,请放心食用😋~ 练…

理解分布式框架下的数据交互

什么是分布式框架? 分布式框架是指通过多个计算节点协同工作来完成计算任务的系统。它们能够提高系统的扩展性和可靠性。大名鼎鼎的 Hadoop、Spark 都是这样的例子。 分布式框架下的数据交互 在分布式系统中,数据交互主要通过以下几种方式进行&#x…