Gestion des Limites de Tokens dans les Conversations IA
Lors de l’utilisation d’API de modèles de langage (LLM) comme OpenAI GPT-4, chaque appel API est soumis à une limite maximale de tokens (par exemple, 8192 ou 128k tokens). Les conversations longues dépassent facilement cette limite, surtout si l’on conserve l’historique pour assurer la continuité.
Ce guide explique pourquoi les limites de tokens sont importantes et propose des stratégies concrètes pour préserver le contexte tout en restant dans les limites imposées.
Pourquoi les Limites de Tokens Sont Importantes
- Chaque message de l’historique consomme des tokens (messages utilisateur et assistant).
- Si le total dépasse la limite du modèle, l’appel API échoue.
- Le paramètre
max_tokens
définit l’espace restant pour la réponse du modèle.
Exemple : Avec GPT-4 (8192 tokens max), si votre prompt fait déjà 7800 tokens, la réponse sera très courte ou l’appel échouera.
Stratégies pour Gérer les Limites de Tokens
1. Tronquer les Anciens Messages
Supprimez les premiers messages de l’historique (sauf le message système).
while token_count(messages + [new_prompt]) > MAX_TOKENS - reserved_for_response:
# Supprime le plus ancien message utilisateur/assistant
messages.pop(1)
Avantages : Simple
Inconvénients : Perte de contexte initial
2. Résumer les Anciens Messages
Avant de supprimer des messages, demandez au modèle de les résumer. Remplacez ensuite le bloc supprimé par un résumé.
[
{ "role": "system", "content": "Vous êtes David Goggins..." },
{ "role": "assistant", "content": "Résumé : l'utilisateur a parlé de faiblesse, de douleur, et vous lui avez conseillé d'utiliser la douleur comme moteur." },
{ "role": "user", "content": "Je lutte à nouveau. Que dois-je faire ?" }
]
Avantages : Préserve l’intention et la mémoire
Inconvénients : Nécessite une logique de résumé ou un appel supplémentaire
3. Stratégie Hybride (Recommandée)
- Conservez les 5 à 10 derniers messages en intégralité
- Résumez les parties plus anciennes en un seul message
- Combinez contexte brut et résumé
Idéal pour : Chats longs, jeux de rôle, bots de coaching
4. Mémoire Augmentée par Recherche (Avancé)
- Stockez toutes les conversations passées en externe (ex. : base de données vectorielle)
- Récupérez les passages les plus pertinents à chaque nouvelle requête
- Injectez uniquement ces extraits dans le prompt
Outils : FAISS, Chroma, LangChain, LlamaIndex
Avantages : Meilleure évolutivité à long terme
Inconvénients : Nécessite une infrastructure backend et une logique d’indexation
Choisir la Bonne Approche
Stratégie | Rétention du contexte | Simplicité | Scalabilité | Cas d’usage |
---|---|---|---|---|
Suppression des anciens messages | ❌ Faible | ✅ Simple | ❌ Limitée | Tâches courtes, requêtes transactionnelles |
Résumer & remplacer | ✅ Élevée | ⚠️ Moyenne | ✅ Bonne | Coaching, journalisation, chats à personnalité |
Hybride (brut + résumé) | ✅✅ Excellente | ⚖️ Modérée | ✅✅ Meilleure | Assistants long terme, bots à mémoire enrichie |
Mémoire augmentée par recherche | ✅✅ Excellente | ❌ Complexe | ✅✅ Meilleure | Applications évolutives avec mémoire ou recherche |
Exemple : Résumer puis Continuer
Lorsque l’historique devient trop long :
- Résumez les anciens messages
- Insérez le résumé comme message assistant
- Continuez la conversation avec les nouveaux prompts
messages = [
{ "role": "system", "content": "Vous êtes David Goggins..." },
{ "role": "assistant", "content": "Résumé des 50 messages précédents..." },
{ "role": "user", "content": "Je rechute. Aidez-moi à repartir." }
]
Conseils Pratiques
- Réservez toujours des
max_tokens
pour la réponse de l’assistant (ex. : 300–1000 tokens) - Utilisez des bibliothèques comme
tiktoken
pour compter les tokens avant l’envoi - Actualisez les résumés tous les 20 à 30 messages