Узнайте, как использовать воспроизводимые выходные данные (предварительная версия)

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

Поддержка воспроизводимых выходных данных

Воспроизводимые выходные данные в настоящее время поддерживаются только в следующих случаях:

Поддерживаемые модели

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-preview)
  • gpt-4 (0125-preview)
  • gpt-4 (turbo-2024-04-09)
  • gpt-4o-mini (2024-07-18)
  • gpt-4o (2024-05-13)

Ознакомьтесь со страницей моделей для получения последних сведений о региональной доступности модели.

Версия API

Поддержка воспроизводимых выходных данных была добавлена в версию API 2023-12-01-preview

Пример

Сначала мы создадим три ответа на один и тот же вопрос, чтобы продемонстрировать вариативность, которая распространена для ответов завершения чата, даже если другие параметры одинаковы:

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

for i in range(3):
  print(f'Story Version {i + 1}\n---')
    
  response = client.chat.completions.create(
    model="gpt-35-turbo-0125", # Model = should match the deployment name you chose for your 0125-preview model deployment
    #seed=42,
    temperature=0.7,
    max_tokens =50, 
    messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Tell me a story about how the universe began?"}
    ]
  )
  
  print(response.choices[0].message.content)
  print("---\n")
  
  del response

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

Story Version 1
---
Once upon a time, before there was time, there was nothing but a vast emptiness. In this emptiness, there existed a tiny, infinitely dense point of energy. This point contained all the potential for the universe as we know it. And
---

Story Version 2
---
Once upon a time, long before the existence of time itself, there was nothing but darkness and silence. The universe lay dormant, a vast expanse of emptiness waiting to be awakened. And then, in a moment that defies comprehension, there
---

Story Version 3
---
Once upon a time, before time even existed, there was nothing but darkness and stillness. In this vast emptiness, there was a tiny speck of unimaginable energy and potential. This speck held within it all the elements that would come

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

Теперь мы будем запускать тот же код, что и раньше, но на этот раз раскомментируйте строку для параметра, который говорит seed=42

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

for i in range(3):
  print(f'Story Version {i + 1}\n---')
    
  response = client.chat.completions.create(
    model="gpt-35-turbo-0125", # Model = should match the deployment name you chose for your 0125-preview model deployment
    seed=42,
    temperature=0.7,
    max_tokens =50, 
    messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Tell me a story about how the universe began?"}
    ]
  )
  
  print(response.choices[0].message.content)
  print("---\n")
  
  del response

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

Story Version 1
---
In the beginning, there was nothing but darkness and silence. Then, suddenly, a tiny point of light appeared. This point of light contained all the energy and matter that would eventually form the entire universe. With a massive explosion known as the Big Bang
---

Story Version 2
---
In the beginning, there was nothing but darkness and silence. Then, suddenly, a tiny point of light appeared. This point of light contained all the energy and matter that would eventually form the entire universe. With a massive explosion known as the Big Bang
---

Story Version 3
---
In the beginning, there was nothing but darkness and silence. Then, suddenly, a tiny point of light appeared. This was the moment when the universe was born.

The point of light began to expand rapidly, creating space and time as it grew.
---

Используя один и тот же seed параметр 42 для каждого из трех запросов, сохраняя все остальные параметры одинаковыми, мы можем получить гораздо более согласованные результаты.

Внимание

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

Сведения о параметрах

seed является необязательным параметром, который может быть задан целым числом или null.

Эта функция предоставляется в предварительной версии. Если задано, наша система будет делать лучшие усилия для выборки детерминированного, таким образом, что повторяющиеся запросы с одинаковым начальным значением и параметрами должны возвращать тот же результат. Детерминированность не гарантируется, и вы должны ссылаться на system_fingerprint параметр ответа для отслеживания изменений в серверной части.

system_fingerprint является строкой и является частью объекта завершения чата.

Этот отпечаток представляет конфигурацию серверной части, с которой работает модель.

Его можно использовать с параметром начального запроса, чтобы понять, когда были внесены внутренние изменения, которые могут повлиять на детерминированность.

Чтобы просмотреть полный объект завершения чата, можно добавить print(response.model_dump_json(indent=2)) в предыдущий код Python рядом с system_fingerprintсуществующей инструкцией печати или $response | convertto-json -depth 5 в конце примера PowerShell. Это изменение приводит к тому, что в выходные данные входят следующие дополнительные сведения:

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

{
  "id": "chatcmpl-8LmLRatZxp8wsx07KGLKQF0b8Zez3",
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "message": {
        "content": "In the beginning, there was nothing but a vast emptiness, a void without form or substance. Then, from this nothingness, a singular event occurred that would change the course of existence forever—The Big Bang.\n\nAround 13.8 billion years ago, an infinitely hot and dense point, no larger than a single atom, began to expand at an inconceivable speed. This was the birth of our universe, a moment where time and space came into being. As this primordial fireball grew, it cooled, and the fundamental forces that govern the cosmos—gravity, electromagnetism, and the strong and weak nuclear forces—began to take shape.\n\nMatter coalesced into the simplest elements, hydrogen and helium, which later formed vast clouds in the expanding universe. These clouds, driven by the force of gravity, began to collapse in on themselves, creating the first stars. The stars were crucibles of nuclear fusion, forging heavier elements like carbon, nitrogen, and oxygen",
        "role": "assistant",
        "function_call": null,
        "tool_calls": null
      },
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ],
  "created": 1700201417,
  "model": "gpt-4",
  "object": "chat.completion",
  "system_fingerprint": "fp_50a4261de5",
  "usage": {
    "completion_tokens": 200,
    "prompt_tokens": 27,
    "total_tokens": 227
  },
  "prompt_filter_results": [
    {
      "prompt_index": 0,
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ]
}

Дополнительные рекомендации

Если вы хотите использовать воспроизводимые выходные данные, необходимо задать seed одно целое число для вызовов завершения чата. Вы также должны соответствовать любым другим параметрам, таким как temperature, max_tokensи т. д.