Retour à l’accueil

Comment donner de la mémoire à votre agent

Apprenez à doter les agents IA de mémoire à l'aide de bases de données vectorielles, de l'historique des conversations et d'un stockage structuré. Techniques pratiques pour un contexte persistant.

Lecture audio non disponible dans ce navigateur
Comment donner de la mémoire à votre agent

Tags

Résumé rapide

Apprenez à doter les agents IA de mémoire à l'aide de bases de données vectorielles, de l'historique des conversations et d'un stockage structuré. Techniques pratiques pour un contexte persistant.

Comment donner de la mémoire à votre agent

Les agents IA modernes sont puissants, mais il leur manque souvent une capacité humaine cruciale : la mémoire. Sans mémoire, chaque interaction avec un agent repart de zéro — pas de contexte, pas d'historique, pas de continuité. Cela limite les agents dans des tâches comme les assistants personnels, les chatbots de support client ou les outils de recherche longue durée. Dans cet article, vous apprendrez des techniques pratiques pour doter votre agent de mémoire, en utilisant des outils open source et des API. Nous aborderons l'installation, la configuration et des exemples d'utilisation réels, en nous appuyant sur les développements récents des grandes organisations d'IA.

Pourquoi la mémoire est importante pour les agents IA

La mémoire transforme un chatbot sans état en un assistant persistant et conscient du contexte. Selon le blog LangChain, la mémoire est un composant essentiel pour construire des agents capables de raisonner sur des conversations passées, de se souvenir des préférences des utilisateurs et de maintenir des interactions cohérentes sur le long terme. Sans mémoire, les agents se répètent, oublient les instructions et ne parviennent pas à personnaliser leurs réponses. La section actualités d'OpenAI a souligné que la mémoire est un axe clé pour améliorer l'IA conversationnelle, permettant aux agents de « se souvenir » des détails d'une session à l'autre. De même, le blog Microsoft AI aborde l'intégration de la mémoire dans les agents d'entreprise pour des tâches comme la gestion de projet et la gestion de la relation client. Les actualités d'Anthropic insistent également sur la mémoire comme élément des systèmes d'IA sûrs et fiables, où les agents doivent se souvenir des contraintes ou des directives éthiques.

En substance, la mémoire comble le fossé entre une réponse unique et un dialogue multi-tours. Elle permet aux agents de :

  • Conserver des informations spécifiques à l'utilisateur (par exemple, nom, préférences).
  • S'appuyer sur des réponses précédentes (par exemple, « Comme je l'ai mentionné plus tôt... »).
  • Apprendre de leurs erreurs (par exemple, éviter des erreurs répétées).
  • Maintenir le contexte dans des conversations longues ou sur plusieurs sessions.

Prérequis

Avant de passer à l'implémentation, assurez-vous de disposer des éléments suivants :

  • **Python 3.9+** installé sur votre système.
  • Le gestionnaire de paquets **pip** (généralement inclus avec Python).
  • Un **environnement virtuel** (recommandé) pour isoler les dépendances.
  • L'accès à une **API LLM** (par exemple, OpenAI, Anthropic, ou un modèle local via Ollama). Vous aurez besoin d'une clé API pour les modèles cloud.
  • Une familiarité de base avec la ligne de commande et les scripts Python.

Pour ce guide, nous utiliserons les modules de mémoire de LangChain, qui sont largement pris en charge et bien documentés sur le blog LangChain. Vous pouvez adapter les concepts à d'autres frameworks comme Semantic Kernel de Microsoft ou l'API Claude d'Anthropic.

Installation étape par étape

1. Configurer un environnement virtuel Python

Créez et activez un environnement virtuel pour éviter les conflits de dépendances :

python -m venv agent-memory-env
source agent-memory-env/bin/activate  # Sur Windows : agent-memory-env\Scripts\activate

2. Installer LangChain et les paquets requis

Installez la bibliothèque principale de LangChain, ainsi que le support mémoire et un fournisseur LLM. Nous utiliserons OpenAI comme exemple, mais vous pouvez le remplacer par Anthropic ou d'autres.

pip install langchain langchain-community langchain-openai
  • `langchain` : Framework principal pour construire des agents.
  • `langchain-community` : Intégrations contribuées par la communauté (inclut les types de mémoire).
  • `langchain-openai` : Wrapper pour l'API OpenAI.

Si vous préférez un modèle local, installez Ollama et l'intégration LangChain correspondante :

pip install langchain-ollama

