Partilhar via


Modelos de raciocínio do Azure OpenAI

Os modelos OpenAI o-series do Azure são projetados para lidar com tarefas de raciocínio e resolução de problemas com maior foco e capacidade. Esses modelos gastam mais tempo processando e entendendo a solicitação do usuário, tornando-os excepcionalmente fortes em áreas como ciência, codificação e matemática em comparação com iterações anteriores.

Principais capacidades dos modelos da série O:

  • Geração de código complexa: Capaz de gerar algoritmos e lidar com tarefas avançadas de codificação para dar suporte aos desenvolvedores.
  • Resolução Avançada de Problemas: Ideal para sessões de brainstorming abrangentes e para enfrentar desafios multifacetados.
  • Comparação complexa de documentos: Perfeita para analisar contratos, arquivos de casos ou documentos legais para identificar diferenças sutis.
  • Acompanhamento de instruções e gerenciamento de fluxo de trabalho: Particularmente eficaz para gerenciar fluxos de trabalho que exigem contextos mais curtos.

Disponibilidade

Disponibilidade da região

Modelo Região Acesso limitado
o3-pro Leste dos EUA 2 & Suécia Central (Padrão Global) Solicitar acesso: o3 aplicação modelo de acesso limitado. Se já tiver o3 access, nenhuma solicitação é necessária para o3-pro.
codex-mini Leste dos EUA 2 & Suécia Central (Padrão Global) Não é necessário nenhum pedido de acesso.
o4-mini Disponibilidade do modelo Nenhuma solicitação de acesso é necessária para usar os recursos principais desse modelo.

Solicitar acesso: funcionalidade de resumo de raciocínio do o4-mini
o3 Disponibilidade do modelo Solicitar acesso: o3 aplicação modelo de acesso limitado
o3-mini Disponibilidade do modelo. O acesso não é mais restrito para este modelo.
o1 Disponibilidade do modelo. O acesso não é mais restrito para este modelo.
o1-preview Disponibilidade do modelo. Este modelo só está disponível para clientes aos quais foi concedido acesso como parte da versão original de acesso limitado. No momento, não estamos expandindo o acesso ao o1-preview.
o1-mini Disponibilidade do modelo. Nenhuma solicitação de acesso necessária para implantações de Padrão Global.

Atualmente, as implantações padrão (regionais) estão disponíveis apenas para clientes selecionados aos quais foi concedido acesso anteriormente como parte da o1-preview versão.

Suporte a recursos API &

Característica códice-mini, 2025-05-16 O3-PRO, 2025-06-10 o4-mini, 2025-04-16 o3, 2025-04-16 O3-Mini, 2025-01-31 o1, 2024-12-17 o1-pré-visualização, 2024-09-12 O1-Mini, 2024-09-12
Versão da API 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização 2025-04-01-preview & v1 pré-visualização
Mensagens do desenvolvedor - -
Saídas estruturadas - -
Janela de contexto Entrada: 200 000
Saída: 100 000
Entrada: 200 000
Saída: 100 000
Entrada: 200 000
Saída: 100 000
Entrada: 200 000
Saída: 100 000
Entrada: 200 000
Saída: 100 000
Entrada: 200 000
Saída: 100 000
Entrada: 128.000
Potência: 32.768
Entrada: 128.000
Saída: 65.536
Esforço de raciocínio - -
Entrada de imagem - - -
API de conclusão de bate-papo - -
API de Respostas - -
Funções/Ferramentas - -
Chamadas de ferramentas paralelas - - - - - - - -
max_completion_tokens 1
Mensagens do sistema 2 - -
Síntese de fundamentação3 - - - - -
Transmissão 4 - - - -

1 Os modelos de raciocínio só funcionarão com o max_completion_tokens parâmetro.

2 O modelo mais recente da série o* suporta mensagens do sistema para facilitar a migração. Quando você usa uma mensagem do sistema com o4-mini, o3, o3-minie o1 ela será tratada como uma mensagem do desenvolvedor. Você não deve usar uma mensagem de desenvolvedor e uma mensagem do sistema na mesma solicitação de API. 3 O acesso ao resumo do encadeamento de ideias está disponível apenas para o3 & o4-mini. 4 Streaming for o3 é apenas de acesso limitado.

Observação

  • Para evitar tempos limites, o modo de segundo plano é recomendado para o3-pro.
  • o3-pro atualmente não suporta geração de imagem.

Não suportado

Atualmente, os seguintes itens não são suportados com modelos de raciocínio:

  • temperature, top_p, presence_penalty, frequency_penaltylogprobs, top_logprobs, logit_bias, max_tokens

Utilização

Atualmente, esses modelos não suportam o mesmo conjunto de parâmetros que outros modelos que usam a API de conclusão de chat.

