Modelos de raciocínio do Azure OpenAI

Azure modelos de raciocínio OpenAI são projetados para lidar com tarefas de raciocínio e soluçã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 recursos de modelos de raciocínio:

  • Geração de código complexa: capaz de gerar algoritmos e lidar com tarefas de codificação avançadas para dar suporte aos desenvolvedores.
  • Solução avançada de problemas: ideal para sessões de brainstorming abrangentes e para enfrentar desafios multifacetados.
  • Comparação complexa de documentos: perfeito para analisar contratos, arquivos de caso ou documentos legais para identificar diferenças sutis.
  • Seguir instruções e gerenciamento de fluxo de trabalho: particularmente eficaz para gerenciar fluxos de trabalho que exigem contextos mais curtos.

Pré-requisitos

  • Um modelo de raciocínio do Azure OpenAI implantado.

  • Se você usar os exemplos REST:

    • Instale o CLI do Azure. Para obter mais informações, consulte Instale o CLI do Azure.

    • Entre com az login, em seguida, gere um token de autenticação e armazene-o na variável de ambiente AZURE_OPENAI_AUTH_TOKEN.

      az account get-access-token --resource https://cognitiveservices.azure.com --query accessToken -o tsv
      

Uso

Atualmente, esses modelos não dão suporte ao mesmo conjunto de parâmetros que outros modelos que usam a API de conclusões de chat.

API de conclusão de chat

using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;

#pragma warning disable OPENAI001 //currently required for token based authentication

BearerTokenPolicy tokenPolicy = new(
    new DefaultAzureCredential(),
    "https://ai.azure.com/.default");

ChatClient client = new(
    model: "o4-mini",
    authenticationPolicy: tokenPolicy,
    options: new OpenAIClientOptions()
    {

        Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
    }
);

ChatCompletionOptions options = new ChatCompletionOptions
{
    MaxOutputTokenCount = 100000
};

ChatCompletion completion = client.CompleteChat(
         new DeveloperChatMessage("You are a helpful assistant"),
         new UserChatMessage("Tell me about the bitter lesson")
    );

Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}");

Esforço de raciocínio

Nota

Os modelos de reasoning_tokens raciocínio têm completion_tokens_details como parte da resposta do modelo. Esses são tokens ocultos que não são retornados como parte do conteúdo da resposta da mensagem, mas são usados pelo modelo para ajudar a gerar uma resposta final para sua solicitação. reasoning_effort pode ser definido como low, mediumou high para todos os modelos de raciocínio, exceto o1-mini. 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

As mensagens do desenvolvedor ("role": "developer") são funcionalmente iguais às mensagens do sistema.

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


using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;

#pragma warning disable OPENAI001 //currently required for token based authentication

BearerTokenPolicy tokenPolicy = new(
    new DefaultAzureCredential(),
    "https://ai.azure.com/.default");

ChatClient client = new(
    model: "o4-mini",
    authenticationPolicy: tokenPolicy,
    options: new OpenAIClientOptions()
    {

        Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
    }
);

ChatCompletionOptions options = new ChatCompletionOptions
{
    ReasoningEffortLevel = ChatReasoningEffortLevel.Low,
    MaxOutputTokenCount = 100000
};

ChatCompletion completion = client.CompleteChat(
         new DeveloperChatMessage("You are a helpful assistant"),
         new UserChatMessage("Tell me about the bitter lesson")
    );

Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}");

Resumo do raciocínio

Ao usar os modelos de raciocínio mais recentes com a API de Respostas , você pode usar o parâmetro de resumo de raciocínio para receber resumos da cadeia de raciocínio de pensamento do modelo.

Importante

Não há suporte para a tentativa de extrair o raciocínio bruto por meio de métodos diferentes do parâmetro resumo de raciocínio, pode violar a Política de Uso Aceitável e pode resultar em limitação ou suspensão quando detectado.

using OpenAI;
using OpenAI.Responses;
using System.ClientModel.Primitives;
using Azure.Identity;

#pragma warning disable OPENAI001 //currently required for token based authentication

BearerTokenPolicy tokenPolicy = new(
    new DefaultAzureCredential(),
    "https://ai.azure.com/.default");

OpenAIResponseClient client = new(
    model: "o4-mini",
    authenticationPolicy: tokenPolicy,
    options: new OpenAIClientOptions()
    {
        Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
    }
);

OpenAIResponse response = await client.CreateResponseAsync(
    userInputText: "What's the optimal strategy to win at poker?",
    new ResponseCreationOptions()
    {
        ReasoningOptions = new ResponseReasoningOptions()
        {
            ReasoningEffortLevel = ResponseReasoningEffortLevel.High,
            ReasoningSummaryVerbosity = ResponseReasoningSummaryVerbosity.Auto,
        },
    });