3. Définir votre clé API

Exportez votre clé API OpenAI en tant que variable d'environnement (remplacez `votre-clé-api-ici` par votre clé réelle) :

export OPENAI_API_KEY="votre-clé-api-ici"

Pour l'invite de commandes Windows :

set OPENAI_API_KEY="votre-clé-api-ici"

Pour PowerShell Windows :

$env:OPENAI_API_KEY="votre-clé-api-ici"

4. Vérifier l'installation

Exécutez un test rapide pour vous assurer que LangChain et le LLM fonctionnent :

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
response = llm.invoke("Dis 'Bonjour, mémoire !'")
print(response.content)

Sortie attendue : `Bonjour, mémoire !`

Types de mémoire pour les agents

LangChain propose plusieurs types de mémoire, chacun adapté à des cas d'utilisation différents. D'après la documentation du blog LangChain, voici les plus courants :

  • **ConversationBufferMemory** : Stocke l'intégralité de l'historique de la conversation sous forme de liste de messages. Simple mais peut devenir volumineux.
  • **ConversationSummaryMemory** : Résume la conversation périodiquement, réduisant l'utilisation de tokens tout en conservant les points clés.
  • **ConversationBufferWindowMemory** : Conserve uniquement les N derniers échanges, idéal pour un contexte à court terme.
  • **VectorStoreRetrieverMemory** : Utilise une base de données vectorielle pour stocker et récupérer les conversations passées pertinentes en fonction de la similarité sémantique. Excellent pour la mémoire à long terme.
  • **EntityMemory** : Extrait et mémorise les entités (par exemple, noms, lieux) des conversations.

Choisissez en fonction de vos besoins : les tâches à court terme nécessitent une mémoire tampon ou fenêtrée ; les assistants à long terme ont besoin d'une mémoire résumée ou vectorielle.

Exemples d'utilisation

Exemple 1 : Mémoire tampon de conversation simple

Cet exemple crée un agent basique qui se souvient de l'intégralité de la conversation.

from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain.chains import ConversationChain

# Initialiser le LLM et la mémoire
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
memory = ConversationBufferMemory()

# Créer une chaîne de conversation
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True  # Affiche le contenu de la mémoire pour le débogage
)

# Première interaction
response = conversation.predict(input="Bonjour ! Je m'appelle Alice.")
print(response)

# Deuxième interaction (l'agent se souvient du nom)
response = conversation.predict(input("Quel est mon nom ?"))
print(response)

**Sortie** : L'agent répondra « Votre nom est Alice. » Le paramètre `verbose=True` affiche le tampon mémoire contenant à la fois les entrées utilisateur et les réponses de l'assistant.

Exemple 2 : Mémoire fenêtrée pour un contexte limité

Utilisez la mémoire fenêtrée pour conserver uniquement les 2 derniers échanges, évitant ainsi un débordement de tokens :

from langchain.memory import ConversationBufferWindowMemory

memory = ConversationBufferWindowMemory(k=2)  # Conserver les 2 derniers tours
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

# Simuler une conversation plus longue
conversation.predict(input="J'aime la pizza.")
conversation.predict(input="Qu'est-ce que j'aime ?")  # Se souvient
conversation.predict(input="J'aime aussi les tacos.")
conversation.predict(input="Qu'est-ce que j'aime ?")  # Peut oublier la pizza à cause de la fenêtre

Exemple 3 : Mémoire résumée pour les longues conversations

La mémoire résumée condense l'historique de la conversation, idéale pour les agents de longue durée :

from langchain.memory import ConversationSummaryMemory

memory = ConversationSummaryMemory(llm=llm)  # Utilise le LLM pour résumer
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

conversation.predict(input="J'apprends Python.")
conversation.predict(input="Qu'est-ce que j'apprends ?")  # Se souvient
conversation.predict(input="Maintenant j'apprends la mémoire en IA.")
conversation.predict(input="Quels sujets est-ce que j'étudie ?")  # Résume les deux

Exemple 4 : Mémoire vectorielle pour le rappel à long terme

Pour une mémoire persistante entre les sessions, utilisez un magasin vectoriel. Installez ChromaDB :

pip install chromadb

Puis implémentez :

from langchain.memory import VectorStoreRetrieverMemory
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# Initialiser les embeddings et le magasin vectoriel
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(collection_name="agent_memory", embedding_function=embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})  # Récupérer les 3 souvenirs les plus similaires

