你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure OpenAI 推理模型

Azure OpenAI o-series 模型设计用于处理推理任务和解决问题的任务,具有更好的针对性和功能。 这些模型将更多时间花费在处理和理解用户的请求上,与以前的更迭版本相比,它们在科学、编码和数学等领域表现得异常强大。

o 系列模型的主要功能

  • 复杂代码生成:能够生成算法并处理高级编码任务以支持开发人员。
  • 高级问题解决:非常适合全面的头脑风暴会议和解决多方面的挑战。
  • 复杂文档比较:非常适合分析合同、案例文件或法律文档以识别细微的差别。
  • 指令遵循和工作流管理:对于管理需要较短上下文的工作流特别有效。

可用性

若要访问 o3-minio1o1-preview,需要完成注册,并且会根据 Microsoft 的资格条件授予访问权限

之前申请并获得 o1o1-preview 访问权限的客户无需重新申请,因为他们会自动进入最新模型的候补名单。

请求访问:受限访问模型应用程序

上市区域

型号 区域 有限的访问权限
o3-mini 模型可用性 有限访问模型应用程序
o1 模型可用性 有限访问模型应用程序
o1-preview 模型可用性 此模型仅适用于在原始受限访问版本中被授予访问权限的客户。 我们当前没有扩展对 o1-preview 的访问权限。
o1-mini 模型可用性 全局标准部署不需要访问权限请求。

标准(区域)部署目前仅适用于以前作为 o1-preview 版本的一部分授予访问权限的客户。

API 和功能支持

功能 o3-mini,2025-01-31 o1,2024-12-17 o1-preview2024-09-12 o1-mini2024-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-minio1 时,它将被视为开发人员消息。 不应在同一 API 请求中使用开发人员消息和系统消息。

不支持

推理模型当前不支持以下各项:

  • 并行工具调用
  • temperaturetop_ppresence_penaltyfrequency_penaltylogprobstop_logprobslogit_biasmax_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 模型将该参数设置为 lowmediumhigh。 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-minio1 模型不会尝试生成包含 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.

根据预期输出,可能需要进一步自定义初始开发人员消息,以针对特定用例。