大模型应用开发在不使用任何框架和SDK的情况下——基于原生Restful API实现流式传输与工具调用 原创

发布于 2025-9-2 06:34
浏览
0收藏

“ 大模型原生API开发,所有东西都需要自己手动处理,很麻烦;但能够帮助我们理解大模型开发的运行过程。”

在之前的文章中有说过,openai SDK已经成为大模型应用开发中事实上的行业标准,而其本质上其实是对大模型API接口的封装;因此我们今天就不使用任何SDK的情况下,仅仅使用大模型的API接口实现流式返回和工具调用。

在openai SDK中网络工具使用的是最新的httpx,因此今天我们也用httpx实现大模型接口的异步调用,并实现工具调用。

大模型应用开发在不使用任何框架和SDK的情况下——基于原生Restful API实现流式传输与工具调用-AI.x社区

基于原生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的情况下——基于原生Restful API实现流式传输与工具调用-AI.x社区

所以,在使用SDK或框架开发的过程中,SDK和框架给我们做了大量的辅助工作,因此我们可以省很多事;但在原生的大模型应用开发中,使用大模型的API接口,所有的东西都需要我们自己手动进行解析和处理,这虽然增加了工作量,但对学习来说能够让我们弄明白大模型的具体运作流程。

这里有个需要注意的点就是,大模型在流式返回中,工具函数的名称,只在第一个流式返回对象中出现;这个坑作者找了老半天,就是获取不到工具名。

大模型应用开发在不使用任何框架和SDK的情况下——基于原生Restful API实现流式传输与工具调用-AI.x社区

其次,由于大模型只会返回函数名和参数,因此我们需要做一个工具字典,根据函数名调用具体的工具执行任务。

# 创建一个函数映射表
function_mapper = {    
  "get_weather": get_weather
}

具体代码地址,在公众号回复: 大模型原生工具调用 获取


本文转载自​AI探索时代​ 作者:DFires

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2025-9-2 06:34:44修改
收藏
回复
举报
回复
相关推荐