IntermédiaireAgents IA
20 min de lecture10 vues

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

TypeDuréeSupportExemple
In-contextSession couranteFenêtre de contexteLes 6 derniers échanges
ÉpisodiqueLong-termBase de données"Le 12 mars, Alice a demandé X"
SémantiqueLong-termBase de données"Alice est data scientist"
ProcéduralePermanentSystem 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 prompt
  • num_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ètreRôle
update_memory_on_run=TrueMet à jour la mémoire sémantique après chaque run
enable_session_summaries=TrueGénère un résumé de session persisté en base
add_history_to_context=TrueInjecte l'historique dans le contexte
num_history_runs=6Nombre 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 :

  1. Lancez le script une première fois → l'agent répond et mémorise
  2. Relancez le script → l'agent se souvient du contexte grâce au session_id
  3. 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.