三、扩展机器人的能力边界
--楼兰AI大模型的强大能力来源于他学过的知识,但是,模型学习到的知识是有限的,如何扩展模型的能力边界呢?Tools工具机制就是一个解决这个问题的重要机制。工具机制就是让AI大模型去调用外部的API接口,去获取外部的数据,然后让AI大模型去使用这些数据,从而扩展模型的能力边界。
Tools工具机制是现在几乎所有大模型都支持的一种机制,也是基于大模型构建本地应用的关键。
- 理解Tools工具机制
- 定制本地Tool工具
- 深入理解@tool注解
- 构建Agent执行工具
1、理解Tools工具机制
先从一个小问题入手。机器人能不能知道今天是几月几号呢?
from config.load_key import load_key
from langchain_openai import ChatOpenAI
# 构建阿里云百炼大模型客户端
llm = ChatOpenAI(
model="qwen-plus",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
openai_api_key=load_key("BAILIAN_API_KEY"),
)
llm.invoke("今天是几月几号?").content
很明显,大模型是无法获取实时的时间的,因为没有哪个现成的资料能够实时告诉大模型当前的日期。即便有时候能给出一个答案,大概率也是一个不靠谱的答案。
理解“今天”对于大模型是一个比较困难的事情,但是,对于我们人类来说却是很容易理解的问题。那么,有没有办法给大模型加一点“佐料”,让大模型能够找找外援,获取今天的日期呢?有。这个方法就是Tools工具机制。
Tool工具机制是现在几乎所有主流大模型都支持的一种机制,也是基于大模型构建本地应用的关键。具体可以参见LangChain官方文档。
2、定制本地Tool工具
Tool工具机制的思想比较简单,他允许用户以API接口的形式给大模型提供额外的帮助。当本地应用跟大模型聊天时,除了告诉大模型问题,同时也告诉他,本地应用能够提供哪些工具(比如查询今天的日期)。这样大模型会对问题进行综合判断,当单行觉得需要使用某些工具帮助解决问题时,就会向本地应用返回一个需要调用工具的请求。然后本地应用就可以执行工具,并将工具的执行结果返回给大模型。大模型再结合工具的执行结果,给出一个完整的答案。这样就可以让AI大模型强大的知识推理能力和本地应用的私有业务能力形成良好的互动。
我们先来看看如何使用Tool工具机制,帮助大模型解决获取今天日期的问题:
import datetime
from langchain.tools import tool
# 定义工具 注意要添加注释
@tool
def get_current_date():
"""获取今天日期"""
return datetime.datetime.today().strftime("%Y-%m-%d")
# 大模型绑定工具
llm_with_tools = llm.bind_tools([get_current_date])
# 工具容器
all_tools = {
"get_current_date": get_current_date}
# 把所有消息存到一起
query = "今天是几月几号"
messages = [query]
# 询问大模型。大模型会判断需要调用工具,并返回一个工具调用请求
ai_msg = llm_with_tools.invoke(messages)
print(ai_msg)
messages.append(ai_msg)
# 打印需要调用的工具
print