
大模型应用开发在不使用任何框架和SDK的情况下——基于原生Restful API实现流式传输与工具调用 原创
“ 大模型原生API开发,所有东西都需要自己手动处理,很麻烦;但能够帮助我们理解大模型开发的运行过程。”
在之前的文章中有说过,openai SDK已经成为大模型应用开发中事实上的行业标准,而其本质上其实是对大模型API接口的封装;因此我们今天就不使用任何SDK的情况下,仅仅使用大模型的API接口实现流式返回和工具调用。
在openai SDK中网络工具使用的是最新的httpx,因此今天我们也用httpx实现大模型接口的异步调用,并实现工具调用。
基于原生API实现工具调用
还是之前强调过很多次的话:
1. 在文本处理模型中,模型的数据与输出只有一种格式,那就是文本格式,也就是字符串;因此虽然我们可以要求模型按照json或其它格式进行输出,但其本质上还是字符串,需要我们进行转换
2. 任何SDK或框架,都是基于大模型原生的功能进行上层开发与封装,因此我们需要了解不同模型之间的差异。
在我们平常的业务开发中,我们已经习惯了使用一些开发框架或已经封装好的SDK工具;但正是由于这些工具导致我们对大模型原生功能和参数了解不足,这也间接导致我们很多时候不知道问题出在哪里;所以,今天我们就只使用python开发包,不使用任何与大模型相关的SDK来实现大模型应用开发,体验一下大模型真正的运作流程。
在这里再强调一句话,大模型实现工具调用并不是说大模型能够执行代码,这里的代码包括任何语言的代码;而是大模型能够根据工具的签名,根据用户需求判断是否需要调用工具,然后再生成工具所需要的参数,之后再交给执行引擎去执行代码。
这里我们使用阿里云千问系列的模型作为测试模型,文档地址如下:
# 千问文档地址
https://bailian.console.aliyun.com/?spm=5176.29870676.nav-v2-dropdown-menu-0.d_main_0_0_0.384a2868HAumHR&tab=doc&scm=20140722.M_10863655._.V_1#/doc/?type=model&url=2862208
在代码中,用户可以根据自己的情况把连接,模型和密钥换成自己的,或者自己注册也可以。而作者使用的是硅基流动的免费模型。
#模型参数如下
OPEN_AI_URL="https://api.siliconflow.cn/v1" # 模型地址 这里是硅基流动的地址 官网地址: https://account.siliconflow.cn/zh/login?redirect=https%3A%2F%2Fcloud.siliconflow.cn%2F%3F
API_KEY="API-KEY" # 模型密钥 自己去官网注册
MODEL="Qwen/Qwen2.5-32B-Instruct" # 模型名称
STREAM=True # True代表流式返回 False代表非流式返回
根据文档所描述,模型本身并不会执行工具,工具的运行是由你的运行环境去执行,这也是前面作者一直强调的问题。
所以,在使用SDK或框架开发的过程中,SDK和框架给我们做了大量的辅助工作,因此我们可以省很多事;但在原生的大模型应用开发中,使用大模型的API接口,所有的东西都需要我们自己手动进行解析和处理,这虽然增加了工作量,但对学习来说能够让我们弄明白大模型的具体运作流程。
这里有个需要注意的点就是,大模型在流式返回中,工具函数的名称,只在第一个流式返回对象中出现;这个坑作者找了老半天,就是获取不到工具名。
其次,由于大模型只会返回函数名和参数,因此我们需要做一个工具字典,根据函数名调用具体的工具执行任务。
# 创建一个函数映射表
function_mapper = {
"get_weather": get_weather
}
具体代码地址,在公众号回复: 大模型原生工具调用 获取
本文转载自AI探索时代 作者:DFires
