Поделиться через


Модели логического вывода Azure OpenAI

Модели причин Azure OpenAI предназначены для решения задач по устранению причин и решению проблем с повышенным фокусом и возможностями. Эти модели тратят больше времени на обработку и понимание запроса пользователя, что делает их исключительно сильными в таких областях, как наука, программирование и математика по сравнению с предыдущими итерациями.

Ключевые возможности моделей рассуждений:

  • Сложное создание кода: способен создавать алгоритмы и обрабатывать сложные задачи программирования для поддержки разработчиков.
  • Расширенное решение проблем: идеально подходит для комплексных сеансов мозгового штурма и решения сложных задач.
  • Комплексное сравнение документов: идеально подходит для анализа контрактов, файлов дела или юридических документов для выявления тонких различий.
  • Управление инструкциями и рабочими процессами: особенно эффективно для тех рабочих процессов, которые требуют более коротких контекстов.

Использование

В настоящее время эти модели не поддерживают тот же набор параметров, что и другие модели, использующие API завершения чата.

API завершения чата

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

Усилия в рассуждениях

Замечание

Модели рассуждения имеют reasoning_tokens в качестве части completion_tokens_details в ответе модели. Это скрытые маркеры, которые не возвращаются в составе содержимого ответа сообщения, но используются моделью для создания окончательного ответа на запрос. reasoning_effort может быть задано значение low, mediumили high для всех моделей причин, кроме o1-mini. Модели причин GPT-5 поддерживают новый reasoning_effort параметр minimal. Чем выше параметр усилий, тем дольше модель будет обрабатывать запрос, что обычно приводит к большему количеству reasoning_tokens.

Сообщения разработчика

Функциональные сообщения "role": "developer" разработчика совпадают с системным сообщением.

Добавление сообщения разработчика в предыдущий пример кода будет выглядеть следующим образом:


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

Сводка по причинам

При использовании последних моделей рассуждений с API ответов можно использовать параметр сводной сводки по поводу для получения сводок цепочки мысли модели.

Это важно

Попытка извлечь необработанные рассуждения с помощью методов, отличных от параметра сводки рассуждений, не поддерживается, может нарушить политику допустимого использования и привести к ограничению или приостановке при обнаружении.

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());

Замечание

Даже если этот параметр включен, сводки по соображениям не гарантируются для каждого шага или запроса. Это ожидаемое поведение.

Python Lark

Модели причин серии GPT-5 имеют возможность вызывать новый custom_tool вызов lark_tool. Это средство основано на ларке Python и может использоваться для более гибкого ограничения выходных данных модели.

API ответов на запросы

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

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

Ключ 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))  
  

Выходные данные:

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

Завершение чата

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

Доступность

Доступность по регионам

Модель Регион Ограниченный доступ
gpt-5.1 Восточный регион США 2 и Центральный регион Швеции (Global Standard и DataZone Standard) Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
gpt-5.1-chat Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос на доступ не требуется.
gpt-5.1-codex Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
gpt-5.1-codex-mini Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос на доступ не требуется.
gpt-5-pro Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
gpt-5-codex Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
gpt-5 Доступность модели Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
gpt-5-mini Доступность модели Запрос на доступ не требуется.
gpt-5-nano Доступность модели Запрос на доступ не требуется.
o3-pro Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос доступа: приложение модели ограниченного доступа. Если у вас уже есть доступ к модели ограниченного доступа, запрос не требуется.
codex-mini Восточная часть США2 и Центральная Швеция (глобальный стандарт) Запрос на доступ не требуется.
o4-mini Доступность модели Запрос доступа не требуется для использования основных возможностей этой модели.

Запрос доступа: функция сводки рассуждений о4-mini
o3 Доступность модели Запрос доступа: приложение модели ограниченного доступа
o3-mini Доступность модели. Доступ больше не ограничен для этой модели.
o1 Доступность модели. Доступ больше не ограничен для этой модели.
o1-mini Доступность модели. Запрос на доступ для развертываний Global Standard не требуется.

Развертывания уровня "Стандартный" (региональные) в настоящее время доступны только для определенных клиентов, которым ранее был предоставлен доступ в рамках релиза o1-preview.

Поддержка API и функций

Функция 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
Версия API версия 1 версия 1 версия 1 версия 1 версия 1 версия 1 версия 1 версия 1 версия 1
Сообщения разработчика
Структурированные выходные данные
Окно контекста 400,000

Входные данные: 272 000
Выходные данные: 128 000
128,000

