Mémoire des Agents IA : Short-Term et Long-Term avec Agno
Apprenez à donner une mémoire persistante à vos agents Agno : short-term dans le contexte, long-term avec SQLite et PostgreSQL, et partage de mémoire entre plusieurs agents.
Pourquoi la mémoire change tout
Un agent sans mémoire recommence à zéro à chaque conversation. Il ne sait pas qui vous êtes, ce que vous avez discuté hier, ni les préférences que vous lui avez données la semaine dernière. C'est utile pour des tâches ponctuelles, mais rédhibitoire pour un assistant personnel ou un agent de support.
La mémoire transforme un agent en compagnon de travail qui apprend, mémorise et progresse.
Analogie : Un agent sans mémoire est un Post-it effacé après chaque lecture. Un agent avec mémoire long-term est un carnet de notes que vous gardez pendant des mois.
Les 4 types de mémoire d'un agent
| Type | Durée | Support | Exemple |
|---|---|---|---|
| In-context | Session courante | Fenêtre de contexte | Les 6 derniers échanges |
| Épisodique | Long-term | Base de données | "Le 12 mars, Alice a demandé X" |
| Sémantique | Long-term | Base de données | "Alice est data scientist" |
| Procédurale | Permanent | System prompt | "Toujours répondre en bullet points" |
Short-term : l'historique dans le contexte
La mémoire short-term la plus simple consiste à injecter les échanges précédents dans le contexte du LLM. Agno le gère avec deux paramètres :
add_history_to_context=True: injecte les messages précédents dans le promptnum_history_runs=6: nombre de tours de conversation conservés
from agno.agent import Agent
from agno.models.anthropic import Claude
agent = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
add_history_to_context=True,
num_history_runs=6,
)
agent.print_response("Mon prénom est Alice.")
agent.print_response("Quel est mon prénom ?")
# → L'agent se souvient : "Alice"
Limite : avec num_history_runs=6, vous gardez 6 échanges. Sur des conversations longues, le contexte finit par déborder la fenêtre du modèle. C'est le context window overflow : abordé en fin de cours.
Long-term : persister avec SQLite (local)
Pour mémoriser entre les sessions, il faut une base de données persistante. En développement local, SQLite est idéal : zéro configuration, un seul fichier.
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.anthropic import Claude
db = SqliteDb(db_file="tmp/agent_memory.db")
agent = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
db=db,
update_memory_on_run=True,
enable_session_summaries=True,
add_history_to_context=True,
num_history_runs=6,
)
agent.print_response("Mon prénom est Alice, je travaille en data science.")
agent.print_response("Quel est mon prénom ?")
Les paramètres clés :
| Paramètre | Rôle |
|---|---|
update_memory_on_run=True | Met à jour la mémoire sémantique après chaque run |
enable_session_summaries=True | Génère un résumé de session persisté en base |
add_history_to_context=True | Injecte l'historique dans le contexte |
num_history_runs=6 | Nombre de tours injectés dans le contexte |
Astuce : Le fichier tmp/agent_memory.db survit aux redémarrages. Relancez votre script : l'agent se souvient d'Alice.
Long-term : PostgreSQL en production
Pour la production, remplacez SqliteDb par PostgresDb : l'interface est identique.
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.models.anthropic import Claude
db = PostgresDb(
db_url="postgresql://user:password@localhost:5432/agent_db"
)
agent = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
db=db,
update_memory_on_run=True,
enable_session_summaries=True,
add_history_to_context=True,
num_history_runs=6,
)
PostgresDb offre scalabilité, transactions ACID et connexions concurrentes : indispensable si plusieurs utilisateurs partagent le même agent.
Micro-exercice : agent avec mémoire SQLite persistante
Objectif : créer un agent qui se souvient d'une session à l'autre.
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.anthropic import Claude
import uuid
# Identifiant de session fixe pour retrouver la même conversation
SESSION_ID = "exercice-memoire-001"
USER_ID = "alice"
db = SqliteDb(db_file="tmp/exercice_memory.db")
agent = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
db=db,
session_id=SESSION_ID,
user_id=USER_ID,
update_memory_on_run=True,
enable_session_summaries=True,
add_history_to_context=True,
num_history_runs=10,
)
# Premier run : lancez ce script une première fois
agent.print_response("Je m'appelle Alice. J'apprends Agno pour automatiser mon pipeline ML.")
# Second run : relancez le script, l'agent se souvient
agent.print_response("Rappelle-moi ce que je t'ai dit lors de notre première conversation.")
Étapes :
- Lancez le script une première fois → l'agent répond et mémorise
- Relancez le script → l'agent se souvient du contexte grâce au
session_id - Vérifiez le fichier SQLite avec un outil comme DB Browser for SQLite
Mémoire partagée entre plusieurs agents
Un cas avancé : plusieurs agents spécialisés (recherche, rédaction, validation) qui partagent la même mémoire. La clé est de passer le même db, session_id et user_id.
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.anthropic import Claude
db = SqliteDb(db_file="tmp/shared_memory.db")
SESSION = "projet-rapport-q1"
USER = "alice"
agent_recherche = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
db=db,
session_id=SESSION,
user_id=USER,
update_memory_on_run=True,
description="Tu es un agent de recherche. Tu collectes des informations.",
)
agent_redaction = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
db=db,
session_id=SESSION,
user_id=USER,
update_memory_on_run=True,
description="Tu es un agent rédacteur. Tu synthétises les informations collectées.",
)
agent_recherche.print_response("Collecte les principaux faits sur le marché de l'IA en 2026.")
# L'agent_redaction peut maintenant accéder à ce contexte
agent_redaction.print_response("Rédige un résumé exécutif basé sur notre session de recherche.")
Le session_id est la clé de voûte : tous les agents qui partagent ce même identifiant accèdent au même fil de mémoire. C'est la base des architectures multi-agents cohérentes.
Pièges courants
Context window overflow
Si num_history_runs est trop élevé sur des conversations longues, vous dépassez la fenêtre de contexte du modèle. Symptômes : erreurs 400 de l'API, latence croissante, coûts qui explosent.
Solution : enable_session_summaries=True compresse les anciennes sessions en résumés courts. Gardez num_history_runs entre 4 et 8 pour la plupart des cas.
Mémoires contradictoires
Si l'utilisateur donne des informations contradictoires entre sessions ("je travaille en data science" puis "je suis développeur backend"), le modèle peut stocker les deux et devenir incohérent.
Solution : implémentez une logique de déduplication, ou utilisez update_memory_on_run=True qui laisse le LLM résoudre les contradictions lors de la mise à jour de la mémoire sémantique.
Ne stockez jamais de données sensibles (mots de passe, tokens) dans la mémoire agent. La base SQLite/PostgreSQL n'est pas chiffrée par défaut : traitez-la comme toute autre base de données d'application.
Specialiste IA — Master Intelligence Artificielle
Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.
Continuer a apprendre
MCP : Le Protocole qui Connecte les Agents aux Outils
Découvrez MCP (Model Context Protocol) créé par Anthropic : architecture client-serveur, transports stdio et HTTP, utilisation avec Agno, et création de votre propre serveur MCP.
Tool Use et Function Calling avec Agno
Donnez des "mains" à vos agents IA : apprenez à utiliser les outils intégrés d'Agno (recherche web, fichiers, finance) et à créer vos propres outils custom avec le décorateur @tool.
Comprendre les Agents IA : Au-delà du Simple Chatbot
Découvrez ce qu'est un agent IA, comment il diffère d'un simple chatbot, et les concepts fondamentaux : boucle de raisonnement, outils, mémoire et planification.