简介
ReAct对话模型是LangChain框架中的一种重要模型,它可以用于构建智能对话系统。ReAct对话模型的核心思想是使用反应堆(Reactor)来处理对话中的各种情况,从而实现了对复杂对话场景的解构。
在ReAct对话模型中,反应堆是一个可配置的组件,它可以对输入的文本进行自定义处理。通过在不同的反应堆之间传递输入文本,我们可以实现不同任务的解构和组合。
而将 ReAct 框架和思维链(CoT)结合使用,则能够让大模型在推理过程同时使用内部知识和获取到的外部信息,从而给出更可靠和实际的回应,也提高了 LLMs 的可解释性和可信度。LangChain 正是通过 Agent 类,将 ReAct 框架进行了完美封装和实现,这一下子就赋予了大模型极大的自主性(Autonomy),你的大模型现在从一个仅仅可以通过自己内部知识进行对话聊天的 Bot,飞升为了一个有手有脚能使用工具的智能代理。ReAct 框架会提示 LLMs 为任务生成推理轨迹和操作,这使得代理能系统地执行动态推理来创建、维护和调整操作计划,同时还支持与外部环境(例如 Google 搜索、Wikipedia)的交互,以将额外信息合并到推理中。
通过代理实现 ReAct 框架
下面,就让我们用 LangChain 中最为常用的 ZERO_SHOT_REACT_DESCRIPTION ——这种常用代理类型,来剖析一下 LLM 是如何在 ReAct 框架的指导之下进行推理的。
此处,我们要给代理一个任务,这个任务是找到玫瑰的当前市场价格,然后计算出加价 15% 后的新价格。
在开始之前,有一个准备工作,就是你需要在 serpapi.com 注册一个账号,并且拿到你的 SERPAPI_API_KEY,这个就是我们要为大模型提供的 Google 搜索工具。
需要安装的依赖包
pip install google-search-results
pip install numexpr
具体实现
#设置OpenAI和SERPAPI的API密钥
import os
os.environ["OPENAI_API_KEY"] = ""
os.environ["SERPAPI_API_KEY"] = ""
#导入所需的库
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain_openai import ChatOpenAI
llm=ChatOpenAI(
openai_api_key='sk-ldPMZbfwlt9ApIJBiBcQpFstEoFPjqwkjM9N0R1jjFyLzhaS', # 替换为你的API密钥
base_url='https://api.chatanywhere.tech/v1',
model='gpt-3.5-turbo',
temperature=0.7,
)
#加载一些要使用的工具,包括 serpapi(这是调用 Google 搜索引擎的工具)
#以及 llm-math(这是通过 LLM 进行数学计算的工具)。
tools = load_tools(["serpapi", "llm-math"], llm=llm)
#初始化代理
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
#运行代理
agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?")
执行结果
总结
可以看到,ZERO_SHOT_REACT_DESCRIPTION 类型的智能代理在 LangChain 中,自动形成了一个完善的思考与行动链条,而且给出了正确的答案。
这个思维链条中,智能代理有思考、有观察、有行动,成功通过搜索和计算两个操作,完成了任务。