Une conversation nécessite un historique, mais renvoyer tous les messages indéfiniment augmente coût, latence et risque de fuite. Concevez la mémoire comme une donnée applicative avec propriétaire, limite et suppression.
Modèle de données
Stockez session_id, user_id, role, content, created_at, model et éventuellement tool_call_id. Le serveur déduit user_id de l’authentification ; il ne fait jamais confiance à une valeur fournie par le modèle.
Charger une fenêtre
~~~python async def build_context(session_id: str, user_id: str): session = await sessions.get_authorized(session_id, user_id) recent = await messages.last(session.id, limit=20) return [ {'role': message.role, 'content': message.content} for message in recent ] ~~~
Ajoutez les nouveaux messages dans une transaction. En cas de double envoi, une clé d’idempotence évite les doublons.
Résumer les anciens tours
Quand la fenêtre dépasse votre budget, résumez les anciens messages dans une structure : objectifs, décisions, contraintes et questions ouvertes. Conservez la provenance et ne présentez pas le résumé comme une vérité externe.
Distinguer trois mémoires
- historique récent : continuité du dialogue ;
- préférences durables : enregistrées avec consentement et modifiables ;
- données métier : toujours relues depuis la source de vérité.
Un statut de commande ne doit jamais survivre comme souvenir si l’API métier peut fournir sa valeur actuelle.
Tester
Vérifiez deux sessions simultanées, accès d’un autre utilisateur, très longue conversation, suppression, outil en erreur et redémarrage. Contrôlez quels messages sont réellement envoyés au modèle.
Production
Chiffrez, définissez rétention et export/suppression, masquez les logs et limitez la taille de chaque message. Ajoutez une protection contre l’injection persistante : une ancienne instruction utilisateur reste une donnée non fiable.
FAQ
La mémoire améliore-t-elle toujours la qualité ?
Non. Un historique bruité peut dégrader la réponse. Mesurez avec et sans mémoire.
Peut-on partager une mémoire entre utilisateurs ?
Seulement pour un espace explicitement partagé avec des règles d’accès adaptées.