Modelos de razonamiento de Azure OpenAI

Azure modelos de razonamiento de OpenAI están diseñados para abordar tareas de razonamiento y resolución de problemas con un mayor enfoque y capacidad. Estos modelos invierten más tiempo en procesar y comprender la solicitud del usuario, lo que hace que sean excepcionalmente fuertes en áreas como ciencia, codificación y matemáticas en comparación con las iteraciones anteriores.

Funcionalidades clave de los modelos de razonamiento:

  • Compleja generación de código: capaz de generar algoritmos y gestionar tareas avanzadas de codificación para apoyar a los desarrolladores.
  • Solución avanzada de problemas: ideal para sesiones completas de lluvia de ideas y abordar desafíos multifacéticos.
  • Comparación compleja de documentos: perfecto para analizar contratos, archivos de casos o documentos legales para identificar diferencias sutiles.
  • Seguimiento de Instrucciones y la Administración de flujos de trabajo: especialmente eficaz para administrar flujos de trabajo que requieren contextos más cortos.

Requisitos previos

  • Un modelo de razonamiento de OpenAI implementado en Azure.

  • Si usa los ejemplos de REST:

    • Instale el CLI de Azure. Para obtener más información, vea Install the CLI de Azure.

    • Inicie sesión con az loginy, a continuación, genere un token de portador y almacénelo en la variable de AZURE_OPENAI_AUTH_TOKEN entorno.

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

Uso

Actualmente, estos modelos no admiten el mismo conjunto de parámetros que otros modelos que usan la API de finalizaciones de chat.

API de finalizaciones 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}");

Esfuerzo de razonamiento

Nota

Los modelos de razonamiento tienen reasoning_tokens como parte de completion_tokens_details en la respuesta del modelo. Estos son tokens ocultos que no se devuelven como parte del contenido de respuesta del mensaje, pero que el modelo usa para ayudar a generar una respuesta final a la solicitud. reasoning_effort se puede establecer en low, mediumo high para todos los modelos de razonamiento, excepto o1-mini. Cuanto mayor sea la configuración de esfuerzo, más tiempo pasará el modelo procesando la solicitud, lo que generalmente dará lugar a un mayor número de reasoning_tokens.

Mensajes del desarrollador

Los mensajes de desarrollador ("role": "developer") son funcionalmente los mismos que los mensajes del sistema.

Agregar un mensaje de desarrollador al ejemplo de código anterior tendría el siguiente aspecto:


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}");

Resumen de razonamiento

Al usar los modelos de razonamiento más recientes con la API de respuestas , puede usar el parámetro de resumen de razonamiento para recibir resúmenes de la cadena de razonamiento de pensamiento del modelo.

Importante

No se admiten los intentos de extraer el razonamiento sin procesar a través de métodos distintos del parámetro de resumen de razonamiento, ya que puede infringir la Directiva de uso aceptable y dar lugar a limitaciones o suspensiones cuando se detecten.

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

Incluso cuando está habilitado, no se garantiza que se generen resúmenes de razonamiento para cada paso o solicitud. Este es el comportamiento esperado.

Python lark

Los modelos de razonamiento de la serie GPT-5 tienen la capacidad de llamar a un nuevo custom_tool denominado lark_tool. Esta herramienta se basa en Python lark y se puede usar para una restricción más flexible de la salida del modelo.

API de respuestas

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

Clave 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))  
  

Salida:

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

Finalizaciones 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"
}

Disponibilidad

Disponibilidad de regiones

Modelo Región Acceso limitado
gpt-chat-latest Estándar global:
Este de EE. UU. 2
Centro de Suecia
Centro-sur de EE. UU.
Centro de Polonia
No se necesita ninguna solicitud de acceso.
gpt-5.5 Disponibilidad del modelo No se necesita ninguna solicitud de acceso. Solicitud de cuota necesaria en función del nivel de cuota. Las suscripciones de nivel 5 y 6 tienen cuota de forma predeterminada.
gpt-5.4-mini Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
gpt-5.4-nano Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
gpt-5.4-pro Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.4 Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.3-codex Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.2-codex Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.2 Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.1-codex-max Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.1 Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.1-chat Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
gpt-5.1-codex Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5.1-codex-mini Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
gpt-5-pro Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5-codex Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5 Disponibilidad del modelo El acceso ya no está restringido para este modelo.
gpt-5-mini Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
gpt-5-nano Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
o3-pro Disponibilidad del modelo El acceso ya no está restringido para este modelo.
codex-mini Disponibilidad del modelo No se necesita ninguna solicitud de acceso.
o4-mini Disponibilidad del modelo El acceso ya no está restringido para este modelo.
o3 Disponibilidad del modelo El acceso ya no está restringido para este modelo.
o3-mini Disponibilidad del modelo. El acceso ya no está restringido para este modelo.
o1 Disponibilidad del modelo. El acceso ya no está restringido para este modelo.

API y soporte de características

Característica 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
Mensajes de desarrollador
Salidas estructuradas
Ventana de contexto 1,050,000

Entrada:
922,000
Salida:
128,000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
1,050,000

Entrada:
922,000
Salida:
128,000
1,050,000

Entrada:
922,000
Salida:
128,000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
128,000

