Udostępnij za pośrednictwem


Dowiedz się, jak używać odtwarzalnych danych wyjściowych (wersja zapoznawcza)

Domyślnie, jeśli zadajesz model uzupełniania czatu usługi Azure OpenAI, to samo pytanie często otrzymujesz inną odpowiedź. W związku z tym odpowiedź jest uważana za niedeterministyczną. Odtwarzalne dane wyjściowe to nowa funkcja w wersji zapoznawczej, która umożliwia selektywne zmianę domyślnego zachowania, aby pomóc produktowi w bardziej deterministycznych danych wyjściowych.

Obsługa odtwarzalnych danych wyjściowych

Odtwarzalne dane wyjściowe są obecnie obsługiwane tylko w następujących kwestiach:

Obsługiwane modele

Wersja interfejsu API

Obsługa odtwarzalnych danych wyjściowych została po raz pierwszy dodana w wersji interfejsu API 2023-12-01-preview

Przykład

Najpierw wygenerujemy trzy odpowiedzi na to samo pytanie, aby zademonstrować zmienność, która jest wspólna dla odpowiedzi na zakończenie czatu nawet wtedy, gdy inne parametry są takie same:

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

Wyjście

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

Zwróć uwagę, że chociaż każda historia może mieć podobne elementy i niektóre dosłowne powtórzenie, im dłużej odpowiedź idzie dalej, tym bardziej mają tendencję do rozbieżności.

Teraz uruchomimy ten sam kod co poprzednio, ale tym razem usuń komentarz z wiersza dla parametru, który mówi 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

Wyjście

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

Używając tego samego seed parametru 42 dla każdego z naszych trzech żądań, zachowując jednocześnie wszystkie inne parametry tak samo, możemy wygenerować znacznie bardziej spójne wyniki.

Ważne

Determinizm nie jest gwarantowany z odtwarzalnymi danymi wyjściowymi. Nawet w przypadkach, gdy parametr inicjatora i system_fingerprint są takie same w wywołaniach interfejsu API, nie jest obecnie rzadkością, aby nadal obserwować stopień zmienności odpowiedzi. Identyczne wywołania interfejsu API z większymi max_tokens wartościami zwykle powodują mniej deterministyczne odpowiedzi nawet wtedy, gdy parametr inicjuje.

Szczegóły parametru

seed jest opcjonalnym parametrem, który można ustawić na liczbę całkowitą lub null.

Ta funkcja jest dostępna w wersji zapoznawczej. Jeśli zostanie określony, nasz system podejmie najlepsze wysiłki, aby próbkować deterministycznie, tak aby powtarzające się żądania z tym samym inicjatorem i parametrami powinny zwracać ten sam wynik. Determinizm nie jest gwarantowany i należy odwołać się do parametru system_fingerprint odpowiedzi w celu monitorowania zmian w zapleczu.

system_fingerprint jest ciągiem i jest częścią obiektu uzupełniania czatu.

Ten odcisk palca reprezentuje konfigurację zaplecza, z którą działa model.

Można go użyć z parametrem żądania inicjatora, aby zrozumieć, kiedy wprowadzono zmiany zaplecza, które mogą mieć wpływ na determinizm.

Aby wyświetlić pełny obiekt uzupełniania czatu za pomocą system_fingerprintpolecenia , możesz dodać print(response.model_dump_json(indent=2)) go do poprzedniego kodu języka Python obok istniejącej instrukcji print lub $response | convertto-json -depth 5 na końcu przykładu programu PowerShell. Ta zmiana powoduje, że następujące dodatkowe informacje są częścią danych wyjściowych:

Wyjście

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

Uwagi dodatkowe

Jeśli chcesz użyć powtarzalnych danych wyjściowych, musisz ustawić seed tę samą liczbę całkowitą w wywołaniach uzupełniania czatu. Należy również dopasować inne parametry, takie jak temperature, max_tokensitp.