Brief IA : Fenêtres de contexte : la fausse mémoire des agents IA dévoilée
💻 Code & Dev

Fenêtres de contexte : la fausse mémoire des agents IA dévoilée

Brief IA
Tom Levy·5 min·4 vues

Les fenêtres de contexte des modèles d'intelligence artificielle agissent comme des carnets de notes sans mémoire persistante, redémarrant à chaque interaction sans conserver d'informations entre les appels API. Cela signifie qu'un agent IA ne se souvient pas des interactions précédentes, même avec un historique dépassant 200 000 tokens, ce qui peut entraîner des complications et un ralentissement dans la génération de réponses. Comprendre ces mécanismes est essentiel pour développer des agents IA plus efficaces et éviter des erreurs coûteuses dans la gestion des informations.

En bref
1Les fenêtres de contexte des modèles IA fonctionnent comme des carnets de notes sans mémoire persistante, redémarrant à chaque interaction.
2La récupération, la compression et la synthèse sont essentielles pour gérer efficacement les données dans ces fenêtres de contexte.
3Pour une véritable mémoire, les agents IA doivent agir comme des gestionnaires de bases de données, pas comme des bases de données elles-mêmes.
💡Pourquoi c'est importantComprendre ces mécanismes est crucial pour développer des agents IA plus efficaces et éviter les erreurs coûteuses dans la gestion des informations.
Le brief IA que lisent les pros

Tu codes avec l’IA ?

Outils, agents et nouveautés dev IA décryptés, chaque soir en 5 min. Gratuit.

Inclus dès l'inscription : notre sélection des meilleurs guides & comparatifs IA.

Choisis ton rythme

Gratuit · Pas de spam · Désabonnement en 1 clic

📄
L'analyse en français

Les fenêtres de contexte : une mémoire trompeuse pour les agents IA

Les fenêtres de contexte dans les modèles d'intelligence artificielle, notamment ceux qui reposent sur des agents et des modèles de langage, sont souvent mal comprises. Elles sont comparables à un carnet de notes sans état, où chaque interaction commence à partir de zéro. Contrairement à une mémoire persistante, ces fenêtres ne conservent aucune information entre les appels API. Ainsi, même avec un historique de conversation dépassant les 200 000 tokens, l'agent ne se souvient pas des interactions précédentes. Chaque nouvelle requête nécessite une relecture complète de l'historique, ce qui peut entraîner des complications.

Les modèles d'IA, face à de longs prompts, se comportent souvent comme un étudiant qui ne prête attention qu'au début et à la fin d'un texte, négligeant les informations intermédiaires. Cela peut créer un effet boule de neige, où l'agent doit constamment relire l'ensemble de l'historique, incluant des détails souvent obsolètes. En termes de performance, cela peut provoquer un ralentissement, un effet de "gel cérébral", où le modèle met du temps à générer une réponse face à un texte volumineux.

Pour illustrer ce processus, considérons un appel API typique. Le modèle, ne conservant aucune mémoire entre les appels, doit recevoir l'intégralité des interactions précédentes pour répondre à une nouvelle question :

model.generate(
    messages=[
        {"role": "user", "content": "Étape 1 : Appelons cette variable `session_id`."},
        {"role": "assistant", "content": "Compris, j'utiliserai `session_id` à partir de maintenant."},
        # ... chaque intervention intermédiaire doit être renvoyée, à chaque fois ...
        {"role": "user", "content": "Étape 47 : Quel nom de variable avons-nous convenu à l'étape 1 ?"}
    ]
)

La récupération : un outil pour une mémoire contextuelle

Les systèmes de génération augmentée par récupération (RAG) agissent comme une étagère bien organisée, permettant de récupérer des données pertinentes au moment opportun, de manière "Just-In-Time". Ces systèmes identifient les documents les plus pertinents pour une question donnée et les intègrent dans la fenêtre de contexte. Toutefois, la similarité vectorielle, utilisée pour déterminer la pertinence, ne garantit pas toujours la vérité sémantique.

