Compartir vía


Más información sobre cómo usar la salida reproducible (versión preliminar)

De manera predeterminada, si formula a un modelo de finalización de chat de Azure OpenAI la misma pregunta varias veces, es probable que obtenga una respuesta diferente. Por tanto, las respuestas se consideran no deterministas. La salida reproducible es una nueva característica en versión preliminar que permite cambiar selectivamente el comportamiento predeterminado para ayudar a reproducir salidas más deterministas.

Compatibilidad con la salida reproducible

Actualmente, la salida reproducible solo se admite con lo siguiente:

Modelos admitidos

  • 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 (18-07-2024)
  • gpt-4o (13/05/2024)

Consulte la página de modelos para obtener la información más reciente sobre la disponibilidad regional del modelo.

Versión de la API

La compatibilidad con la salida reproducible se agregó por primera vez en la versión de API 2023-12-01-preview

Ejemplo

En primer lugar, se generarán tres respuestas a la misma pregunta para demostrar la variabilidad común de las respuestas de finalización de chat incluso cuando otros parámetros son los mismos:

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

Tenga en cuenta que, aunque cada historia pueda tener elementos similares y algunas repeticiones textuales, cuanto más tiempo dure la respuesta, más tiende a divergir.

Ahora se ejecutará el mismo código que antes, pero esta vez se quitará la marca de comentario de la línea del parámetro que indica 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.
---

Mediante el uso del mismo parámetro seed de 42 para cada una de nuestras tres solicitudes, al tiempo que mantiene todos los demás parámetros iguales, podemos generar resultados mucho más coherentes.

Importante

No se garantiza el determinismo con la salida reproducible. Incluso en los casos en los que el parámetro de inicialización y system_fingerprint son los mismos en las llamadas API, actualmente no es raro observar un grado de variabilidad en las respuestas. Las llamadas API idénticas con valores max_tokens más grandes suelen dar lugar a respuestas menos deterministas incluso cuando se establece el parámetro de inicialización.

Detalles de los parámetros

seed es un parámetro opcional, que se puede establecer en un entero o null.

Esta característica se encuentra en versión preliminar. Si se especifica, el sistema realizará un mejor esfuerzo para muestrear de forma determinista, de modo que las solicitudes repetidas con la misma inicialización y parámetros deben devolver el mismo resultado. No se garantiza el determinismo y debe hacer referencia al parámetro de respuesta system_fingerprint para supervisar los cambios en el back-end.

system_fingerprint es una cadena y forma parte del objeto de finalización del chat.

Esta huella digital representa la configuración de back-end con la que se ejecuta el modelo.

Se puede usar con el parámetro de solicitud de inicialización para comprender cuándo se han realizado cambios de back-end que podrían afectar al determinismo.

Para ver el objeto de finalización de chat completo con system_fingerprint, podría agregar print(response.model_dump_json(indent=2)) al código de Python anterior junto a la instrucción print existente o $response | convertto-json -depth 5 al final del ejemplo de PowerShell. Este cambio da como resultado la siguiente información adicional que forma parte de la salida:

Salida

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

Consideraciones adicionales

Cuando quiera usar salidas reproducibles, debe establecer seed en el mismo entero en las llamadas de finalizaciones de chat. También debe coincidir con cualquier otro parámetro, como temperature, max_tokens, etc.