memory = VectorStoreRetrieverMemory(retriever=retriever, memory_key="history")

# Enregistrer un souvenir
memory.save_context({"input": "Ma couleur préférée est le bleu"}, {"output": "Noté"})

# Enregistrer un autre souvenir
memory.save_context({"input": "J'habite à Tokyo"}, {"output": "Noté"})

# Récupérer un souvenir pertinent
relevant = memory.load_memory_variables({"input": "Où est-ce que j'habite ?"})
print(relevant)  # Renvoie "J'habite à Tokyo" et d'autres souvenirs pertinents

Cette approche persiste les souvenirs sur le disque, donc ils survivent aux redémarrages.

Exemple 5 : Construire un agent complet avec mémoire

Combinez la mémoire avec un agent capable d'utiliser des outils. Voici un assistant simple qui se souvient des préférences des utilisateurs :

from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import tool
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate

# Définir un outil simple
@tool
def get_weather(city: str) -> str:
    """Obtenir la météo actuelle pour une ville."""
    return f"Le temps à {city} est ensoleillé."

# Initialiser le LLM et la mémoire
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
memory = ConversationBufferMemory(memory_key="chat_history")

# Créer l'agent
tools = [get_weather]
prompt = PromptTemplate.from_template(
    "Vous êtes un assistant utile avec mémoire. Historique de la conversation :\n{chat_history}\n\nUtilisateur : {input}\nAssistant :"
)
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, memory=memory, verbose=True)

# Interagir
agent_executor.invoke({"input": "Bonjour, je suis Bob. J'habite à Paris."})
agent_executor.invoke({"input": "Quel est mon nom et ma ville ?"})  # Se souvient
agent_executor.invoke({"input": "Quel temps fait-il dans ma ville ?"})  # Utilise la mémoire

Bonnes pratiques et considérations

1. **Gestion des tokens** : La mémoire consomme des tokens. Utilisez une mémoire fenêtrée ou résumée pour les systèmes de production afin de contrôler les coûts. Le blog OpenAI note que des contextes plus longs augmentent la latence et le coût.

2. **Confidentialité et sécurité** : Le stockage des souvenirs des utilisateurs soulève des problèmes de confidentialité. Mettez en place des politiques de consentement utilisateur et de suppression des données, comme le soulignent les actualités d'Anthropic. Évitez de stocker des informations sensibles sauf si elles sont chiffrées.

3. **Persistance** : Pour une mémoire à long terme, utilisez une base de données comme Chroma ou Pinecone. Le blog Microsoft AI recommande les magasins vectoriels pour une mémoire d'entreprise qui passe à l'échelle.

4. **Tests** : Testez toujours le comportement de la mémoire avec des cas limites (par exemple, informations contradictoires, mémoire vide). Le blog LangChain fournit des outils de débogage comme `verbose=True`.

5. **Solution de repli** : Si la récupération en mémoire échoue, prévoyez une réponse de repli (par exemple, « Je ne me souviens pas de cette information »).

Conclusion

Donner de la mémoire à votre agent n'est pas un simple luxe — c'est essentiel pour construire des systèmes d'IA véritablement utiles et conscients du contexte. En implémentant des tampons de conversation, des résumés, des fenêtres ou des magasins vectoriels, vous pouvez transformer un robot sans état en un assistant persistant qui se souvient des préférences des utilisateurs, des interactions passées et des objectifs à long terme. Commencez par une mémoire tampon simple pour le prototypage, puis passez aux magasins vectoriels pour la production. Les techniques présentées ici, basées sur les informations de LangChain, OpenAI, Microsoft et Anthropic, constituent une base solide. À mesure que les technologies de mémoire évoluent, vos agents deviendront encore plus performants, personnalisés et fiables. C'est maintenant à vous : choisissez un type de mémoire, installez les dépendances et offrez à votre agent le cadeau de la mémoire.

Sources

FAQ

De quoi parle cet article ?

Cet article traite de « Comment donner de la mémoire à votre agent » dans la catégorie Agents IA. Apprenez à doter les agents IA de mémoire à l'aide de bases de données vectorielles, de l'historique des conversations et d'un stockage structuré. Techniques pratiques pour un contexte persistant.

À qui cet article est-il utile ?

Il est utile aux lecteurs qui veulent comprendre les outils et usages de l’IA de façon pratique.

Que faire ensuite ?

Lisez l’article, vérifiez les sources indiquées, puis testez les idées pertinentes pour votre contexte.