// Get the reasoning summary from the first OutputItem (ReasoningResponseItem)
Console.WriteLine("=== Reasoning Summary ===");
foreach (var item in response.OutputItems)
{
    if (item is ReasoningResponseItem reasoningItem)
    {
        foreach (var summaryPart in reasoningItem.SummaryParts)
        {
            if (summaryPart is ReasoningSummaryTextPart textPart)
            {
                Console.WriteLine(textPart.Text);
            }
        }
    }
}

Console.WriteLine("\n=== Assistant Response ===");
// Get the assistant's output
Console.WriteLine(response.GetOutputText());

Nota

Mesmo quando habilitados, não há garantia de que resumos de raciocínio sejam gerados para cada etapa/solicitação. Esse é o comportamento esperado.

Python Lark

Os modelos de raciocínio da série GPT-5 têm a capacidade de invocar um novo custom_tool chamado lark_tool. Essa ferramenta é baseada em Python lark e pode ser usada para restrição mais flexível da saída do modelo.

API de respostas

{
  "model": "gpt-5-2025-08-07",
  "input": "please calculate the area of a circle with radius equal to the number of 'r's in strawberry",
  "tools": [
    {
      "type": "custom",
      "name": "lark_tool",
      "format": {
        "type": "grammar",
        "syntax": "lark",
        "definition": "start: QUESTION NEWLINE ANSWER\nQUESTION: /[^\\n?]{1,200}\\?/\nNEWLINE: /\\n/\nANSWER: /[^\\n!]{1,200}!/"
      }
    }
  ],
  "tool_choice": "required"
}

Microsoft Entra ID:

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.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-5",  # replace with your model deployment name  
    tools=[  
        {  
            "type": "custom",
            "name": "lark_tool",
            "format": {
                "type": "grammar",
                "syntax": "lark",
                "definition": "start: QUESTION NEWLINE ANSWER\nQUESTION: /[^\\n?]{1,200}\\?/\nNEWLINE: /\\n/\nANSWER: /[^\\n!]{1,200}!/"
            }
        }  
    ],  
    input=[{"role": "user", "content": "Please calculate the area of a circle with radius equal to the number of 'r's in strawberry"}],  
)  

print(response.model_dump_json(indent=2))  

Chave de API:

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(  
    model="gpt-5",  # replace with your model deployment name  
    tools=[  
        {  
            "type": "custom",
            "name": "lark_tool",
            "format": {
                "type": "grammar",
                "syntax": "lark",
                "definition": "start: QUESTION NEWLINE ANSWER\nQUESTION: /[^\\n?]{1,200}\\?/\nNEWLINE: /\\n/\nANSWER: /[^\\n!]{1,200}!/"
            }
        }  
    ],  
    input=[{"role": "user", "content": "Please calculate the area of a circle with radius equal to the number of 'r's in strawberry"}],  
)  

print(response.model_dump_json(indent=2))  
  

Saída:

{
  "id": "resp_689a0cf927408190b8875915747667ad01c936c6ffb9d0d3",
  "created_at": 1754926332.0,
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "model": "gpt-5",
  "object": "response",
  "output": [
    {
      "id": "rs_689a0cfd1c888190a2a67057f471b5cc01c936c6ffb9d0d3",
      "summary": [],
      "type": "reasoning",
      "encrypted_content": null,
      "status": null
    },
    {
      "id": "msg_689a0d00e60c81908964e5e9b2d6eeb501c936c6ffb9d0d3",
      "content": [
        {
          "annotations": [],
          "text": ""strawberry" has 3 r's, so the radius is 3.\nArea = πr<sup>2</sup> = π × 3<sup>2</sup> = 9π ≈ 28.27 square units.",
          "type": "output_text",
          "logprobs": null
        }
      ],
      "role": "assistant",
      "status": "completed",
      "type": "message"
    }
  ],
  "parallel_tool_calls": true,
  "temperature": 1.0,
  "tool_choice": "auto",
  "tools": [
    {
      "name": "lark_tool",
      "parameters": null,
      "strict": null,
      "type": "custom",
      "description": null,
      "format": {
        "type": "grammar",
        "definition": "start: QUESTION NEWLINE ANSWER\nQUESTION: /[^\\n?]{1,200}\\?/\nNEWLINE: /\\n/\nANSWER: /[^\\n!]{1,200}!/",
        "syntax": "lark"
      }
    }
  ],
  "top_p": 1.0,
  "background": false,
  "max_output_tokens": null,
  "max_tool_calls": null,
  "previous_response_id": null,
  "prompt": null,
  "prompt_cache_key": null,
  "reasoning": {
    "effort": "medium",
    "generate_summary": null,
    "summary": null
  },
  "safety_identifier": null,
  "service_tier": "default",
  "status": "completed",
  "text": {
    "format": {
      "type": "text"
    }
  },
  "top_logprobs": null,
  "truncation": "disabled",
  "usage": {
    "input_tokens": 139,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 240,
    "output_tokens_details": {
      "reasoning_tokens": 192
    },
    "total_tokens": 379
  },
  "user": null,
  "content_filters": null,
  "store": true
}

