通过注册自定义工具函数并集成到深度学习模型中,可以实现模型功能的扩展,以适配更多场景或需求。
下面我们来尝试基于ChatGLM的工具调用:
import tool_register
from typing import get_origin,Annotated
@tool_register.register_tool
def get_customer_weather(location:Annotated[str,"天气查询",True]=""):
if location == "Beijing":
return 15
elif location == "Guangzhou":
return 23
else:
return "无查询结果"
from modelscope import AutoTokenizer,AutoModel,snapshot_download
model_dir="../chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_dir,trust_remote_code=Ture)
model = AutoModel.from_pretrained(model_dir,trust_remoter_code=True).quantized(4).cuda()
model=model.eval()
tools = tool_register.get_tools()
system_info={"role":"system","content":"在解决问题的过程中,你可以按需求使用下面工具箱中的工具:","tools":tools}
query = "请查询Beijing的天气,使用自定义天气函数"
response,history=model.chat(tokenizer,query,history=[system_info])
ret=tool_register.dispatch_tool(response["name"],response["parameters"])
response,history=model.chat(tokenizer,str(ret),history=history)
print(response)
步骤解析:
(1)导入tool_register模块,用于工具注册和管理。
(2)通过装饰器,将get_customer_weather注册为可用工具。
(3)指定模型所在目录,加载预训练模型和分词器,调用quantize(4)完成量化以降低内存占用和推理时间,使用GPU计算。使用eval将模型设置为评估模式。
(4)获取注册后的全部工具,以json形式返回为tools。构建system_info,记录角色、内容、工具。
(5)定义查询命令并使用自定义查询函数。
(6)调用模型的chat进行交互,传入查询、system_info作为历史信息。
(7)根据返回的响应中的工具名和参数,调用dispatch_tool,找到对应的工具函数,执行结果再次传递给chat,与模型进一步交互。
(8)打印输出回复。