Partager via


Modèles de raisonnement Azure OpenAI

Les modèles de raisonnement Azure OpenAI sont conçus pour s’attaquer aux tâches de raisonnement et de résolution de problèmes avec une concentration et des capacités accrues. Ces modèles passent plus de temps à traiter et à comprendre la requête de l’utilisateur, ce qui les rend exceptionnellement forts dans des domaines tels que la science, le codage et les mathématiques par rapport aux itérations précédentes.

Principales capacités des modèles de raisonnement :

  • Génération de code complexe : capable de générer des algorithmes et de gérer des tâches de codage avancées pour prendre en charge les développeurs.
  • Résolution avancée des problèmes : idéal pour les sessions complètes de brainstorming et pour relever les défis multidimensionnels.
  • Comparaison de documents complexes : idéal pour l’analyse des contrats, des fichiers de cas ou des documents juridiques afin d’identifier les différences subtiles.
  • Suivi des instructions et gestion des processus : particulièrement efficace pour gérer des processus nécessitant des contextes plus courts.

Utilisation

Actuellement, ces modèles ne prennent pas en charge le même ensemble de paramètres que les autres modèles qui utilisent l’API de complétions de conversation.

API de complétions 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://cognitiveservices.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}");

Effort de raisonnement

Remarque

Les modèles de raisonnement ont reasoning_tokens en tant que partie de completion_tokens_details dans la réponse du modèle. Il s’agit de jetons masqués qui ne sont pas retournés dans le cadre du contenu de réponse de message, mais qui sont utilisés par le modèle pour aider à générer une réponse finalisée à votre demande. reasoning_effort peut être défini sur low, mediumou high pour tous les modèles de raisonnement à l’exception o1-mini. Les modèles de raisonnement GPT-5 prennent en charge un nouveau reasoning_effort paramètre de minimal. Plus le paramètre d’effort est élevé, plus le modèle passe du temps à traiter la demande, ce qui devrait entraîner un plus grand nombre de reasoning_tokens.

Messages de développeur

D’un point de vue fonctionnel, les messages de développeur "role": "developer" sont identiques aux messages système.

L’ajout d’un message de développeur à l’exemple de code précédent devrait ressembler à ceci :


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://cognitiveservices.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}");

Résumé du raisonnement

Lorsque vous utilisez les derniers modèles de raisonnement avec l’API Réponses , vous pouvez utiliser le paramètre de résumé du raisonnement pour recevoir des résumés de la chaîne de raisonnement de pensée du modèle.

Important

La tentative d’extraction du raisonnement brut par le biais de méthodes autres que le paramètre de résumé du raisonnement n’est pas prise en charge, peut violer la stratégie d’utilisation acceptable et peut entraîner une limitation ou une suspension lorsqu’elle est détectée.

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://cognitiveservices.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());

Remarque

Même si cette option est activée, les résumés de raisonnement ne sont pas garantis pour chaque étape/requête. Ce comportement est normal.

Lark Python

Les modèles de raisonnement de série GPT-5 ont la possibilité d’appeler un nouveau custom_tool appelé lark_tool. Cet outil est basé sur lark Python et peut être utilisé pour une limitation plus flexible de la sortie du modèle.

API Responses

{
  "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://cognitiveservices.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))  

Clé 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))  
  

Sortie:

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

Complétions de conversation

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

Disponibilité

Disponibilité de la région

Modèle Région Accès limité
gpt-5.2-codex USA Est 2 et Suède Centre (Standard global) Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5.2 Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5.1-codex-max Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5.1 Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5.1-chat Disponibilité du modèle Aucune demande d’accès n’est nécessaire.
gpt-5.1-codex Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5.1-codex-mini Disponibilité du modèle Aucune demande d’accès n’est nécessaire.
gpt-5-pro Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5-codex Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5 Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
gpt-5-mini Disponibilité du modèle Aucune demande d’accès n’est nécessaire.
gpt-5-nano Disponibilité du modèle Aucune demande d’accès n’est nécessaire.
o3-pro Disponibilité du modèle Demander l'accès à l'application du modèle d'accès limité. Si vous avez déjà accès à un modèle d’accès limité, aucune demande n’est requise.
codex-mini Disponibilité du modèle Aucune demande d’accès n’est nécessaire.
o4-mini Disponibilité du modèle Aucune demande d’accès n’est nécessaire pour utiliser les fonctionnalités principales de ce modèle.

Demander l’accès : fonctionnalité récapitulative de raisonnement o4-mini
o3 Disponibilité du modèle Demander l’accès : application de modèle d’accès limité
o3-mini Disponibilité du modèle. L’accès n’est plus restreint pour ce modèle.
o1 Disponibilité du modèle. L’accès n’est plus restreint pour ce modèle.

Prise en charge des fonctionnalités et des API

Fonctionnalité gpt-5.2-codex gpt-5.2 gpt-5.1-codex-max 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
Version de l'API v1 v1 v1 v1 v1 v1 v1 v1 v1 v1 v1 v1
Messages de développeur
Sorties structurées
Fenêtre contextuelle 400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
128,000

Entrée : 111 616
Sortie : 16 384
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
400,000

Entrée : 272 000
Sortie : 128 000
Effort de raisonnement7 6 4 5
Entrée d’image
API de saisie semi-automatique de conversation - - - - -
API Responses
Fonctions/outils
Appels d'outils parallèles1 -
max_completion_tokens 2 - - - - - -
Messages système 3
Résumé du raisonnement
Diffusion en continu -

