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


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

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

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

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

Доступность

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

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

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

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

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

Функция codex-mini, 2025-05-16 o3-pro, 2025-06-10 o4-mini, 2025-04-16 o3, 2025-04-16 o3-mini, 2025-01-31 o1, 2024-12-17 o1-preview, 2024-09-12 o1-mini, 2024-09-12
Версия API 2025-04-01-preview > предварительная версия 1 2025-04-01-preview > предварительная версия 1 2025-04-01-preview 2025-04-01-preview 2024-12-01-preview или позже
2025-03-01-preview (Рекомендуется)
2024-12-01-preview или позже
2025-03-01-preview (Рекомендуется)
2024-09-01-preview или позже
2025-03-01-preview (Рекомендуется)
2024-09-01-preview или позже
2025-03-01-preview (Рекомендуется)
Сообщения разработчика - -
Структурированные выходные данные - -
Окно контекста Входные данные: 200 000
Результат: 100 000
Входные данные: 200 000
Результат: 100 000
Входные данные: 200 000
Результат: 100 000
Входные данные: 200 000
Результат: 100 000
Входные данные: 200 000
Результат: 100 000
Входные данные: 200 000
Результат: 100 000
Вход: 128 000
Выход: 32 768
Вход: 128 000
Результат: 65 536
Усилие на размышление - -
Ввод изображения - - -
API завершения чата - -
API ответов на запросы - - - -
Функции и инструменты - -
Параллельные вызовы инструментов - - - - - - - -
max_completion_tokens 1
Системные сообщения 2 - -
Сводка по причинам3 - - - - -
Потоковая передача 4 - - - -

1 Модели причин будут работать только с параметром max_completion_tokens .

2 Последняя модель серии o* поддерживает системные сообщения, чтобы упростить миграцию. При использовании системного сообщения с o4-mini, o3o3-miniи o1 оно будет рассматриваться как сообщение разработчика. Не следует использовать как сообщение разработчика, так и системное сообщение в одном запросе API. 3 Доступ к сводке цепочки рассуждений ограничен и доступен только для o3 и o4-mini. Трансляция для доступна только ограниченному кругу пользователей.

Замечание

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

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

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

  • temperature, top_p, presence_penaltyfrequency_penaltylogprobstop_logprobslogit_biasmax_tokens

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

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

Вам потребуется обновить клиентскую библиотеку OpenAI для доступа к последним параметрам.

pip install openai --upgrade

Если вы не знакомы с использованием идентификатора Microsoft Entra для проверки подлинности, см. инструкции по настройке Azure OpenAI в модели Azure AI Foundry с проверкой подлинности Microsoft Entra ID.

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

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  azure_ad_token_provider=token_provider,
  api_version="2025-03-01-preview"
)

response = client.chat.completions.create(
    model="o1-new", # replace with the model deployment name of your o1-preview, or o1-mini model
    messages=[
        {"role": "user", "content": "What steps should I think about when writing my first Python API?"},
    ],
    max_completion_tokens = 5000

)

print(response.model_dump_json(indent=2))

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

{
  "id": "chatcmpl-AEj7pKFoiTqDPHuxOcirA9KIvf3yz",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "Writing your first Python API is an exciting step in developing software that can communicate with other applications. An API (Application Programming Interface) allows different software systems to interact with each other, enabling data exchange and functionality sharing. Here are the steps you should consider when creating your first Python API...truncated for brevity.",
        "refusal": null,
        "role": "assistant",
        "function_call": null,
        "tool_calls": null
      },
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "protected_material_code": {
          "filtered": false,
          "detected": false
        },
        "protected_material_text": {
          "filtered": false,
          "detected": false
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ],
  "created": 1728073417,
  "model": "o1-2024-12-17",
  "object": "chat.completion",
  "service_tier": null,
  "system_fingerprint": "fp_503a95a7d8",
  "usage": {
    "completion_tokens": 1843,
    "prompt_tokens": 20,
    "total_tokens": 1863,
    "completion_tokens_details": {
      "audio_tokens": null,
      "reasoning_tokens": 448
    },
    "prompt_tokens_details": {
      "audio_tokens": null,
      "cached_tokens": 0
    }
  },
  "prompt_filter_results": [
    {
      "prompt_index": 0,
      "content_filter_results": {
        "custom_blocklists": {
          "filtered": false
        },
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "jailbreak": {
          "filtered": false,
          "detected": false
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ]
}

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

Замечание

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

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

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

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

Вам потребуется обновить клиентскую библиотеку OpenAI для доступа к последним параметрам.

pip install openai --upgrade

Если вы не знакомы с использованием идентификатора Microsoft Entra для проверки подлинности, см. инструкции по настройке Azure OpenAI с проверкой подлинности Microsoft Entra ID.

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

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  azure_ad_token_provider=token_provider,
  api_version="2025-03-01-preview"
)

response = client.chat.completions.create(
    model="o1-new", # replace with the model deployment name of your o1-preview, or o1-mini model
    messages=[
        {"role": "developer","content": "You are a helpful assistant."}, # optional equivalent to a system message for reasoning models 
        {"role": "user", "content": "What steps should I think about when writing my first Python API?"},
    ],
    max_completion_tokens = 5000,
    reasoning_effort = "medium" # low, medium, or high

)

print(response.model_dump_json(indent=2))

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

При использовании последних o3 и o4-mini моделей с API ответов можно использовать параметр обобщения для получения сводок умозаключений модели по цепочке рассуждений. Этот параметр может иметь autoзначение , conciseили detailed. Для доступа к этой функции требуется запросить доступ.

Замечание

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

Вам потребуется обновить клиентскую библиотеку OpenAI для доступа к последним параметрам.

pip install openai --upgrade
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  azure_ad_token_provider=token_provider,
  api_version="preview"
)

