Modelos de raciocínio Azure OpenAI

Os modelos de raciocínio Azure OpenAI foram concebidos para abordar tarefas de raciocínio e resolução de problemas com maior foco e capacidade. Estes modelos dedicam mais tempo a processar e compreender o pedido do utilizador, tornando-os excecionalmente fortes em áreas como ciência, programação e matemática em comparação com iterações anteriores.

Principais capacidades dos modelos de raciocínio:

  • Geração Complexa de Código: Capaz de gerar algoritmos e lidar com tarefas avançadas de programação para apoiar programadores.
  • Resolução Avançada de Problemas: Ideal para sessões abrangentes de brainstorming e para enfrentar desafios multifacetados.
  • Comparação de Documentos Complexos: Perfeita para analisar contratos, processos ou documentos legais para identificar diferenças subtis.
  • Seguir Instruções e Gestão de Fluxos de Trabalho: Particularmente eficaz para gerir fluxos de trabalho que exigem contextos mais curtos.

Pré-requisitos

  • Um modelo de raciocínio Azure OpenAI implementado.

  • Se usares os exemplos do REST:

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

    • Inicie sessão com az login, depois gere um token portador e armazene-o na AZURE_OPENAI_AUTH_TOKEN variável de ambiente.

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

Utilização

Estes modelos não suportam atualmente o mesmo conjunto de parâmetros que outros modelos que utilizam a API de completação de chat.

API de completaçã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 raciocínio têm reasoning_tokens como parte de completion_tokens_details na resposta do modelo. Estes são tokens ocultos que não são devolvidos como parte do conteúdo da resposta à mensagem, mas são usados pelo modelo para ajudar a gerar uma resposta final ao seu pedido. reasoning_effort pode ser definido como low, medium, ou high para todos os modelos de raciocínio exceto o1-mini. Quanto maior for a definição de esforço, mais tempo o modelo passará a processar o pedido, o que geralmente resultará num maior número de reasoning_tokens.

Mensagens do programador

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

Adicionar uma mensagem de programador ao exemplo de código anterior seria o seguinte:


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 utilizar os modelos de raciocínio mais recentes com a API Responses , pode usar o parâmetro de resumo de raciocínio para receber resumos do raciocínio da cadeia de pensamento do modelo.

Importante

Tentar extrair raciocínio bruto através de métodos diferentes do parâmetro de resumo de raciocínio não é suportado, pode violar a Política de Uso Aceitável e pode resultar em limitação ou suspensão quando detetado.

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 ativados, não é garantido que os resumos de raciocínio sejam gerados para cada passo/pedido. Isto é um comportamento esperado.

Python lark

Os modelos de raciocínio da série GPT-5 têm a capacidade de chamar um novo custom_tool chamado lark_tool. Esta ferramenta baseia-se em Python lark e pode ser usada para uma 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 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² = π × 3² = 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ões de Chat

