Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Compter les tokens et estimer les couts
Tu as un chatbot qui marche, mais combien ca coute ? En production, c'est LA question que ton manager va te poser. "On a 500 employes qui posent 10 questions par jour, ca va nous couter combien par mois ?" Si tu ne sais pas repondre, ton projet ne sera pas valide.
Les LLM facturent au token. Un token, c'est grosso modo un bout de mot. "Bonjour" c'est 1 ou 2 tokens. "anticonstitutionnellement" c'est 5 ou 6 tokens. En francais, compte environ 1 token pour 3-4 caracteres (c'est moins efficace que l'anglais).
La librairie tiktoken te donne le compte exact. Installe-la :
pip install tiktoken
Voici comment ca marche :
import tiktoken
encodeur = tiktoken.encoding_for_model("gpt-4o-mini") tokens = encodeur.encode("Bonjour le monde") print(len(tokens)) # 3 ou 4 selon le modele
Les prix actuels de GPT-4o-mini (mars 2024) sont environ : Input : 0.15 dollar pour 1 million de tokens Output : 0.60 dollar pour 1 million de tokens
Ecris trois fonctions :
compter_tokens(texte, model="gpt-4o-mini") : renvoie le nombre de tokens dans un texte. Pour que les tests marchent dans le sandbox (sans tiktoken), si tiktoken n'est pas disponible, utilise l'approximation len(texte) // 4.
compter_tokens_conversation(messages, model="gpt-4o-mini") : prend une liste de messages au format OpenAI et renvoie le nombre total de tokens de tous les contenus. Ajoute 4 tokens par message pour les metadonnees (role, delimiteurs). C'est l'approximation officielle d'OpenAI.
estimer_cout(nb_tokens_input, nb_tokens_output, model="gpt-4o-mini") : renvoie le cout en dollars. Utilise un dictionnaire de prix par modele. Pour gpt-4o-mini : input=0.15/1M, output=0.60/1M. Pour gpt-4o : input=2.50/1M, output=10.00/1M.
Exemple :
compter_tokens("Bonjour le monde") # environ 4 (approximation)
messages = [{"role": "system", "content": "Tu es un assistant."}, {"role": "user", "content": "Bonjour"}] compter_tokens_conversation(messages) # tokens des contenus + 4 par message
# Teste l'approximation (sans tiktoken dans le sandbox)
r = compter_tokens("Bonjour le monde entier")
assert isinstance(r, int), f"La fonction doit retourner un entier, pas {type(r)}"
assert r > 0, "Le nombre de tokens doit etre positif"
Tokens d'une conversation
messages = [
{"role": "system", "content": "Tu es un assistant."},
{"role": "user", "content": "Bonjour"}
]
r = compter_tokens_conversation(messages)
assert isinstance(r, int)
assert r > 0
# Au moins 8 tokens de metadonnees (4 par message) + tokens du contenu
assert r >= 8, "Il doit y avoir au moins 4 tokens de metadonnees par message"