Share via


Erfahren Sie, wie Sie reproduzierbare Ausgabe verwenden (Vorschau)

Wenn Sie einem Azure OpenAI Chat Completion-Modell dieselbe Frage mehrmals stellen, werden Sie wahrscheinlich eine andere Antwort erhalten. Die Antworten werden daher als nicht deterministisch betrachtet. Die reproduzierbare Ausgabe ist eine neue Previewfunktion, mit der Sie das Standardverhalten selektiv ändern können, um das Erzeugen von deterministischeren Ausgaben zu unterstützen.

Reproduzierbare Ausgabeunterstützung

Die reproduzierbare Ausgabe wird derzeit nur mit folgendem unterstützt:

Unterstützte Modelle

API-Version

Die Unterstützung für reproduzierbare Ausgabe wurde zuerst in der API-Version 2023-12-01-preview hinzugefügt.

Beispiel

Zuerst generieren wir drei Antworten auf dieselbe Frage, um die Variabilität zu veranschaulichen, die für Chatabschlussantworten üblich ist, auch wenn andere Parameter gleich sind:

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

Output

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

Beachten Sie, dass jede Story zwar ähnliche Elemente und einige wortwörtliche Wiederholungen aufweist, aber je länger die Antwort dauert, desto mehr weichen sie voneinander ab.

Jetzt führen wir denselben Code wie zuvor aus, aber diesmal entfernen wir die Markierung in der Zeile für den Parameter, die lautet 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

Output

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

Indem wir für jede unserer drei Anfragen denselben seed Parameter 42 verwenden und gleichzeitig alle Parameter beibehalten, können wir viel konsistentere (in diesem Fall identische) Ergebnisse erzielen.

Wichtig

Der Determinismus ist mit reproduzierbarer Ausgabe nicht garantiert. Auch in Fällen, in denen der Seedparameter und system_fingerprint bei API-Aufrufen identisch sind, ist es derzeit nicht ungewöhnlich, einen Grad an Variabilität bei Antworten zu beobachten. Identische API-Aufrufe mit größeren max_tokens-Werten führen in der Regel zu weniger deterministischen Antworten, auch wenn der Seedparameter festgelegt ist.

Parameterdetails

seed ist ein optionaler Parameter, der auf eine ganze Zahl oder Null festgelegt werden kann.

Dieses Feature befindet sich in der Vorschau. Wenn Sie dies angeben, wird sich unser System nach besten Kräften bemühen, eine deterministische Auswahl zu treffen, so dass wiederholte Anfragen mit demselben Seed und denselben Parametern dasselbe Ergebnis liefern sollten. Der Determinismus ist nicht garantiert, und Sie sollten auf den system_fingerprint Antwortparameter verweisen, um Änderungen im Back-End zu überwachen.

system_fingerprint ist eine Zeichenfolge und ist Teil des Chatabschlussobjekts.

Dieser Fingerabdruck stellt die Back-End-Konfiguration dar, mit der das Modell ausgeführt wird.

Sie kann mit dem Seed-Anforderungsparameter verwendet werden, um zu verstehen, wann Back-End-Änderungen vorgenommen wurden, die sich auf den Determinismus auswirken können.

Um das vollständige Chatvervollständigungsobjekt mit system_fingerprint anzuzeigen, können Sie print(response.model_dump_json(indent=2)) zum vorherigen Python-Code neben der vorhandenen print-Anweisung hinzufügen oder $response | convertto-json -depth 5 zum Ende des PowerShell-Beispiels. Diese Änderung führt zu den folgenden zusätzlichen Informationen, die Teil der Ausgabe sind:

Ausgabe

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

Weitere Überlegungen

Wenn Sie reproduzierbare Ausgaben verwenden möchten, müssen Sie die seed gleiche ganze Zahl für Chatabschlussanrufe festlegen. Sie sollten auch alle anderen Parameter wie temperature, max_tokens usw. abgleichen.