Você precisará atualizar sua biblioteca de cliente OpenAI para ter acesso aos parâmetros mais recentes.

pip install openai --upgrade

Se você é novo no uso da ID do Microsoft Entra para autenticação, consulte Como configurar o Azure OpenAI nos modelos do Azure AI Foundry com a autenticação do Microsoft Entra ID.

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="2025-03-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))

Saída Python:

{
  "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"
        }
      }
    }
  ]
}

Esforço de raciocínio

Observação

Os modelos de raciocínio têm reasoning_tokens como parte da resposta no completion_tokens_details modelo. Esses são tokens ocultos que não são retornados como parte do conteúdo de resposta da mensagem, mas são usados pelo modelo para ajudar a gerar uma resposta final à sua solicitação. 2024-12-01-preview adiciona um novo parâmetro reasoning_effort adicional que pode ser definido como low, mediumou high com o modelo mais recente o1 . Quanto maior a configuração de esforço, mais tempo o modelo gastará processando a solicitação, o que geralmente resultará em um número maior de reasoning_tokens.

Mensagens do desenvolvedor

Funcionalmente, as mensagens "role": "developer" do desenvolvedor são as mesmas que as mensagens do sistema.

Adicionar uma mensagem de desenvolvedor ao exemplo de código anterior teria a seguinte aparência:

Você precisará atualizar sua biblioteca de cliente OpenAI para ter acesso aos parâmetros mais recentes.

pip install openai --upgrade

Se você é novo no uso do Microsoft Entra ID para autenticação, consulte Como configurar o Azure OpenAI com a autenticação do Microsoft Entra ID.

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="2025-03-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,
    reasoning_effort = "medium" # low, medium, or high

)

print(response.model_dump_json(indent=2))

Resumo da fundamentação

Ao usar os modelos mais recentes o3 e o4-mini com a API de respostas, você pode usar o parâmetro de resumo de raciocínio para obter resumos da cadeia de raciocínio lógico do modelo. Este parâmetro pode ser definido como auto, concise, ou detailed. O acesso a este recurso requer que você solicite acesso.

Observação

Mesmo quando ativado, os resumos de raciocínio não são gerados para cada etapa/solicitação. Este é um comportamento esperado.

Você precisará atualizar sua biblioteca de cliente OpenAI para ter acesso aos parâmetros mais recentes.

pip install openai --upgrade
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(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  azure_ad_token_provider=token_provider,
  api_version="preview"
)

response = client.responses.create(
    input="Tell me about the curious case of neural text degeneration",
    model="o4-mini", # replace with model deployment name
    reasoning={
        "effort": "medium",
        "summary": "detailed" # auto, concise, or detailed (currently only supported with o4-mini and o3)
    }
)

