一、需求背景
在聊天场景中,针对用户的问题我们希望把问题逐一分解,每一步用一个工具得到分步答案,然后根据这个中间答案继续思考,再使用下一个工具得到另一个分步答案,直到最终得到想要的结果。
这个场景非常匹配langchain工具。
在langchain中,我们定义好很多工具,每个工具对解决一类问题。
然后针对用户的输入,langchain会不停的思考,最终得到想要的答案。
二、langchain调用tool集的例子
import os
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain import LLMMathChain
from langchain.llms import AzureOpenAI
os.environ["OPENAI_API_TYPE"] = ""
os.environ["OPENAI_API_VERSION"] = ""
os.environ["OPENAI_API_BASE"] = ""
os.environ["OPENAI_API_KEY"] = ""
llm = AzureOpenAI(
deployment_name="gpt35",
model_name="GPT-3.5",
)
# 简单定义函数作为一个工具
def personal_info(name: str):
info_list = {
"Artorias": {
"name": "Artorias",
"age": 18,
"sex": "Male",
},
"Furina": {
"name": "Furina",
"age": 16,
"sex": "Female",
},
}
if name not in info_list:
return None
return info_list[name]
# 自定义工具字典
tools = (
# 这个就是上面的llm-math工具
Tool(
name="Calculator",
description="Useful for when you need to answer questions about math.",
func=LLMMathChain.from_llm(llm=llm).run,
coroutine=LLMMathChain.from_llm(llm=llm).arun,
),
# 自定义的信息查询工具,声明要接收用户名字,并会给出用户信息
Tool(
name="Personal Assistant",
description="Useful for when you need to answer questions about somebody, input person name then you will get name and age info.",
func=personal_info,
)
)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# 提问,询问Furina用户的年龄的0.43次方
rs = agent.run("What's the person Furina's age raised to the 0.43 power?")
print(rs)
</