本文可協助您瞭解 Azure OpenAI API 的支援生命週期。
備註
新的 API 回應物件可以隨時新增至 API 回應。 我們建議您只剖析所需的回應物件。
API 演進
先前,Azure OpenAI 會收到新 API 版本的每月更新。 利用新功能需要每次新 API 版本發佈時不斷更新程式代碼和環境變數。 Azure OpenAI 也需要額外的步驟,即使用 Azure 特定用戶端,這在 OpenAI 和 Azure OpenAI 之間移轉程式代碼時造成了額外的負擔。
從 2025 年 8 月開始,您現在可以選擇加入我們的下一代 v1 Azure OpenAI API,其中新增了對以下內容的支援:
- 持續存取最新功能,無需每月指定新的
api-version。
- 更快的 API 發布週期,更頻繁地推出新功能。
- 使用金鑰型驗證時,OpenAI 用戶端支援使用最少的程式碼變更在 OpenAI 與 Azure OpenAI 之間交換。
- 適用於權杖型驗證和自動權杖重新整理的 OpenAI 用戶端支援,無需使用對單獨 Azure OpenAI 用戶端的相依姓。
- 使用其他提供者 (例如 DeepSeek 和 Grok) 的模型進行聊天完成呼叫,這些模型支援 v1 聊天完成語法。
對仍處於預覽狀態的新 API 呼叫的存取將透過傳遞特定功能的預覽標頭來控制,允許您選擇加入所需的功能,而無需交換 API 版本。 或者,某些功能會透過其 API 路徑指出預覽狀態,而且不需要額外的標頭。
範例:
-
/openai/v1/evals 處於預覽狀態,需要傳遞 "aoai-evals":"preview" 標頭。
-
/openai/v1/fine_tuning/alpha/graders/ 處於預覽狀態,並且由於 API 路徑中存在 alpha,因此不需要自訂標頭。
若是初始 v1 正式發行 (GA) API 啟動,我們僅支援推斷和製作 API 功能的子集。 所有 GA 的功能都支援用於實際執行環境。 我們很快就會快速新增對更多功能的支援。
程式碼變更
v1 API
Python v1 範例
API 金鑰:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)
response = client.responses.create(
model="gpt-4.1-nano", # Replace with your model deployment name
input="This is a test.",
)
print(response.model_dump_json(indent=2))
-
使用
OpenAI() 用戶端,而不是 AzureOpenAI()。
-
base_url 會傳遞 Azure OpenAI 端點,並 /openai/v1 附加至端點位址。
-
api-version 不再是 v1 GA API 的必要參數。
使用環境變數設定 和 OPENAI_BASE_URL 的 OPENAI_API_KEY:
client = OpenAI()
Microsoft Entra ID:
這很重要
處理自動權杖重新整理先前是透過使用 AzureOpenAI() 用戶端來處理的。 v1 API 會藉由將自動權杖重新整理支援 OpenAI() 新增至用戶端,以移除此相依性。
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key = token_provider
)
response = client.responses.create(
model="gpt-4.1-nano",
input= "This is a test"
)
print(response.model_dump_json(indent=2))
-
base_url 會傳遞 Azure OpenAI 端點,並 /openai/v1 附加至端點位址。
-
api_key 參數設定為 token_provider,以啟用驗證權杖的自動擷取和重新整理,而不是使用靜態 API 金鑰。
v1 API
C# v1 範例
API 金鑰:
OpenAIClient client = new(
new ApiKeyCredential("{your-api-key}"),
new OpenAIClientOptions()
{
Endpoint = new("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
})
Microsoft Entra ID:
#pragma warning disable OPENAI001
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default");
OpenAIClient client = new(
authenticationPolicy: tokenPolicy,
options: new OpenAIClientOptions()
{
Endpoint = new("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
})
v1 API
JavaScript v1 範例
API 金鑰:
const client = new OpenAI({
baseURL: "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
apiKey: "{your-api-key}"
});
使用環境變數設定 和 OPENAI_BASE_URL 的 OPENAI_API_KEY:
const client = new OpenAI();
Microsoft Entra ID:
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
'https://cognitiveservices.azure.com/.default');
const client = new OpenAI({
baseURL: "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
apiKey: tokenProvider
});
v1 API
Go v1 範例
API 金鑰:
client := openai.NewClient(
option.WithBaseURL("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
option.WithAPIKey("{your-api-key}")
)
使用環境變數設定 和 OPENAI_BASE_URL 的 OPENAI_API_KEY:
client := openai.NewClient()
Microsoft Entra ID:
tokenCredential, err := azidentity.NewDefaultAzureCredential(nil)
client := openai.NewClient(
option.WithBaseURL("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"),
azure.WithTokenCredential(tokenCredential)
)
Java v1 範例
v1 API
API 金鑰:
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/")
.apiKey(apiKey)
.build();
使用環境變數設定 和 OPENAI_BASE_URL 的 OPENAI_API_KEY:
OpenAIClient client = OpenAIOkHttpClient.builder()
.fromEnv()
.build();
Microsoft Entra ID:
Credential tokenCredential = BearerTokenCredential.create(
AuthenticationUtil.getBearerTokenSupplier(
new DefaultAzureCredentialBuilder().build(),
"https://cognitiveservices.azure.com/.default"));
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/")
.credential(tokenCredential)
.build();
v1 API
API 金鑰:
curl -X POST https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-nano",
"input": "This is a test"
}'
Microsoft Entra ID:
curl -X POST https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4o",
"input": "This is a test"
}'
模型支援
針對 Azure OpenAI 模型,建議您使用 回應 API,不過,v1 API 也可讓您使用其他提供者 (例如 DeepSeek 和 Grok) 的模型進行聊天完成呼叫,這些模型支援 OpenAI v1 聊天完成語法。
base_url 將接受 https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/ 和 https://YOUR-RESOURCE-NAME.services.ai.azure.com/openai/v1/ 格式。
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=token_provider,
)
completion = client.chat.completions.create(
model="MAI-DS-R1", # Replace with your model deployment name.
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me about the attention is all you need paper"}
]
)
#print(completion.choices[0].message)
print(completion.model_dump_json(indent=2))
using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;
#pragma warning disable OPENAI001
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default");
ChatClient client = new(
model: "MAI-DS-R1", // Replace with your model deployment name.
authenticationPolicy: tokenPolicy,
options: new OpenAIClientOptions() {
Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
}
);
ChatCompletion completion = client.CompleteChat("Tell me about the attention is all you need paper");
Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}");
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { OpenAI } from "openai";
const tokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
'https://cognitiveservices.azure.com/.default');
const client = new OpenAI({
baseURL: "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
apiKey: tokenProvider
});
const messages = [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Tell me about the attention is all you need paper' }
];
// Make the API request with top-level await
const result = await client.chat.completions.create({
messages,
model: 'MAI-DS-R1', // model deployment name
max_tokens: 100
});
// Print the full response
console.log('Full response:', result);
// Print just the message content from the response
console.log('Response content:', result.choices[0].message.content);
package main
import (
"context"
"fmt"
"log"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/azure"
"github.com/openai/openai-go/v3/option"
)
func main() {
// Create an Azure credential
tokenCredential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("Failed to create credential: %s", err)
}
// Create a client with Azure OpenAI endpoint and token credential
client := openai.NewClient(
option.WithBaseURL("https://YOUR-RESOURCE_NAME.openai.azure.com/openai/v1/"),
azure.WithTokenCredential(tokenCredential),
)
// Make a completion request
chatCompletion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Explain what the bitter lesson is?"),
},
Model: "MAI-DS-R1", // Use your deployed model name on Azure
})
if err != nil {
log.Fatalf("Failed to get chat completions: %s", err)
}
fmt.Println(chatCompletion.Choices[0].Message.Content)
}
package com.example;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.ChatModel;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
public class OpenAITest {
public static void main(String[] args) {
// Get API key from environment variable for security
String apiKey = System.getenv("OPENAI_API_KEY");
String resourceName = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1";
String modelDeploymentName = "MAI-DS-R1"; //replace with you model deployment name
try {
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl(resourceName)
.apiKey(apiKey)
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addUserMessage("Explain what the bitter lesson is?")
.model(modelDeploymentName)
.build();
ChatCompletion chatCompletion = client.chat().completions().create(params);
}
}
}
curl -X POST https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "MAI-DS-R1",
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Explain what the bitter lesson is?"
}
]
}'
v1 API 支援
地位
支援在實際執行環境中使用正式發行功能。
| API 路徑 |
地位 |
/openai/v1/chat/completions |
正式推出 |
/openai/v1/embeddings |
正式推出 |
/openai/v1/evals |
Preview |
/openai/v1/files |
正式推出 |
/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints/{fine_tuning_checkpoint_id}/copy |
Preview |
/openai/v1/fine_tuning/alpha/graders/ |
Preview |
/openai/v1/fine_tuning/ |
正式推出 |
/openai/v1/models |
正式推出 |
/openai/v1/responses |
正式推出 |
/openai/v1/vector_stores |
正式推出 |
| API 路徑 |
Header |
/openai/v1/evals |
"aoai-evals":"preview" |
/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints/{fine_tuning_checkpoint_id}/copy |
"aoai-copy-ft-checkpoints" : "preview" |
v1 預覽版本與 2025-04-01-preview 之間的變更
-
v1 預覽 API
-
影片產生支援
-
新增功能 回應 API 功能:
- 遠端模型內容通訊協定 (MCP) 伺服器工具整合
- 支援非同步背景任務
- 加密的推理項目
- 映射產生
2025-04-01-preview 與 2025-03-01-preview 之間的變更
2025-03-01-preview 與 2025-02-01-preview 之間的變更
2025-02-01-preview 與 2025-01-01-preview 之間的變更
2025-01-01-preview 與 2024-12-01-preview 之間的變更
-
prediction 參數已針對預測輸出支援新增。
-
gpt-4o-audio-preview
模型支援。
2024-12-01-preview 與 2024-10-01-preview 之間的變更
2024-09-01-preview 與 2024-08-01-preview 之間的變更
-
max_completion_tokens 已新增以支援 o1-preview 和 o1-mini 模型。
max_tokens 不適用於 O1 系列 型號。
-
parallel_tool_calls 已新增。
-
completion_tokens_details 和 reasoning_tokens 已新增。
-
stream_options 和 include_usage 已新增。
2024-07-01-preview 與 2024-08-01-preview API 規格之間的變更
-
結構化輸出支援。
- 已新增大型檔案上傳 API。
- 在您的資料變更上:
- Mongo 資料庫整合。
-
已移除
role_information 參數。
-
rerank_score 已新增至引文物件。
- 已移除 AML 資料來源。
- AI 搜尋向量化整合改善。
2024-5-01-preview 與 2024-07-01-preview API 規格之間的變更
2024-04-01-preview 與 2024-05-01-preview API 規格之間的變更
- Assistants v2 支援 - 檔案搜尋工具和向量儲存
- 微調檢查點、種子、事件
- 在您的資料更新上
- DALL-E 2 現在支援模型部署,且可以與最新的預覽版 API 一起使用。
- 內容篩選更新
2024-03-01-preview 與 2024-04-01-preview API 規格之間的變更
已知問題
-
2025-04-01-preview Azure OpenAI 規格使用 OpenAPI 3.1,但目前 Azure API 管理 尚未完全支援,這是已知的問題。
後續步驟