Sorties prédites (préversion)
Les sorties prédites peuvent améliorer la latence de réponse du modèle pour les appels d’achèvement de conversation, où des modifications minimales sont requises pour un texte plus long. Si vous demandez au modèle de fournir une réponse où une partie importante de la réponse attendue est déjà connue, les sorties prédites peuvent réduire considérablement la latence de cette requête. Cette fonctionnalité est particulièrement adaptée aux scénarios de codage, dont l’autocomplétion, la détection d’erreurs et la modification en temps réel, où la vitesse et la réactivité sont essentielles pour les développeurs et les utilisateurs finaux. Au lieu de régénérer tout le texte à partir de zéro, vous pouvez indiquer au modèle que la plupart de la réponse est déjà connue en passant le texte connu au paramètre prediction
.
Prise en charge des modèles
- Version
gpt-4o-mini
:2024-07-18
- Version
gpt-4o
:2024-08-06
- Version
gpt-4o
:2024-11-20
Prise en charge des API
2025-01-01-preview
Fonctionnalités non prises en charge
Les sorties prédites sont uniquement disponibles au format texte pour l’instant. Ces fonctionnalités ne peuvent pas être utilisées avec le paramètre prediction
et les sorties prédites.
- Outils/Appels de fonction
- modèles audio/entrées et sorties
-
n
valeurs supérieures à1
logprobs
-
presence_penalty
valeurs supérieures à0
-
frequency_penalty
valeurs supérieures à0
max_completion_tokens
Remarque
La fonctionnalité de sorties prédites n’est pas disponible pour les modèles dans la région Asie Sud-Est pour l’instant.
Mise en route
Pour illustrer les principes de base des sorties prédites, commençons par demander à un modèle de refactoriser le code à partir du problème courant de programmation FizzBuzz
pour remplacer l’instance FizzBuzz
par MSFTBuzz
. Nous transmettons notre exemple de code au modèle à deux endroits. D’abord, dans le cadre d’un message d’utilisateur dans le tableau/la liste messages
et ensuite dans le contenu du nouveau paramètre prediction
.
Il se peut que vous deviez mettre à niveau votre bibliothèque de client OpenAI pour accéder au paramètre prediction
.
pip install openai --upgrade
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2025-01-01-preview"
)
code = """
for number in range(1, 101):
if number % 3 == 0 and number % 5 == 0:
print("FizzBuzz")
elif number % 3 == 0:
print("Fizz")
elif number % 5 == 0:
print("Buzz")
else:
print(number)
"""
instructions = """
Replace string `FizzBuzz` with `MSFTBuzz`. Respond only
with code, and with no markdown formatting.
"""
completion = client.chat.completions.create(
model="gpt-4o-mini", # replace with your unique model deployment name
messages=[
{
"role": "user",
"content": instructions
},
{
"role": "user",
"content": code
}
],
prediction={
"type": "content",
"content": code
}
)
print(completion.model_dump_json(indent=2))
Sortie
{
"id": "chatcmpl-AskZk3P5QGmefqobDw4Ougo6jLxSP",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "for number in range(1, 101):\n if number % 3 == 0 and number % 5 == 0:\n print(\"MSFTBuzz\")\n elif number % 3 == 0:\n print(\"Fizz\")\n elif number % 5 == 0:\n print(\"Buzz\")\n else:\n print(number)",
"refusal": null,
"role": "assistant",
"audio": null,
"function_call": null,
"tool_calls": null
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"protected_material_code": {
"filtered": false,
"detected": false
},
"protected_material_text": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"created": 1737612112,
"model": "gpt-4o-mini-2024-07-18",
"object": "chat.completion",
"service_tier": null,
"system_fingerprint": "fp_5154047bf2",
"usage": {
"completion_tokens": 77,
"prompt_tokens": 124,
"total_tokens": 201,
"completion_tokens_details": {
"accepted_prediction_tokens": 6,
"audio_tokens": 0,
"reasoning_tokens": 0,
"rejected_prediction_tokens": 4
},
"prompt_tokens_details": {
"audio_tokens": 0,
"cached_tokens": 0
}
},
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"jailbreak": {
"filtered": false,
"detected": false
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
]
}
Notez les nouveaux paramètres de réponse pour accepted_prediction_tokens
et rejected_prediction_tokens
dans la sortie :
"usage": {
"completion_tokens": 77,
"prompt_tokens": 124,
"total_tokens": 201,
"completion_tokens_details": {
"accepted_prediction_tokens": 6,
"audio_tokens": 0,
"reasoning_tokens": 0,
"rejected_prediction_tokens": 4
}
Les accepted_prediction_tokens
permettent de réduire la latence de réponse du modèle, mais les rejected_prediction_tokens
ont la même incidence de coût que les jetons de sortie supplémentaires générés par le modèle. Pour cette raison, bien que les sorties prédites peuvent améliorer les temps de réponse du modèle, elles peuvent entraîner des coûts plus élevés. Vous devez évaluer et équilibrer les performances accrues du modèle par rapport aux augmentations potentielles des coûts.
Il convient également de comprendre que l’utilisation de sorties prédictives ne garantit pas une réduction de latence. Une demande importante avec un pourcentage plus élevé de jetons de prédiction rejetés que de jetons de prédiction acceptés pourrait entraîner une augmentation de la latence de réponse du modèle, plutôt que sa diminution.
Remarque
Contrairement à la mise en cache d’invite, qui fonctionne uniquement lorsqu’un nombre minimal défini de jetons initiaux au début d’une requête est identique, les sorties prédites ne sont pas limitées par l’emplacement du jeton. Même si votre texte de réponse contient une nouvelle sortie qui sera retournée avant la sortie prédite, des accepted_prediction_tokens
peuvent toujours survenir.
Streaming
L’amélioration des performances due aux sorties prédites est souvent la plus évidente si vous retournez vos réponses avec la diffusion en continu activée.
Il se peut que vous deviez mettre à niveau votre bibliothèque de client OpenAI pour accéder au paramètre prediction
.
pip install openai --upgrade
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
api_version="2025-01-01-preview"
)
code = """
for number in range(1, 101):
if number % 3 == 0 and number % 5 == 0:
print("FizzBuzz")
elif number % 3 == 0:
print("Fizz")
elif number % 5 == 0:
print("Buzz")
else:
print(number)
"""
instructions = """
Replace string `FizzBuzz` with `MSFTBuzz`. Respond only
with code, and with no markdown formatting.
"""
completion = client.chat.completions.create(
model="gpt-4o-mini", # replace with your unique model deployment name
messages=[
{
"role": "user",
"content": instructions
},
{
"role": "user",
"content": code
}
],
prediction={
"type": "content",
"content": code
},
stream=True
)
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end='',)