Entrada: 111 616
Salida: 16 384
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
400,000

Entrada: 272 000
Salida: 128 000
Esfuerzo de razonamiento7 6 4 5
Entrada de imagen
API de finalizaciones de chat - - - - - - - -
API de respuestas
Funciones y herramientas
Llamadas a herramientas paralelas1 - -
max_completion_tokens 2 - - - - - - - -
Mensajes del sistema 3
Resumen de razonamiento
Transmisión en directo -

1 No se admiten llamadas a herramientas paralelas cuando reasoning_effort se establece en minimal

2 Los modelos de razonamiento solo funcionarán con el max_completion_tokens parámetro al usar la API de finalizaciones de chat. Use max_output_tokens con la API de respuestas.

3 Los modelos de razonamiento más recientes admiten mensajes del sistema para facilitar la migración. No debe usar tanto un mensaje de desarrollador como un mensaje del sistema en la misma solicitud de API.

4gpt-5.1reasoning_effort tiene nonecomo valor predeterminado . Al actualizar desde modelos de razonamiento anteriores a gpt-5.1, tenga en cuenta que es posible que necesite actualizar su código para pasar explícitamente un nivel de reasoning_effort si desea que se realice.

5gpt-5-pro solo admite reasoning_efforthigh, este es el valor predeterminado incluso cuando no se pasa explícitamente al modelo.

6gpt-5.1-codex-max agrega soporte para un nuevo reasoning_effort nivel de xhigh que es el nivel más alto en el que se puede establecer el esfuerzo de razonamiento.

7gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-maxy gpt-5.1-codex-mini admiten 'None' como un valor para el reasoning_effort parámetro . Si desea usar estos modelos para generar respuestas sin razonamiento, establezca reasoning_effort='None'. Esta configuración puede aumentar la velocidad.

Nuevas características de razonamiento GPT-5

Característica Descripción
reasoning_effort xhigh se admite solo con gpt-5.1-codex-max
minimal se admite solo con los modelos de razonamiento originales de GPT-5. minimal no se admite con gpt-5.1 o mayor *

Opciones: none, minimal, low, medium, , high, xhigh
verbosity Un nuevo parámetro que proporciona un control más pormenorizado sobre cómo será concisa la salida del modelo.

Options:low, medium, high.
preamble Los modelos de razonamiento de la serie GPT-5 tienen la capacidad de dedicar tiempo adicional "pensando" antes de ejecutar una llamada a función o herramienta.

Cuando se produce este planeamiento, el modelo puede proporcionar información sobre los pasos de planeación de la respuesta del modelo a través de un nuevo objeto denominado preamble objeto .

No se garantiza la generación de preámbulos en la respuesta del modelo, aunque puede animar el modelo mediante el instructions parámetro y pasar contenido como "Debe planear ampliamente antes de cada llamada de función. SIEMPRE muestra tu plan al usuario antes de llamar a cualquier función.
herramientas permitidas Puede especificar varias herramientas en tool_choice en lugar de solo una.
tipo de herramienta personalizado Habilita los resultados de texto sin formato (no JSON)
lark_tool Permite usar algunas de las funcionalidades de Python lark para una restricción más flexible de las respuestas del modelo.

* gpt-5-codex tampoco admite reasoning_effortminimal.

Para obtener más información, recomendamos leer el manual de indicaciones GPT-5 de OpenAI y su guía de funciones de GPT-5.

Nota

  • Para evitar tiempos de espera, se recomienda el modo en segundo plano para o3-pro.
  • o3-pro no admite actualmente la generación de imágenes.

No compatible

Actualmente, no se admiten los siguientes modelos de razonamiento:

  • temperature, top_p, presence_penalty, frequency_penalty, logprobs, top_logprobs, , logit_biasmax_tokens

Salida de Markdown

De forma predeterminada, los o3-mini modelos y o1 no intentarán generar resultados que incluyan formato markdown. Un caso de uso común en el que este comportamiento no es deseable es cuando se quiere que el modelo produzca código contenido dentro de un bloque de código markdown. Cuando el modelo genera una salida sin formato Markdown, pierde características, como el resaltado de sintaxis y bloques de código que se pueden copiar en experiencias interactivas del área de juegos. Para invalidar este nuevo comportamiento predeterminado y fomentar la inclusión de Markdown en las respuestas del modelo, agregue la cadena Formatting re-enabled al principio del mensaje del desarrollador.

Agregar Formatting re-enabled al principio del mensaje del desarrollador no garantiza que el modelo incluya formato markdown en su respuesta, solo aumenta la probabilidad. Hemos encontrado a partir de pruebas internas que Formatting re-enabled es menos eficaz por sí mismo con o1 modelo que con o3-mini.

Para mejorar el rendimiento de Formatting re-enabled , puede aumentar aún más el principio del mensaje del desarrollador, lo que a menudo dará lugar a la salida deseada. En lugar de agregar Formatting re-enabled al principio del mensaje del desarrollador, puede experimentar con la adición de una instrucción inicial más descriptiva, como uno de los ejemplos siguientes:

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

Dependiendo de la salida esperada, es posible que tenga que personalizar el mensaje inicial del desarrollador para dirigirse a su caso de uso específico.