LangChain + mémoire persistante : tutoriel Python 2026
ConversationChain oublie tout à chaque redémarrage. Voici comment ajouter une mémoire persistante cross-session à vos agents LangChain en 15 lignes de Python.
Le problème avec ConversationBufferMemory
LangChain propose ConversationBufferMemory pour stocker l'historique des échanges. C'est pratique en développement, mais il y a un problème fondamental : cette mémoire vit en RAM. Au prochain redémarrage de votre serveur, elle disparaît. Et si vous avez plusieurs instances (load balancing), chaque instance a sa propre mémoire isolée.
Pour un agent de production qui parle à des milliers d'utilisateurs, vous avez besoin d'une mémoire partagée, persistante et sémantiquement recherchable.
Installation
pip install langchain kronvex
Créer une BaseMemory Kronvex
from langchain.memory import BaseMemory
from kronvex import KronvexClient
from typing import Dict, List, Any
class KronvexMemory(BaseMemory):
"""Mémoire LangChain persistante via Kronvex."""
client: KronvexClient
agent_id: str
memory_key: str = "chat_history"
@property
def memory_variables(self) -> List[str]:
return [self.memory_key]
def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
# Rappel sémantique des souvenirs pertinents
query = inputs.get("input", "")
memories = self.client.recall(
agent_id=self.agent_id,
query=query,
limit=5
)
history = "\n".join(
f"[Confiance {m['confidence']:.2f}] {m['content']}"
for m in memories.get("memories", [])
)
return {self.memory_key: history}
def save_context(self, inputs: Dict[str, Any], outputs: Dict[str, Any]) -> None:
# Stocker l'échange en mémoire persistante
content = f"Utilisateur: {inputs.get('input', '')}\nAgent: {outputs.get('output', '')}"
self.client.remember(
agent_id=self.agent_id,
content=content
)
def clear(self) -> None:
pass # Implémentez si besoin de vider la mémoire
Utiliser avec ConversationChain
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from kronvex import KronvexClient
client = KronvexClient(api_key="kv-votre-cle")
memory = KronvexMemory(
client=client,
agent_id="agent-support-001"
)
chain = ConversationChain(
llm=ChatOpenAI(model="gpt-4o-mini"),
memory=memory
)
# Première session
chain.predict(input="Mon budget pour ce projet est 80 000 €.")
# ... Redémarrage du serveur ...
# Deuxième session — la mémoire persiste !
response = chain.predict(input="Quel était mon budget ?")
print(response)
# "Votre budget pour ce projet est de 80 000 €."
Scoping par utilisateur
Pour une application multi-utilisateurs, créez un agent distinct par utilisateur :
def get_chain_for_user(user_id: str) -> ConversationChain:
memory = KronvexMemory(
client=client,
agent_id=f"user-{user_id}"
)
return ConversationChain(llm=..., memory=memory)
RGPD : droit à l'effacement
Quand un utilisateur demande la suppression de ses données (article 17 RGPD), supprimez son agent Kronvex. Toutes ses mémoires sont effacées automatiquement :
client.delete_agent(agent_id=f"user-{user_id}")