Exercices Prompt Engineering Parser une réponse ChatCompletion
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Parser une réponse ChatCompletion

Apres chaque appel API, OpenAI te renvoie un objet ChatCompletion. Savoir le lire, c'est essentiel : tu y trouves la reponse du modele, mais aussi le nombre de tokens consommes (pour suivre tes couts), la raison de l'arret (est-ce que le modele a termine ou a ete coupe ?), et le modele utilise.

Pour travailler avec ces objets sans faire de vrai appel API, on peut les construire nous-memes avec les classes du SDK OpenAI :

from openai.types.chat import ChatCompletion, ChatCompletionMessage
from openai.types.chat.chat_completion import Choice
from openai.types import CompletionUsage

response = ChatCompletion(
id='chatcmpl-123',
choices=[Choice(
finish_reason='stop',
index=0,
message=ChatCompletionMessage(role='assistant', content='Bonjour!')
)],
created=1234567890,
model='gpt-4o-mini',
object='chat.completion',
usage=CompletionUsage(
completion_tokens=5,
prompt_tokens=10,
total_tokens=15
)
)

Pour extraire les informations :
response.choices[0].message.content donne le texte
response.usage.total_tokens donne le total de tokens
response.model donne le nom du modèle
response.choices[0].finish_reason donne la raison de l'arret

Écris une fonction extraire_infos(response) qui prend un objet ChatCompletion et retourne un dictionnaire avec les clés : 'texte', 'modèle', 'tokens_total', 'raison_arret'.

Exemple :
infos = extraire_infos(response)
infos['texte'] vaut 'Bonjour!'
infos['tokens_total'] vaut 15

Tests (1/1)

Tests
from openai.types.chat import ChatCompletion, ChatCompletionMessage
from openai.types.chat.chat_completion import Choice
from openai.types import CompletionUsage

resp = ChatCompletion(
    id='chatcmpl-test1',
    choices=[Choice(finish_reason='stop', index=0, message=ChatCompletionMessage(role='assistant', content='Salut!'))],
    created=1000000000,
    model='gpt-4o-mini',
    object='chat.completion',
    usage=CompletionUsage(completion_tokens=3, prompt_tokens=7, total_tokens=10)
)
infos = extraire_infos(resp)
assert infos['texte'] == 'Salut!', 'Le texte doit etre Salut!'
assert infos['modèle'] == 'gpt-4o-mini', 'Le modèle doit etre gpt-4o-mini'
assert infos['tokens_total'] == 10, 'Le total de tokens doit etre 10'
assert infos['raison_arret'] == 'stop', 'La raison d arret doit etre stop'

resp2 = ChatCompletion(
    id='chatcmpl-test2',
    choices=[Choice(finish_reason='length', index=0, message=ChatCompletionMessage(role='assistant', content='Texte coupe'))],
    created=1000000000,
    model='gpt-4o',
    object='chat.completion',
    usage=CompletionUsage(completion_tokens=50, prompt_tokens=100, total_tokens=150)
)
infos2 = extraire_infos(resp2)
assert infos2['raison_arret'] == 'length', 'Doit reconnaitre la raison length'
assert infos2['tokens_total'] == 150, 'Doit lire le bon total de tokens'

Indices (3 disponibles)

solution.py
Non stockée