1 Appels d’outils parallèles ne sont pas pris en charge lorsqu’ils reasoning_effort sont définis sur minimal

2 Les modèles de raisonnement ne fonctionneront qu'avec le paramètre max_completion_tokens, lors de l'utilisation de l'API de complétion de chat. Utiliser max_output_tokens avec l’API Réponses.

3 Les derniers modèles de raisonnement prennent en charge les messages système pour faciliter la migration. Vous ne devez pas utiliser à la fois un message de développeur et un message système dans la même requête d’API.

4gpt-5.1reasoning_effort est défini par défaut sur none. Lors de la mise à niveau à partir de modèles de raisonnement antérieurs vers gpt-5.1, gardez à l’esprit que vous devrez peut-être mettre à jour votre code pour passer explicitement un niveau reasoning_effort si vous voulez que le reasoning_effort se produise.

5gpt-5-pro prend uniquement en charge reasoning_efforthigh, il s’agit de la valeur par défaut, même si elle n’est pas transmise explicitement au modèle.

6gpt-5.1-codex-max ajoute la prise en charge d’un nouveau niveau de reasoning_effortxhigh qui est le niveau le plus élevé auquel on peut définir l’effort de raisonnement.

7gpt-5.2, , gpt-5.1gpt-5.1-codex, gpt-5.1-codex-max, et gpt-5.1-codex-mini prend en charge 'None' comme valeur pour le reasoning_effort paramètre. Si vous souhaitez utiliser ces modèles pour générer des réponses sans raisonnement, définissez reasoning_effort='None'. Ce paramètre peut augmenter la vitesse.

NOUVELLES fonctionnalités de raisonnement GPT-5

Caractéristique Descriptif
reasoning_effort xhigh est uniquement pris en charge avec gpt-5.1-codex-max
minimal est désormais pris en charge avec les modèles de raisonnement de série GPT-5.*
none n’est pris en charge que pour gpt-5.1

Options : none, minimal, low, medium, high, xhigh
verbosity Un nouveau paramètre fournissant un contrôle plus précis sur la façon dont la sortie du modèle sera concise.

Options :low, medium, high.
preamble Les modèles de raisonnement de la série GPT-5 ont la capacité de passer du temps supplémentaire à « réfléchir » avant d'exécuter un appel de fonction/outil.

Lorsque cette planification se produit, le modèle peut fournir un aperçu des étapes de planification dans la réponse du modèle via un nouvel objet appelé objet preamble.

La génération de préambules dans la réponse du modèle n'est pas garantie, bien que vous puissiez encourager le modèle en utilisant le paramètre instructions et en transmettant du contenu comme « Vous DEVEZ planifier en profondeur avant chaque appel de fonction. Envoyez TOUJOURS votre plan à l'utilisateur avant d'appeler une fonction"
outils autorisés Vous pouvez spécifier plusieurs outils sous tool_choice au lieu d’un seul outil.
type d’outil personnalisé Active les sorties de texte brut (non-json)
lark_tool Vous permet d’utiliser certaines des fonctionnalités de Lark Python pour une limitation plus flexible des réponses de modèle

* gpt-5-codex ne prend pas en charge reasoning_effort la configuration minimale.

Pour plus d'informations, nous vous recommandons également de lire le guide du livre de recettes d'invite GPT-5 d'OpenAI et leur guide des fonctionnalités GPT-5.

Remarque

  • Pour éviter les délais d’expiration, le mode en arrière-plan est recommandé pour o3-pro.
  • o3-pro ne prend actuellement pas en charge la génération d’images.

Non pris en charge

Actuellement, les éléments suivants ne sont pas pris en charge avec les modèles de raisonnement :

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

Sortie Markdown

Par défaut, les modèles o3-mini et o1 ne tenteront pas de produire une sortie incluant un formatage Markdown. Un cas d'utilisation courant où ce comportement est indésirable est lorsque vous souhaitez que le modèle génère du code contenu dans un bloc de code Markdown. Lorsque le modèle génère une sortie sans formatage Markdown, vous perdez des fonctionnalités telles que la coloration syntaxique et les blocs de code copiables dans les expériences de jeu interactives. Pour remplacer ce nouveau comportement par défaut et encourager l’inclusion de Markdown dans les réponses du modèle, ajoutez la chaîne Formatting re-enabled au début de votre message de développeur.

L'ajout de Formatting re-enabled au début de votre message de développeur ne garantit pas que le modèle inclura le formatage Markdown dans sa réponse, cela augmente seulement la probabilité. Nous avons constaté à partir de tests internes que Formatting re-enabled est moins efficace par lui-même avec le modèle o1 que avec o3-mini.

Pour améliorer les performances de Formatting re-enabled vous pouvez augmenter davantage le début du message du développeur, ce qui entraînera souvent la sortie souhaitée. Au lieu d’ajouter simplement Formatting re-enabled au début de votre message de développeur, vous pouvez expérimenter l’ajout d’une instruction initiale plus descriptive comme l’un des exemples ci-dessous :

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

En fonction du résultat attendu, vous devrez peut-être personnaliser davantage votre message de développeur initial pour cibler votre cas d'utilisation spécifique.