你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure OpenAI 推理模型
Azure OpenAI o-series
模型设计用于处理推理任务和解决问题的任务,具有更好的针对性和功能。 这些模型将更多时间花费在处理和理解用户的请求上,与以前的更迭版本相比,它们在科学、编码和数学等领域表现得异常强大。
o 系列模型的主要功能:
- 复杂代码生成:能够生成算法并处理高级编码任务以支持开发人员。
- 高级问题解决:非常适合全面的头脑风暴会议和解决多方面的挑战。
- 复杂文档比较:非常适合分析合同、案例文件或法律文档以识别细微的差别。
- 指令遵循和工作流管理:对于管理需要较短上下文的工作流特别有效。
可用性
若要访问 o3-mini
、o1
和 o1-preview
,需要完成注册,并且会根据 Microsoft 的资格条件授予访问权限。
之前申请并获得 o1
或 o1-preview
访问权限的客户无需重新申请,因为他们会自动进入最新模型的候补名单。
请求访问:受限访问模型应用程序
上市区域
型号 | 区域 | 有限的访问权限 |
---|---|---|
o3-mini |
模型可用性。 | 有限访问模型应用程序 |
o1 |
模型可用性。 | 有限访问模型应用程序 |
o1-preview |
模型可用性。 | 此模型仅适用于在原始受限访问版本中被授予访问权限的客户。 我们当前没有扩展对 o1-preview 的访问权限。 |
o1-mini |
模型可用性。 | 全局标准部署不需要访问权限请求。 标准(区域)部署目前仅适用于以前作为 o1-preview 版本的一部分授予访问权限的客户。 |
API 和功能支持
功能 | o3-mini,2025-01-31 | o1,2024-12-17 | o1-preview,2024-09-12 | o1-mini,2024-09-12 |
---|---|---|---|---|
API 版本 | 2024-12-01-preview 2025-01-01-preview |
2024-12-01-preview 2025-01-01-preview |
2024-09-01-preview 2024-10-01-preview 2024-12-01-preview |
2024-09-01-preview 2024-10-01-preview 2024-12-01-preview |
开发人员消息 | ✅ | ✅ | - | - |
结构化输出 | ✅ | ✅ | - | - |
上下文窗口 | 输入:200,000 输出:100,000 |
输入:200,000 输出:100,000 |
输入:128,000 输出:32,768 |
输入:128,000 输出:65,536 |
推理工作 | ✅ | ✅ | - | - |
视觉支持 | - | ✅ | - | - |
函数/工具 | ✅ | ✅ | - | - |
max_completion_tokens * |
✅ | ✅ | ✅ | ✅ |
系统消息** | ✅ | ✅ | - | - |
流式处理 | ✅ | - | - | - |
* 推理模型将仅使用 max_completion_tokens
参数。
**最新的 o* 系列模型支持系统消息,使迁移更轻松。 将系统消息用于 o3-mini
和 o1
时,它将被视为开发人员消息。 不应在同一 API 请求中使用开发人员消息和系统消息。
不支持
推理模型当前不支持以下各项:
- 并行工具调用
-
temperature
、top_p
、presence_penalty
、frequency_penalty
、logprobs
、top_logprobs
、logit_bias
、max_tokens
使用情况
这些模型当前不支持与使用聊天补全 API 的其他模型相同的参数集。
需要升级 OpenAI 客户端库才能访问最新的参数。
pip install openai --upgrade
如果对使用 Microsoft Entra ID 进行身份验证不熟悉,请参阅如何使用 Microsoft Entra ID 身份验证配置 Azure OpenAI 服务。
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2024-12-01-preview"
)
response = client.chat.completions.create(
model="o1-new", # replace with the model deployment name of your o1-preview, or o1-mini model
messages=[
{"role": "user", "content": "What steps should I think about when writing my first Python API?"},
],
max_completion_tokens = 5000
)
print(response.model_dump_json(indent=2))
输出:
{
"id": "chatcmpl-AEj7pKFoiTqDPHuxOcirA9KIvf3yz",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "Writing your first Python API is an exciting step in developing software that can communicate with other applications. An API (Application Programming Interface) allows different software systems to interact with each other, enabling data exchange and functionality sharing. Here are the steps you should consider when creating your first Python API...truncated for brevity.",
"refusal": null,
"role": "assistant",
"function_call": null,
"tool_calls": null
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"protected_material_code": {
"filtered": false,
"detected": false
},
"protected_material_text": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"created": 1728073417,
"model": "o1-2024-12-17",
"object": "chat.completion",
"service_tier": null,
"system_fingerprint": "fp_503a95a7d8",
"usage": {
"completion_tokens": 1843,
"prompt_tokens": 20,
"total_tokens": 1863,
"completion_tokens_details": {
"audio_tokens": null,
"reasoning_tokens": 448
},
"prompt_tokens_details": {
"audio_tokens": null,
"cached_tokens": 0
}
},
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"custom_blocklists": {
"filtered": false
},
"hate": {
"filtered": false,
"severity": "safe"
},
"jailbreak": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
]
}
推理工作
注意
推理模型在模型响应中将 reasoning_tokens
作为 completion_tokens_details
的一部分。 这些是隐藏的标记,不会作为消息响应内容的一部分返回,但模型会使用它们来帮助生成对请求的最终答复。
2024-12-01-preview
添加了额外的新参数 reasoning_effort
,你可以使用最新的 o1
模型将该参数设置为 low
、medium
或 high
。 effort 设置越高,模型处理请求所花的时间就越长,这通常会导致更多的 reasoning_tokens
。
开发人员消息
从功能上来说,开发人员消息 "role": "developer"
与系统消息相同。
在上一代码示例中添加开发人员消息,如下所示:
需要升级 OpenAI 客户端库才能访问最新的参数。
pip install openai --upgrade
如果对使用 Microsoft Entra ID 进行身份验证不熟悉,请参阅如何使用 Microsoft Entra ID 身份验证配置 Azure OpenAI 服务。
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2024-12-01-preview"
)
response = client.chat.completions.create(
model="o1-new", # replace with the model deployment name of your o1-preview, or o1-mini model
messages=[
{"role": "developer","content": "You are a helpful assistant."}, # optional equivalent to a system message for reasoning models
{"role": "user", "content": "What steps should I think about when writing my first Python API?"},
],
max_completion_tokens = 5000
)
print(response.model_dump_json(indent=2))
Markdown 输出
默认情况下,o3-mini
和 o1
模型不会尝试生成包含 markdown 格式的输出。 一个常见的使用场景是,当希望模型输出包含在 markdown 代码块中的代码时,这种行为是不理想的。 当模型生成不带 markdown 格式的输出时,会在交互式场体验中丢失语法突出显示和可复制代码块等功能。 若要替代此新的默认行为并鼓励在模型响应中包含 Markdown,请将字符串 Formatting re-enabled
添加到开发人员消息的开头。
将 Formatting re-enabled
添加到开发人员消息的开头不能保证模型在其响应中包含 markdown 格式,只会增加其可能性。 我们在内部测试中发现,具有 o1
模型的 Formatting re-enabled
与具有 o3-mini
相比,其本身效率更低。
为了提高 Formatting re-enabled
的性能,可以进一步增强开发人员信息的开头部分,这通常会产生所需的输出结果。 可以尝试添加更具描述性的初始说明,而不是将 Formatting re-enabled
添加到开发人员消息的开头,如以下示例之一:
Formatting re-enabled - please enclose code blocks with appropriate markdown tags.
Formatting re-enabled - code output should be wrapped in markdown.
根据预期输出,可能需要进一步自定义初始开发人员消息,以针对特定用例。