{
  "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 regional

Modelo Região Acesso limitado
gpt-5.5 Padrão Global:
East US2
Suécia Central
E.U.A. Centro-Sul
Polónia Central

Padrão da Zona de Dados:
East US2
Centro-Sul dos EUA
Polónia Central
Suécia Central
Não é necessário pedido de acesso. Pedido de quota é necessário dependendo do nível de quota. As subscrições de Nível 5 e Nível 6 têm quotas por padrão.
gpt-5.4-mini Disponibilidade de modelos Não é necessário pedido de acesso.
gpt-5.4-nano Disponibilidade de modelos Não é necessário pedido de acesso.
gpt-5.4-pro Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
gpt-5.4 Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
gpt-5.3-codex Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
gpt-5.2-codex Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
gpt-5.2 Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
gpt-5.1-codex-max Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5.1 Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5.1-chat Disponibilidade de modelos Não é necessário pedido de acesso.
gpt-5.1-codex Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5.1-codex-mini Disponibilidade de modelos Não é necessário pedido de acesso.
gpt-5-pro Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5-codex Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5 Disponibilidade de modelos O acesso já não é restrito para este modelo.
gpt-5-mini Disponibilidade de modelos Não é necessário pedido de acesso.
gpt-5-nano Disponibilidade de modelos Não é necessário pedido de acesso.
o3-pro Disponibilidade de modelos Solicitar acesso: Aplicação de modelo de acesso limitado. Se já tiver acesso a um modelo de acesso limitado, não é necessário pedido.
codex-mini Disponibilidade de modelos Não é necessário pedido de acesso.
o4-mini Disponibilidade de modelos Não é necessário pedido de acesso para usar as capacidades principais deste modelo.

Solicitar acesso: o4-mini funcionalidade de síntese de raciocínio
o3 Disponibilidade de modelos Pedido de acesso: Aplicação modelo de acesso limitado
o3-mini Disponibilidade de modelos. O acesso já não é restrito para este modelo.
o1 Disponibilidade de modelos. O acesso já não é restrito para este modelo.

Suporte a API e 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, 05-03-2026 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, 04-12-2025 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, 06-10-2025 GPT-5-Codex, 2025-09-011 GPT-5, 2025-08-07 GPT-5-MINI, 07-08-2025 GPT-5-nano, 07-08-2025
Mensagens do Desenvolvedor
Saídas Estruturadas
Janela de Contexto 1,050,000

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

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 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
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
128,000

Entrada: 111.616
Produção: 16.384
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
400,000

Entrada: 272.000
Produção: 128.000
Esforço de Raciocínio7 6 4 5
Entrada de imagem
API de Completação de Chat - - - - - - - -
API de Respostas
Funções/Ferramentas
Chamadas de Ferramenta Paralelas1 - -
max_completion_tokens 2 - - - - - - - -
Mensagens do Sistema 3
Resumo do raciocínio
Streaming -

1 Chamadas paralelas de ferramentas não são suportadas quando reasoning_effort está definido como minimal

2 Modelos de raciocínio só funcionam com o max_completion_tokens parâmetro quando se utiliza a API de Conversas Completas. Use max_output_tokens com a API de Responses.

3 Os modelos de raciocínio mais recentes suportam mensagens do sistema para facilitar a migração. Não deve usar uma mensagem de programador e uma mensagem de sistema no mesmo pedido de API.

4gpt-5.1reasoning_effort por predefinição é none. Ao atualizar a partir de modelos de raciocínio anteriores para gpt-5.1, tenha em mente que pode ser necessário atualizar o código para especificar explicitamente um nível de _reasoning_effort_ se desejar que _reasoning_effort_ ocorra.

5gpt-5-pro suporta reasoning_efforthighapenas , este é o valor padrão mesmo quando não é explicitamente passado ao modelo.

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

7gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-max, e gpt-5.1-codex-mini suporte 'None' como valor para o reasoning_effort parâmetro. Se quiser usar estes modelos para gerar respostas sem raciocínio, defina reasoning_effort='None'. Esta configuração pode aumentar a velocidade.

NOVAS funcionalidades de raciocínio GPT-5

Destaque Descrição
reasoning_effort xhigh é suportado apenas com gpt-5.1-codex-max
minimal é suportado apenas com os modelos originais de raciocínio GPT-5. minimal não é suportado com gpt-5.1 ou maior *

Opções: none, minimal, low, medium, high, xhigh
verbosity Um novo parâmetro que proporcione um controlo mais granular sobre a concisão da 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 mais tempo a "pensar" antes de executar uma chamada de função/ferramenta.

Quando este planeamento ocorre, o modelo pode fornecer uma visão sobre os passos de planeamento na resposta do modelo através de um novo objeto chamado objeto preamble .

A geração de preâmbulos na resposta do modelo não é garantida, embora possa incentivar o modelo usando o parâmetro instructions e passando conteúdo como "deve planear extensivamente antes de cada chamada de função". SEMPRE envia o teu plano ao utilizador antes de chamar qualquer função"
Ferramentas permitidas Pode especificar várias ferramentas abaixo tool_choice em vez de apenas uma.
Tipo de ferramenta personalizada Permite saídas de texto bruto (não-json)
lark_tool Permite usar algumas das capacidades de Python lark para uma restrição mais flexível das respostas do modelo

* gpt-5-codex também não suporta reasoning_effortminimal.

Para mais informações, recomendamos também a leitura do guia de receitas GPT-5 da OpenAI e do seu guia de funcionalidades GPT-5.

Nota

  • Para evitar tempos de espera, recomenda-se o modo em segundo plano para o3-pro.
  • o3-pro Atualmente não suporta geração de imagens.

Não Suportado

Os seguintes modelos atualmente não são suportados por modelos de raciocínio:

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

Saída Markdown

Por defeito, os modelos o3-mini e o1 não tentam produzir uma saída que inclua formatação em markdown. Um caso de uso comum em que este comportamento é indesejável é quando se quer que o modelo produza código contido dentro de um bloco de código markdown. Quando o modelo gera saída sem formatação markdown, perdem-se funcionalidades como realce de sintaxe e blocos de código copiáveis em experiências interativas em ambientes de teste. Para ultrapassar este novo comportamento padrão e incentivar a inclusão de markdown nas respostas do modelo, adicione a cadeia Formatting re-enabled ao início da sua mensagem de programador.

Adicionar Formatting re-enabled ao início da sua mensagem de programador não garante que o modelo inclua formatação markdown na resposta, apenas aumenta a probabilidade. Descobrimos através de testes internos que Formatting re-enabled é menos eficaz por si só com o o1 modelo do que com o3-mini.

Para melhorar o desempenho do Formatting re-enabled, pode-se aprimorar ainda mais a introdução da mensagem do programador, o que geralmente resultará no resultado desejado. Em vez de apenas acrescentar Formatting re-enabled ao início da sua mensagem de programador, 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 sua saída esperada, pode ser necessário personalizar ainda mais a sua mensagem inicial de programador para direcionar o seu caso de uso específico.