response = client.responses.create(
    input="Tell me about the curious case of neural text degeneration",
    model="o4-mini", # replace with model deployment name
    reasoning={
        "effort": "medium",
        "summary": "detailed" # auto, concise, or detailed (currently only supported with o4-mini and o3)
    }
)

print(response.model_dump_json(indent=2))
{
  "id": "resp_68007e26b2cc8190b83361014f3a78c50ae9b88522c3ad24",
  "created_at": 1744862758.0,
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "model": "o4-mini",
  "object": "response",
  "output": [
    {
      "id": "rs_68007e2773bc8190b5b8089949bfe13a0ae9b88522c3ad24",
      "summary": [
        {
          "text": "**Summarizing neural text degeneration**\n\nThe user's asking about \"The Curious Case of Neural Text Degeneration,\" a paper by Ari Holtzman et al. from 2020. It explains how certain decoding strategies produce repetitive and dull text. In contrast, methods like nucleus sampling yield more coherent and diverse outputs. The authors introduce metrics like surprisal and distinct-n for evaluation and suggest that maximum likelihood decoding often favors generic continuations, leading to loops and repetitive patterns in longer texts. They promote sampling from truncated distributions for improved text quality.",
          "type": "summary_text"
        },
        {
          "text": "**Explaining nucleus sampling**\n\nThe authors propose nucleus sampling, which captures a specified mass of the predictive distribution, improving metrics such as coherence and diversity. They identify a \"sudden drop\" phenomenon in token probabilities, where a few tokens dominate, leading to a long tail. By truncating this at a cumulative probability threshold, they aim to enhance text quality compared to top-k sampling. Their evaluations include human assessments, showing better results in terms of BLEU scores and distinct-n measures. Overall, they highlight how decoding strategies influence quality and recommend adaptive techniques for improved outcomes.",
          "type": "summary_text"
        }
      ],
      "type": "reasoning",
      "status": null
    },
    {
      "id": "msg_68007e35c44881908cb4651b8e9972300ae9b88522c3ad24",
      "content": [
        {
          "annotations": [],
          "text": "Researchers first became aware that neural language models, when used to generate long stretches of text with standard “maximum‐likelihood” decoding (greedy search, beam search, etc.), often produce bland, repetitive or looping output. The 2020 paper “The Curious Case of Neural Text Degeneration” (Holtzman et al.) analyzes this failure mode and proposes a simple fix—nucleus (top‑p) sampling—that dramatically improves output quality.\n\n1. The Problem: Degeneration  \n   • With greedy or beam search, models tend to pick very high‑probability tokens over and over, leading to loops (“the the the…”) or generic, dull continuations.  \n   • Even sampling with a fixed top‑k (e.g. always sample from the 40 most likely tokens) can be suboptimal: if the model’s probability mass is skewed, k may be too small (overly repetitive) or too large (introducing incoherence).\n\n2. Why It Happens: Distributional Peakedness  \n   • At each time step the model’s predicted next‐token distribution often has one or two very high‑probability tokens, then a long tail of low‑probability tokens.  \n   • Maximum‐likelihood decoding zeroes in on the peak, collapsing diversity.  \n   • Uniform sampling over a large k allows low‑probability “wild” tokens, harming coherence.\n\n3. The Fix: Nucleus (Top‑p) Sampling  \n   • Rather than fixing k, dynamically truncate the distribution to the smallest set of tokens whose cumulative probability ≥ p (e.g. p=0.9).  \n   • Then renormalize and sample from that “nucleus.”  \n   • This keeps only the “plausible” mass and discards the improbable tail, adapting to each context.\n\n4. Empirical Findings  \n   • Automatic metrics (distinct‑n, repetition rates) and human evaluations show nucleus sampling yields more diverse, coherent, on‑topic text than greedy/beam or fixed top‑k.  \n   • It also outperforms simple temperature scaling (raising logits to 1/T) because it adapts to changes in the distribution’s shape.\n\n5. Takeaways for Practitioners  \n   • Don’t default to beam search for open-ended generation—its high likelihood doesn’t mean high quality.  \n   • Use nucleus sampling (p between 0.8 and 0.95) for a balance of diversity and coherence.  \n   • Monitor repetition and distinct‑n scores if you need automatic sanity checks.\n\nIn short, “neural text degeneration” is the tendency of likelihood‐maximizing decoders to produce dull or looping text. By recognizing that the shape of the model’s probability distribution varies wildly from step to step, nucleus sampling provides an elegant, adaptive way to maintain both coherence and diversity in generated text.",
          "type": "output_text"
        }
      ],
      "role": "assistant",
      "status": "completed",
      "type": "message"
    }
  ],
  "parallel_tool_calls": true,
  "temperature": 1.0,
  "tool_choice": "auto",
  "tools": [],
  "top_p": 1.0,
  "max_output_tokens": null,
  "previous_response_id": null,
  "reasoning": {
    "effort": "medium",
    "generate_summary": null,
    "summary": "detailed"
  },
  "status": "completed",
  "text": {
    "format": {
      "type": "text"
    }
  },
  "truncation": "disabled",
  "usage": {
    "input_tokens": 16,
    "output_tokens": 974,
    "output_tokens_details": {
      "reasoning_tokens": 384
    },
    "total_tokens": 990,
    "input_tokens_details": {
      "cached_tokens": 0
    }
  },
  "user": null,
  "store": true
}

Выходные данные 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.

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