大模型應用開發在不使用任何框架和SDK的情況下——基于原生Restful API實現流式傳輸與工具調用 原創
“ 大模型原生API開發,所有東西都需要自己手動處理,很麻煩;但能夠幫助我們理解大模型開發的運行過程?!?/strong>
在之前的文章中有說過,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

