Входные данные: 111 616
Выходные данные: 16 384
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
400,000

Входные данные: 272 000
Выходные данные: 128 000
Усилие на размышление 4 5
Ввод изображения
API завершения чата - - - -
API ответов на запросы
Функции и инструменты
Вызовы параллельных инструментов1 -
max_completion_tokens 2 - - - -
Системные сообщения 3
Сводка по причинам
Стриминг -

1 Вызовы параллельных инструментов не поддерживаются, если задано значение <a0/&a0>.

2 Модели причин будут работать только с max_completion_tokens параметром при использовании API завершения чата. Используйте max_output_tokens с API ответов.

3 Последние модели причин поддерживают системные сообщения, чтобы упростить миграцию. Не следует использовать как сообщение разработчика, так и системное сообщение в одном запросе API.

По умолчанию устанавливается значение 4gpt-5.1reasoning_effortnone. При обновлении предыдущих моделей рассуждений до gpt-5.1, помните, что может потребоваться обновить код, чтобы явно указать уровень усилий для рассуждений, если требуются усилия на рассуждения.

5gpt-5-pro поддерживает только reasoning_efforthigh, это значение является значением по умолчанию, даже если оно не передано явно модели.

НОВЫЕ функции причины GPT-5

Функция Описание
reasoning_effort minimal теперь поддерживается с моделями анализа серии GPT-5. * none поддерживается только для gpt-5.1

Параметры: none, , minimallowmediumhigh
verbosity Новый параметр, предоставляющий более детализированный контроль над степенью краткости выходных данных модели.

Параметры:low, medium, high.
preamble Модели определения последовательности GPT-5 имеют возможность тратить дополнительное время на "мышление" перед выполнением вызова функции или инструмента.

Когда такое планирование происходит, модель может получить представление о шагах планирования в ответе модели с помощью нового объекта, называемого preamble объектом.

Создание преамблировок в ответе модели не гарантируется, хотя вы можете поощрять модель с помощью instructions параметра и передачи содержимого, например "Необходимо тщательно планировать перед каждым вызовом функции. ALWAYS выводит план пользователю перед вызовом любой функции"
разрешенные средства Можно указать несколько инструментов tool_choice вместо одного.
настраиваемый тип инструмента Включает выходные данные необработанного текста (не json)
lark_tool Позволяет использовать некоторые возможности рывка Python для более гибкого ограничения ответов модели

* gpt-5-codex не поддерживает reasoning_effort минимальное число.

Для получения дополнительных сведений мы также рекомендуем ознакомиться с руководством по подготовке книги OpenAI в GPT-5 и их руководстве по функциям GPT-5.

Замечание

  • Чтобы избежать времени ожидания, рекомендуется использовать фоновыйo3-proрежим.
  • o3-pro в настоящее время не поддерживает генерацию изображений.

Не поддерживается

В настоящее время не поддерживаются следующие модели рассуждений:

  • temperature, top_p, presence_penaltyfrequency_penaltylogprobstop_logprobslogit_biasmax_tokens
  • В настоящее время средства apply_patch и shell не поддерживаются. Поддержка этих инструментов с моделями серии gpt-5.1 скоро ожидается.

Выходные данные Markdown

По умолчанию o3-mini и o1 не будут пытаться создавать результат, включающее форматирование markdown. Распространенный вариант использования, когда это поведение нежелательно, если требуется, чтобы модель выводила код, содержащийся в блоке кода Markdown. При создании выходных данных без форматирования markdown вы теряете такие функции, как подсветка синтаксиса и копируемые блоки кода в интерактивных средах для экспериментов. Чтобы переопределить это новое поведение по умолчанию и поощрять включение markdown в ответы модели, добавьте строку Formatting re-enabled в начало сообщения разработчика.

Добавление Formatting re-enabled в начало сообщения разработчика не гарантирует, что модель будет включать форматирование Markdown в ответе, оно лишь увеличивает вероятность этого. Мы обнаружили из внутреннего тестирования, что Formatting re-enabled менее эффективно само по себе с моделью o1, чем с o3-mini.

Чтобы повысить производительность Formatting re-enabled , можно дополнительно увеличить начало сообщения разработчика, которое часто приведет к нужным выходным данным. Вместо того чтобы просто добавить Formatting re-enabled в начало сообщения разработчика, можно поэкспериментировать с добавлением более описательных начальных инструкций, таких как один из приведенных ниже примеров:

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

В зависимости от ожидаемых выходных данных может потребоваться настроить исходное сообщение разработчика для конкретного варианта использования.