Partager via


Découvrez comment utiliser une sortie reproductible (préversion)

Par défaut, si vous demandez un modèle d’achèvement de conversation Azure OpenAI, la même question plusieurs fois que vous êtes susceptible d’obtenir une réponse différente. Les réponses sont donc considérées comme non déterministes. La sortie reproductible est une nouvelle fonctionnalité en préversion qui vous permet de modifier de manière sélective le comportement par défaut pour aider les sorties plus déterministes du produit.

Prise en charge de la sortie reproductible

La sortie reproductible est prise en charge seulement avec ceci :

Modèles pris en charge

Version d'API

La prise en charge de la sortie reproductible a été ajoutée pour la première fois dans la version de l’API 2023-12-01-preview

Exemple

Tout d’abord, nous allons générer trois réponses à la même question pour illustrer la variabilité qui est commune aux réponses de Chat Completion même quand d’autres paramètres sont identiques :

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

Sortie

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

Notez que si chaque histoire peut avoir des éléments similaires et du texte répété, plus les réponses sont longues, plus elles ont tendance à diverger.

Nous allons à présent exécuter le même code que précédemment mais cette fois, décommentez la ligne pour le paramètre indiquant 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

Sortie

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

En utilisant le même paramètre seed de 42 pour chacune de nos trois requêtes, tout en conservant tous les autres paramètres identiques, nous pouvons produire des résultats beaucoup plus cohérents.

Important

Le déterminisme n’est pas garanti avec une sortie reproductible. Même dans les cas où le paramètre de départ et le system_fingerprint sont identiques entre les appels d’API, il n’est actuellement pas rare d’observer un degré de variabilité dans les réponses. Les appels d'API identiques avec des valeurs max_tokens plus grandes entraîneront généralement des réponses moins déterministes, même lorsque le paramètre seed est défini.

Détails du paramètre

seed est un paramètre facultatif, qui peut être défini sur un entier ou sur null.

Cette fonctionnalité est en version préliminaire. S’il est spécifié, notre système s’efforcera d’échantillonner de manière déterministe, de sorte que des demandes répétées avec les mêmes éléments en entrée et les mêmes paramètres devraient retourner le même résultat. Le déterminisme n’est pas garanti et vous devez vous référer au paramètre de réponse system_fingerprint pour surveiller les modifications dans le back-end.

system_fingerprint est une chaîne et fait partie de l’objet de complétion de conversation.

Cette empreinte digitale représente la configuration du back-end avec laquelle le modèle s’exécute.

Elle peut être utilisée avec le paramètre de demande initiale pour comprendre quand des modifications qui peuvent affecter le déterminisme ont été apportées au back-end.

Pour afficher l’objet complet de saisie semi-automatique de conversation avec system_fingerprint, vous pouvez ajouter print(response.model_dump_json(indent=2)) au code Python précédent en regard de l’instruction d’impression existante ou $response | convertto-json -depth 5 à la fin de l’exemple PowerShell. Cette modification a pour conséquence que les informations supplémentaires suivantes font partie de la sortie :

Sortie

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

Considérations supplémentaires

Quand vous voulez utiliser des sorties reproductibles, vous devez définir seed sur le même entier dans les appels des complétions de conversation. Vous devez aussi utiliser les mêmes valeurs pour les autres paramètres, comme temperature, max_tokens, etc.