print(response.model_dump_json(indent=2))
{
  "id": "resp_68007e26b2cc8190b83361014f3a78c50ae9b88522c3ad24",
  "created_at": 1744862758.0,
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "model": "o4-mini",
  "object": "response",
  "output": [
    {
      "id": "rs_68007e2773bc8190b5b8089949bfe13a0ae9b88522c3ad24",
      "summary": [
        {
          "text": "**Summarizing neural text degeneration**\n\nThe user's asking about \"The Curious Case of Neural Text Degeneration,\" a paper by Ari Holtzman et al. from 2020. It explains how certain decoding strategies produce repetitive and dull text. In contrast, methods like nucleus sampling yield more coherent and diverse outputs. The authors introduce metrics like surprisal and distinct-n for evaluation and suggest that maximum likelihood decoding often favors generic continuations, leading to loops and repetitive patterns in longer texts. They promote sampling from truncated distributions for improved text quality.",
          "type": "summary_text"
        },
        {
          "text": "**Explaining nucleus sampling**\n\nThe authors propose nucleus sampling, which captures a specified mass of the predictive distribution, improving metrics such as coherence and diversity. They identify a \"sudden drop\" phenomenon in token probabilities, where a few tokens dominate, leading to a long tail. By truncating this at a cumulative probability threshold, they aim to enhance text quality compared to top-k sampling. Their evaluations include human assessments, showing better results in terms of BLEU scores and distinct-n measures. Overall, they highlight how decoding strategies influence quality and recommend adaptive techniques for improved outcomes.",
          "type": "summary_text"
        }
      ],
      "type": "reasoning",
      "status": null
    },
    {
      "id": "msg_68007e35c44881908cb4651b8e9972300ae9b88522c3ad24",
      "content": [
        {
          "annotations": [],
          "text": "Researchers first became aware that neural language models, when used to generate long stretches of text with standard “maximum‐likelihood” decoding (greedy search, beam search, etc.), often produce bland, repetitive or looping output. The 2020 paper “The Curious Case of Neural Text Degeneration” (Holtzman et al.) analyzes this failure mode and proposes a simple fix—nucleus (top‑p) sampling—that dramatically improves output quality.\n\n1. The Problem: Degeneration  \n   • With greedy or beam search, models tend to pick very high‑probability tokens over and over, leading to loops (“the the the…”) or generic, dull continuations.  \n   • Even sampling with a fixed top‑k (e.g. always sample from the 40 most likely tokens) can be suboptimal: if the model’s probability mass is skewed, k may be too small (overly repetitive) or too large (introducing incoherence).\n\n2. Why It Happens: Distributional Peakedness  \n   • At each time step the model’s predicted next‐token distribution often has one or two very high‑probability tokens, then a long tail of low‑probability tokens.  \n   • Maximum‐likelihood decoding zeroes in on the peak, collapsing diversity.  \n   • Uniform sampling over a large k allows low‑probability “wild” tokens, harming coherence.\n\n3. The Fix: Nucleus (Top‑p) Sampling  \n   • Rather than fixing k, dynamically truncate the distribution to the smallest set of tokens whose cumulative probability ≥ p (e.g. p=0.9).  \n   • Then renormalize and sample from that “nucleus.”  \n   • This keeps only the “plausible” mass and discards the improbable tail, adapting to each context.\n\n4. Empirical Findings  \n   • Automatic metrics (distinct‑n, repetition rates) and human evaluations show nucleus sampling yields more diverse, coherent, on‑topic text than greedy/beam or fixed top‑k.  \n   • It also outperforms simple temperature scaling (raising logits to 1/T) because it adapts to changes in the distribution’s shape.\n\n5. Takeaways for Practitioners  \n   • Don’t default to beam search for open-ended generation—its high likelihood doesn’t mean high quality.  \n   • Use nucleus sampling (p between 0.8 and 0.95) for a balance of diversity and coherence.  \n   • Monitor repetition and distinct‑n scores if you need automatic sanity checks.\n\nIn short, “neural text degeneration” is the tendency of likelihood‐maximizing decoders to produce dull or looping text. By recognizing that the shape of the model’s probability distribution varies wildly from step to step, nucleus sampling provides an elegant, adaptive way to maintain both coherence and diversity in generated text.",
          "type": "output_text"
        }
      ],
      "role": "assistant",
      "status": "completed",
      "type": "message"
    }
  ],
  "parallel_tool_calls": true,
  "temperature": 1.0,
  "tool_choice": "auto",
  "tools": [],
  "top_p": 1.0,
  "max_output_tokens": null,
  "previous_response_id": null,
  "reasoning": {
    "effort": "medium",
    "generate_summary": null,
    "summary": "detailed"
  },
  "status": "completed",
  "text": {
    "format": {
      "type": "text"
    }
  },
  "truncation": "disabled",
  "usage": {
    "input_tokens": 16,
    "output_tokens": 974,
    "output_tokens_details": {
      "reasoning_tokens": 384
    },
    "total_tokens": 990,
    "input_tokens_details": {
      "cached_tokens": 0
    }
  },
  "user": null,
  "store": true
}

Saída de Markdown

Por padrão, os modelos o3-mini e o1 não tentarão produzir uma saída que inclua a formatação markdown. Um caso de uso comum em que esse comportamento é indesejável é quando você deseja que o modelo produza o código contido em um bloco de código de markdown. Quando o modelo gera saída sem formatação de markdown, você perde recursos como realce de sintaxe e blocos de código copiáveis em experiências interativas de playground. Para substituir esse novo comportamento padrão e incentivar a inclusão de markdown nas respostas do modelo, adicione a cadeia de caracteres Formatting re-enabled ao início da mensagem do desenvolvedor.

Adicionar Formatting re-enabled ao início da mensagem do desenvolvedor não garante que o modelo incluirá formatação de marcação em sua resposta, apenas aumenta a probabilidade. Verificámos, a partir de testes internos, que Formatting re-enabled é menos eficaz por si só com o modelo o1 do que com o3-mini.

Para melhorar o desempenho de Formatting re-enabled você pode aumentar ainda mais o início da mensagem do desenvolvedor que muitas vezes resultará na saída desejada. Em vez de apenas adicionar Formatting re-enabled ao início da mensagem do desenvolvedor, você pode experimentar adicionar uma instrução inicial mais descritiva, como um dos exemplos abaixo:

  • Formatting re-enabled - please enclose code blocks with appropriate markdown tags.
  • Formatting re-enabled - code output should be wrapped in markdown.

Dependendo da saída esperada, talvez seja necessário personalizar ainda mais a mensagem inicial do desenvolvedor para direcionar seu caso de uso específico.