Conclusão de Conversa

{
  "messages": [
    {
      "role": "user",
      "content": "Which one is larger, 42 or 0?"
    }
  ],
  "tools": [
    {
      "type": "custom",
      "name": "custom_tool",
      "custom": {
        "name": "lark_tool",
        "format": {
          "type": "grammar",
          "grammar": {
            "syntax": "lark",
            "definition": "start: QUESTION NEWLINE ANSWER\nQUESTION: /[^\\n?]{1,200}\\?/\nNEWLINE: /\\n/\nANSWER: /[^\\n!]{1,200}!/"
          }
        }
      }
    }
  ],
  "tool_choice": "required",
  "model": "gpt-5-2025-08-07"
}

Disponibilidade

Disponibilidade da região

Modelo Região Acesso limitado
gpt-chat-latest Padrão Global:
Leste dos EUA2
Suécia Central
Centro-Sul dos EUA
Polônia Central
Nenhuma solicitação de acesso é necessária.
gpt-5.5 Disponibilidade do modelo Nenhuma solicitação de acesso é necessária. Solicitação de aumento de cota necessária, dependendo do nível de cota. As assinaturas de nível 5 e 6 têm cota por padrão.
gpt-5.4-mini Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
gpt-5.4-nano Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
gpt-5.4-pro Disponibilidade do modelo Solicitar acesso: aplicação de modelo de acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
gpt-5.4 Disponibilidade do modelo Solicitar acesso: aplicativo de modelo de acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
gpt-5.3-codex Disponibilidade do modelo Solicitar acesso: solicitação de modelo de acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
gpt-5.2-codex Disponibilidade do modelo Solicitar acesso: aplicação de modelo de acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
gpt-5.2 Disponibilidade do modelo Solicitar acesso: solicitação para modelo de acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
gpt-5.1-codex-max Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5.1 Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5.1-chat Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
gpt-5.1-codex Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5.1-codex-mini Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
gpt-5-pro Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5-codex Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5 Disponibilidade do modelo O acesso não é mais restrito para esse modelo.
gpt-5-mini Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
gpt-5-nano Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
o3-pro Disponibilidade do modelo Solicitar acesso: aplicativo de modelo com acesso limitado. Se você já tiver acesso a um modelo de acesso limitado, nenhuma solicitação será necessária.
codex-mini Disponibilidade do modelo Nenhuma solicitação de acesso é necessária.
o4-mini Disponibilidade do modelo Nenhuma solicitação de acesso necessária para usar os principais recursos desse modelo.

Solicitar acesso: o4-mini recurso de resumo de raciocínio
o3 Disponibilidade do modelo Solicitar acesso: aplicação do modelo de acesso limitado
o3-mini Disponibilidade do modelo. O acesso não é mais restrito para esse modelo.
o1 Disponibilidade do modelo. O acesso não é mais restrito para esse modelo.

Suporte de API & funcionalidades

Funcionalidade gpt-5.5, 2026-04-24 gpt-5.4-nano, 2026-03-17 gpt-5.4-mini, 2026-03-17 gpt-5.4-pro gpt-5.4, 2026-03-05 gpt-5.3-codex, 2026-02-24 gpt-5.2-codex, 2026-01-14 gpt-5.2, 2025-12-11 gpt-5.1-codex-max, 2025-12-04 gpt-5.1, 2025-11-13 gpt-5.1-chat, 2025-11-13 gpt-5.1-codex, 2025-11-13 gpt-5.1-codex-mini, 2025-11-13 gpt-5-pro, 2025-10-06 gpt-5-codex, 2025-09-011 gpt-5, 2025-08-07 gpt-5-mini, 2025-08-07 gpt-5-nano, 2025-08-07
Mensagens do desenvolvedor
Saídas estruturadas
Janela de Contexto 1,050,000

Entrada:
922,000
Saída:
128,000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
1,050,000

Entrada:
922,000
Saída:
128,000
1,050,000

