网站域名需要购买吗,做赚钱的网站有哪些,个人博客网站制作图片,wordpress快速仿站reAct机制详解 reAct是什么reAct的关键要素reAct的思维过程reAct的代码实现查看效果引入依赖#xff0c;定义模型定义相关工具集合工具创建代理启动测试完整代码 思考 reAct是什么
reAct的核心思想是将**推理#xff08;Reasoning#xff09;和行动#xff08;Acting… 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
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(modeldeepseek-chat, openai_api_keyxxx,openai_api_basehttps://api.deepseek.com,max_tokens4096
)定义相关工具
# 定义数字计算工具
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(llmmodel,toolstools,promptprompt
)
# 记录上下文
memory ConversationBufferMemory(memory_keychat_history,return_messagesTrue
)
# 创建一个代理执行器
agent_executor AgentExecutor.from_agent_and_tools(agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue
)启动测试
# 测试场景
agent_executor.invoke({input: 羊村旁边的地方是什么它的面积加上它的面积是多少}) 完整代码
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(modeldeepseek-chat, openai_api_keyxxx,openai_api_basehttps://api.deepseek.com,max_tokens4096
)# 定义数字计算工具
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(llmmodel,toolstools,promptprompt
)
# 记录上下文
memory ConversationBufferMemory(memory_keychat_history,return_messagesTrue
)
# 创建一个代理执行器
agent_executor AgentExecutor.from_agent_and_tools(agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue
)# 测试场景
agent_executor.invoke({input: 羊村旁边的地方是什么它的面积加上它的面积是多少})思考
reAct是AI agent很重要的一个概念它赋予了agent能够逐步推理和执行任务的能力。通过将复杂的任务分解为一系列简单的步骤并通过使用工具去解决问题让agent能够更高效地解决问题最终让agent像人一样能够处理复杂问题。