ReAct
大名鼎鼎的AutoGPT项目就是基于ReAct模式实现,就是推理+行动模型,LLM大模型负责推理,控制行动达成目标,对于开发来说行动其实就是开发好的工具或者API,本章介绍LangChain如何实现ReAct模式。
加载基础包
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain_openai import OpenAI
这里使用openai模型
llm = OpenAI(temperature=0)
这里加载两个langchain内置的工具, serpapi一个google搜索工具,llm-math是一个数学计算器,使用llm实现,所以这里加载工具的时候要传入使用的llm模型
tools = load_tools(["serpapi", "llm-math"], llm=llm)
最后,初始化agent,agent类型选择AgentType.ZERO_SHOT_REACT_DESCRIPTION,代表ReAct模式。
# verbose参数指定打印运行日志
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
现在让我们来测试一下!
agent.run("Leonardo DiCaprio的女朋友是谁?她现在的年龄提高到0.43次方是多少?")
# 大家可以观察运行日志,agent通过推理 + 行动(调用工具)一步步的完成问题。
> 进入新的AgentExecutor链...
我需要找出谁是Leonardo DiCaprio的女友,然后计算她的年龄的0.43次幂。
行动: 搜索
行动输入: "Leonardo DiCaprio 女友"
观察: Camila Morrone
思考: 我需要找出Camila Morrone的年龄
行动: 搜索
行动输入: "Camila Morrone 年龄"
观察: 25岁
思考: 我需要计算25的0.43次幂
行动: 计算器
行动输入: 25^0.43
观察: 答案: 3.991298452658078
思考: 我现在知道最终答案了
最终答案: Camila Morrone是Leonardo DiCaprio的女友,她的年龄的0.43次幂是3.991298452658078。
> 链完成。
"Camila Morrone是Leonardo DiCaprio的女友,她的年龄的0.43次幂是3.991298452658078。"
使用聊天模型
通过前面的例子知道agent需要选择一个大模型作为推理引擎,这里我们改成使用openai的聊天模型。
from langchain_openai import ChatOpenAI
# 定义使用openai的chat模型
chat_model = ChatOpenAI(temperature=0)
# 定义agent
agent = initialize_agent(tools, chat_model, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# 执行任务
agent.run("Leonardo DiCaprio的女朋友是谁?她现在的年龄提高到0.43次方是多少?")