Entrada:
922,000
Saída:
128,000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
128,000

Entrada: 111.616
Saída: 16.384
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
400,000

Entrada: 272.000
Saída: 128.000
Esforço de raciocínio7 6 4 5
Entrada de imagem
API de Conclusões de Chat - - - - - - - -
API de respostas
Funções/Ferramentas
Chamadas de ferramentasparalelas 1 - -
max_completion_tokens 2 - - - - - - - -
Mensagens do Sistema 3
Resumo do raciocínio
Streaming -

1 Não há suporte para chamadas de ferramentas paralelas quando reasoning_effort é definida como minimal

2 Os modelos de raciocínio só funcionarão com o max_completion_tokens parâmetro ao usar a API de Conclusões de Chat. Use max_output_tokens com a API de Respostas.

3 Os modelos de raciocínio mais recentes dão suporte a mensagens do sistema para facilitar a migração. Você não deve usar uma mensagem de desenvolvedor e uma mensagem do sistema na mesma solicitação de API.

4gpt-5.1reasoning_effort define-se por padrão como none. Ao atualizar de modelos de raciocínio anteriores para gpt-5.1, tenha em mente que talvez seja necessário atualizar seu código para definir explicitamente um nível de reasoning_effort, caso você deseje que o reasoning_effort seja executado.

5gpt-5-pro apenas suporta reasoning_efforthigh; esse é o valor padrão mesmo quando não é explicitamente passado para o modelo.

6gpt-5.1-codex-max adiciona suporte para um novo reasoning_effort nível do xhigh qual é o nível mais alto para o qual o esforço de raciocínio pode ser definido.

7gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-maxe gpt-5.1-codex-mini suporte 'None' como um valor para o reasoning_effort parâmetro. Se você quiser usar esses modelos para gerar respostas sem raciocínio, defina reasoning_effort='None'. Essa configuração pode aumentar a velocidade.

Novos recursos de raciocínio GPT-5

Recurso Descrição
reasoning_effort xhigh só tem suporte com gpt-5.1-codex-max
minimal é suportado apenas com os modelos de raciocínio originais do GPT-5. minimal não é compatível com gpt-5.1 ou maior *

Opções: none, minimal, , low, medium, , highxhigh
verbosity Um novo parâmetro que fornece um controle mais detalhado sobre o quão resumida será a saída do modelo.

Opções:low, medium, high.
preamble Os modelos de raciocínio da série GPT-5 têm a capacidade de gastar tempo extra "pensando" antes de executar uma chamada de função/ferramenta.

Quando esse planejamento ocorre, o modelo pode fornecer insights sobre as etapas de planejamento na resposta do modelo por meio de um novo objeto chamado objeto preamble .

A geração de preâmbulos na resposta do modelo não é garantida, mas você pode incentivar o modelo usando o parâmetro instructions e passando conteúdo como "Você DEVE planejar extensivamente antes de cada chamada de função. SEMPRE exiba seu plano para o usuário antes de chamar qualquer função
ferramentas permitidas Você pode especificar várias ferramentas tool_choice em vez de somente uma.
tipo de ferramenta personalizado Habilita saídas de texto bruto (não json)
lark_tool Permite que você use alguns dos recursos de Python lark para restringir as respostas de modelo mais flexíveis

* gpt-5-codex também não dá suporte reasoning_effortminimala .

Para obter mais informações, também recomendamos ler o guia prático de Prompting do GPT-5 da OpenAI e o guia de recursos do GPT-5.

Nota

  • Para evitar tempos limite, o modo em segundo plano é recomendado para o3-pro.
  • o3-pro atualmente, não dá suporte à geração de imagem.

Sem suporte

Atualmente, não há suporte para os seguintes casos com modelos de raciocínio:

  • temperature, top_p, presence_penalty, frequency_penalty, logprobs, top_logprobs, logit_bias, , max_tokens

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 de 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 ambientes interativos de teste. Para substituir esse novo comportamento padrão e incentivar a inclusão de markdown em respostas de modelo, adicione a cadeia Formatting re-enabled de caracteres ao início da mensagem do desenvolvedor.

Adicionar Formatting re-enabled ao início de sua mensagem de desenvolvedor não garante que o modelo incluirá a formatação de markdown em sua resposta, ele só aumenta a probabilidade. Descobrimos por meio de testes internos que Formatting re-enabled são menos eficazes por si só com o o1 modelo 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, o que geralmente resultará na saída desejada. Em vez de apenas adicionar Formatting re-enabled ao início da sua mensagem de desenvolvedor, você pode experimentar a adição de 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.