Par exemple, si un utilisateur demande à déplacer une réunion à vendredi, puis mentionne qu'Alice est malade jeudi, un moteur de recherche vectoriel pourrait récupérer les deux informations, même si elles se contredisent. Un agent efficace doit être capable de discerner quelle information est la plus actuelle et pertinente. Un pipeline RAG naïf concatène simplement les informations récupérées, laissant le modèle deviner quelle instruction est valide. Un modèle plus sophistiqué résout ces contradictions avant la génération de la réponse, en privilégiant les informations les plus récentes :

retrieved_chunks = [
    {"text": "Déplacer la réunion à vendredi", "timestamp": "2025-01-10T09:00:00"},
    {"text": "Annuler jeudi, Alice est malade", "timestamp": "2025-01-12T14:30:00"}
]
# Réconcilier les morceaux contradictoires avant qu'ils n'atteignent le prompt
latest_relevant = max(retrieved_chunks, key=lambda chunk: chunk["timestamp"])

Cette approche permet à l'agent de fournir des réponses précises et à jour.

Compression : optimiser l'espace dans les fenêtres de contexte

La compression dans le contexte des agents IA est similaire à la compression de fichiers ZIP. Elle consiste à réduire la taille des données tout en préservant les informations essentielles. Cela permet de libérer de l'espace dans la fenêtre de contexte pour d'autres tâches. Des techniques comme la suppression des mots vides ou l'utilisation de modèles de compression spécifiques, tels que LLMLingua, sont employées pour cette optimisation.

Par exemple, une réponse API volumineuse de 15 000 tokens peut être compressée à 5 000 tokens, laissant ainsi plus de place pour le traitement des données principales :

raw_payload = json.dumps(large_api_response)  # environ 15 000 tokens
compressed_payload = compress_with_llmlingua(
    raw_payload,
    target_token_count=5000
)
prompt = f"Données : {compressed_payload}\n\nRépondez à la question de l'utilisateur."

Cette méthode assure que les informations essentielles sont conservées, tout en réduisant leur empreinte dans la fenêtre de contexte.

Synthèse : une abstraction des données

La synthèse diffère de la compression en ce qu'elle remplace les données originales par une abstraction, un processus irréversible, un voyage à sens unique. Elle nécessite un stockage bifurqué, où les transcriptions brutes sont sauvegardées dans un stockage économique, comme des buckets S3, tandis que le résumé synthétisé est utilisé dans le prompt actif.

Ce modèle de stockage bifurqué se traduit par une double écriture : une pour le stockage froid et une pour le prompt actif :

def summarize_turn(raw_transcript, session_id, turn_id):
    # 1. Persister la transcription brute, non abrégée, dans le stockage froid
    s3_client.put_object(
        Bucket="agent-transcripts",
        Key=f"{session_id}/turn_{turn_id}.json",
        Body=raw_transcript
    )
    # 2. Générer un résumé compact pour le prompt actif
    summary = summarizer_model.generate(raw_transcript)
    # 3. Seul le résumé réintègre la fenêtre de contexte
    return summary

Si le détail original est requis ultérieurement, il peut être récupéré depuis le stockage froid. La synthèse, contrairement à la compression, ne nécessite pas de reconstruction à partir du prompt actif.

Vers une véritable persistance de mémoire

La persistance de mémoire dans les agents IA est souvent mal interprétée. Pour qu'un agent possède une véritable mémoire, il doit agir comme un gestionnaire de base de données, plutôt que comme une base de données elle-même. Par exemple, si un utilisateur mentionne que son chien s'appelle Goofy, mais qu'il pourrait être appelé Pluto, l'agent doit être capable de mettre à jour cette information de manière structurée :

{
    "tool": "update_entity_graph",
    "params": {
        "subject": "User_Dog",
        "attribute": "Name",
        "value": "Goofy",
        "notes": "Considérant Pluto comme un nouveau nom potentiel"
    }
}

En adoptant cette approche, les agents IA peuvent gérer efficacement les informations et offrir une expérience utilisateur plus cohérente et fiable.

Suivez Brief IA

L'actu IA du jour, aussi dans votre fil.

Commentaires