在 GitHub 上面有許多可以呼叫 GPT-3.5 或 GPT-4 的開源專案,但大多都僅支援 OpenAI 提供的 API 端點。如果你想要將這些專案改成呼叫 Azure OpenAI Service (AOAI) 的 API 端點的話,沒用過 AOAI 的人就會不知道怎樣調整。今天這篇文章我打算來整理一下幾個重要的背景知識,方便你快速的轉換過去。
OpenAI API 與 AOAI 的相容性
其實 OpenAI 提供的 API 跟微軟 Azure OpenAI Service (AOAI) 提供的 API 是完全相容的,甚至於許多開源的 LLM 大語言模型也會刻意設計相容於 OpenAI 的 API 規格。所以,只要你能夠理解 Azure OpenAI Service (AOAI) 的一些基本概念,基本上很容易就可以切換過去。
呼叫 API 的注意事項
我們要呼叫一個 API 不外乎要注意以下事項:
-
Endpoint (端點)
OpenAI API 與 AOAI 的 API 端點位址肯定不太一樣。
-
API Version (API 版本)
OpenAI API 的「版本」資訊寫在網址列上,目前有都還是 v1
而已,所以不需要特別指定。
但是 AOAI 的 API 有分版本,呼叫時必須明確加上,否則會呼叫不到。
-
API Key (API 金鑰)
OpenAI API 主要就是透過 API 金鑰來進行 API 驗證,並且搭配 Bearer Token 的方式傳輸,沒有其他方法。
但是 AOAI 的 API 提供了 2 種驗證方法,分別是 API Key authentication
與 Microsoft Entra ID authentication
這兩種,所以呼叫的方式有點不太一樣。
API Key authentication
是最簡單的方式,只需要在 HTTP Header 裡面加上 api-key
並放入 Acess Key 即可。
Microsoft Entra ID authentication
是最安全的方式,但是需要透過 OAuth 2.0 的方式來取得 Access Token,並搭配 Bearer Token 的方式傳輸,這個方式比較複雜一些。
-
Request Body (請求主體)
這部分 OpenAI API 與 AOAI 的 API 並沒有太大的差異,基本上都是相容的。
-
Response Body (回應主體)
這部分 OpenAI API 與 AOAI 的 API 並沒有太大的差異,基本上都是相容的。
API 呼叫時的差異之處
我以最常用的 Chat Completion API 為例:
-
OpenAI
https://api.openai.com/v1/chat/completions
-
Azure OpenAI Service (AOAI)
https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}
從網址就可以看出,呼叫 OpenAI 真的簡單很多,沒有太多的心理負擔。但是呼叫 AOAI 的話,就需要多加上一些參數,這樣才能夠正確的呼叫到 API 端點。
當你在 Azure Portal 上面建立了一個 Azure OpenAI Service (AOAI) 之後,你就可以在該服務的概觀頁面上找到 資源名稱,也就是上述網址的 {your-resource-name}
部分,若以下圖為例,你的 {your-resource-name}
就要改成 willh
:
接下來你必須要建立一個 Deployment 並取得 Deployment name 來替換掉 API 端點上的 {deployment-id}
內容,你要點擊上圖的 Model deployments
並點擊 Managem Deployments
按鈕,進入 Azure OpenAI Studio 介面,你要在這裡建立一個 Deployment 資源。如下圖示,當你建立完成後,這裡的 Deployment name 就是你要置換掉 API 端點上的 {deployment-id}
內容:
在點擊 Create new deployment
按鈕建立時,必須選擇一個 model
(模型名稱),然後自行設定一組 Deployment name
,這樣就可以建立一個 Deployment 資源了。
基本上,模型名稱跟部署名稱不一定要一樣,但我個人習慣設定成一樣,這樣比較好理解。在呼叫 API 的時候,部署名稱就是網址列上的 {deployment-id}
部分,但是模型名稱則是用在 Request Body 的 model
屬性中,千萬不要搞混了。
最後,還有個 AOAI 的網址列上還有個{api-version}
需要指定,我以 AOAI 的 Chat completions 為例,目前支援的 API 版本就有以下這些:
結論
只要有了上述知識,我們就可以很輕鬆的將 OpenAI 的 API 呼叫,順利轉換成 Azure OpenAI Service (AOAI) 的 API 呼叫了!
以下是透過發出 OpenAI API 呼叫的範例:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}'
如果要成功呼叫 AOAI 的 API 的話,就必須要將上述的呼叫改成以下這樣:
curl https://willh.openai.azure.com/openai/deployments/gpt-35-turbo/chat/completions?api-version=2024-02-15-preview \
-H "Content-Type: application/json" \
-H "api-key: $AOAI_API_KEY" \
-d '{
"model": "gpt-35-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}'
如此一來就可以順利轉換成功啦!👍
相關連結