系列文章目录
第一部分 langchain入门以及prompt、解析器使用
文章目录
前言
LangChain 的代理(Agents)是一个强大的工具,可以将语言模型与外部工具结合起来,以便在处理复杂任务时提供更丰富的功能。
一、导入需要的库
有些库会更新,如用不了在langchain查找导入就行
# from langchain.agents.agent_toolkits import create_python_agent # 移走了
# from langchain.tools.python.tool import PythonREPLTool # 移走了
# from langchain.python import PythonREPL # 移走了
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools.python.tool import PythonREPLTool
from langchain.agents import load_tools, initialize_agent, AgentType
from langchain_experimental.utilities import PythonREPL
from langchain_wenxin.chat_models import ChatWenxin
二、准备模型
创建LLMChain的大模型,这里我们用的是文心大模型
WENXIN_APP_Key = "xxx"
WENXIN_APP_SECRET = "xxx"
model = ChatWenxin(
temperature=0.9,
model="ernie-bot-turbo",
baidu_api_key = WENXIN_APP_Key,
baidu_secret_key = WENXIN_APP_SECRET,
verbose=True, #
)
三、使用网上的工具
这里使用llm-math和wikipedia维基百科,如果输入的语句没用到这两个工具可以加前缀使用xx工具来使用,或者直接使用大模型来识别。
!pip install -q wikipedia
#加载两个工具
tools = load_tools(['llm-math','wikipedia'],llm=model)agent = initialize_agent(
tools,
model,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
handle_parsing_errors=True, #遇见了错误,传回model进行处理
verbose=True
)
#数学
agent('what is the answer about 30 + 2')
#wikipedia维基百科
question = '能在wikipedia上看看中国的历史有多少年了'
res = agent(question)
四、代理写代码
使用PythonREPLTool可以实现写代码,或者直接使用大模型写。
agent = create_python_agent(
model,
tool=PythonREPLTool(),
verbose=True
)
agent.run('写一个python代码,关于a=3,b=4,c=a+b的')
结果如图所示:
五、自定义写方法
使用@tool可以自定义,这里演示的是求当天日期。
#自定义
from langchain.agents import tool #可以应用任何函数,将其转换成langchain使用的工具
from datetime import date
#代理也能把''信息看懂来识别这个函数干嘛的
@tool
def time(text:str)-> str:
'不用输入数据,返回当天日期'
return str(date.today())
agent = initialize_agent(
tools+[time],
model,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
handle_parsing_errors=True, #遇见了错误,传回model进行处理
verbose=True
)
agent.run('使用time工具,告诉我今天的日期')
结果如图所示:
总结
通过组合多个工具,代理可以处理更复杂的任务。例如,除了搜索工具,还可以定义计算、翻译等工具,代理可以根据查询自动选择和调用这些工具。
LangChain 代理是一个非常灵活和强大的工具,通过定义和组合不同的工具,可以处理多种复杂的任务。代理可以根据用户的输入自动选择和调用适当的工具,从而提供丰富的功能和更好的用户体验。