Exercices Prompt Engineering Compter les tokens d'une conversation
🎉

Bravo!

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

Compter les tokens d'une conversation

Si tu veux estimer le cout d'un appel API avant de le faire, tu dois compter les tokens de toute la conversation. Attention, ce n'est pas juste la somme des tokens de chaque message : OpenAI ajoute des tokens supplementaires pour la structure (les roles, les delimiteurs entre messages).

La formule approximative pour gpt-4o-mini est :
- Chaque message coute 4 tokens supplémentaires (pour le role et les delimiteurs)
- Plus 2 tokens a la fin de la conversation (pour le token de réponse attendue)

Donc pour compter le total :

total = 2 (tokens de fin)
pour chaque message :
total += 4 (overhead par message)
total += nombre_de_tokens(message['content'])

Écris une fonction compter_tokens_conversation(messages, modèle='gpt-4o-mini') qui prend une liste de messages au format OpenAI et retourne le nombre approximatif de tokens en utilisant tiktoken.

Exemple :
messages = [
{'role': 'system', 'content': 'Ok'},
{'role': 'user', 'content': 'Salut'},
]
compter_tokens_conversation(messages) retourne un entier

Tests (1/1)

Tests
import tiktoken

# Conversation vide (juste les 2 tokens de fin)
assert compter_tokens_conversation([]) == 2, 'Conversation vide doit donner 2 tokens (fin)'

# Un message
msgs1 = [{'role': 'user', 'content': 'Bonjour'}]
enc = tiktoken.encoding_for_model('gpt-4o-mini')
attendu1 = 2 + 4 + len(enc.encode('Bonjour'))
assert compter_tokens_conversation(msgs1) == attendu1, 'Un message : 2 + 4 + tokens du contenu'

# Deux messages
msgs2 = [
    {'role': 'system', 'content': 'Sois bref.'},
    {'role': 'user', 'content': 'Salut'},
]
attendu2 = 2 + 4 + len(enc.encode('Sois bref.')) + 4 + len(enc.encode('Salut'))
assert compter_tokens_conversation(msgs2) == attendu2, 'Deux messages : les tokens doivent s additionner'

# Vérifier que c'est un entier
assert isinstance(compter_tokens_conversation(msgs1), int), 'Doit retourner un entier'

# Plus de messages = plus de tokens
msgs3 = msgs2 + [{'role': 'assistant', 'content': 'Bonjour, comment puis-je t aider ?'}]
assert compter_tokens_conversation(msgs3) > compter_tokens_conversation(msgs2), 'Plus de messages doit donner plus de tokens'

Indices (3 disponibles)

solution.py
Non stockée