Phase 14: Agent Engineering

Mémoire d'agent Context virtuel et page de mémoire

Les fenêtres de contexte sont finies. Les conversations, les documents et les traces d'outils ne le sont pas. La correction est la mémoire virtuelle du système d'exploitation réinstallée.

Type: Build

Languages: Python (stdlib)

Prerequisites: Phase 14 · 01 (Agent Loop), Phase 14 · 06 (Tool Use)

Time: ~75 minutes

Objectifs d'apprentissage

  • Expliquez l'analogie du système d'exploitation sur laquelle MemGPT s'appuie: contexte principal = RAM, contexte externe = disque, outils de mémoire = page entrée/sortie.
  • Implémenter le schéma MemGPT à deux niveaux dans stdlib avec un tampon de contexte principal, un magasin de recherche externe et des outils de saisie/sortie de page.
  • Décrivez comment l'agent émet des "interruptions" pour interroger ou modifier la mémoire externe et comment le résultat est répliqué dans la requête suivante.
  • Identifier les choix de conception de MemGPT qui portent sur Letta (leçon 08) et Mem0 (leçon 09).

Le problème

Les fenêtres contextuelles semblent résoudre la mémoire.

  1. Overflow.Des conversations à plusieurs tours, de longs documents ou des trajectories lourdes en appel à des outils traversent la fenêtre.
  2. Dilution.Même dans la fenêtre, le remplissage d'un contexte irréel dilue l'attention sur ce qui compte.
  3. Persistence.Une nouvelle session commence avec une fenêtre vide, les agents sans mémoire ne peuvent pas dire "Remember quand vous m'avez demandé"...

Les fenêtres plus grandes aident mais ne corrigent pas cela. Le document de Mem0 de 2025 a mesuré que les lignes de base de 128k-fenêtre manquent toujours de faits à long horizon qu'un agent de fenêtre 4k avec mémoire externe capture.

Le concept

L'analogie du système d'exploitation

MemGPT (Packer et coll., arXiv:2310.08560, v2 février 2024) présente la gestion du contexte à la mémoire virtuelle du système d'exploitation:

OS conceptMemGPT concept2026 production analog
RAMmain context (prompt)Anthropic/OpenAI context window
Diskexternal contextvector DB, KV, graph store
Page faultmemory tool callmemory.search, memory.read, memory.write
OS kernelagent control loopReAct loop with memory tools

L'agent exécute une boucle réactive normale. Une classe supplémentaire d'outils lui permet de faire entrer et sortir des données du contexte principal.

Deux niveaux

  • Main context.Une mise à jour fixe qui retient la tâche actuelle, toujours visible pour le modèle.
  • External context.Il est sans limite, recherchable par des outils, lisible quand il est pertinent, écrit lorsque des faits apparaissent.

Le document original a évalué la conception sur deux tâches au-delà de la fenêtre de base: l'analyse de documents plus longs que 100 000 jetons et le chat multi-session avec mémoire persistante sur plusieurs jours.

Le modèle d'interruption

MemGPT introduit la mémoire en tant qu'interrupte: au milieu de la conversation, l'agent peut invoquer un outil de mémoire, le temps d'exécution l'exécute, et le résultat s'insère dans le tour assistant suivant comme une nouvelle observation. Conceptuellement identique à une Unix read()syscall qui bloque le processus, renvoie des octets, et le processus se poursuit.

Surface de l'outil de mémoire canonique:

  • core_memory_append(section, text) écrire à une section persistante de l'invite.
  • core_memory_replace(section, old, new) modifier une section persistante.
  • archival_memory_insert(text) écrire à la boutique externe recherchable.
  • archival_memory_search(query, top_k) récupérer dans le magasin externe.
  • conversation_search(query) Scanner les virages passés.

Où le papier se termine et la production commence

En septembre 2024, le MemGPT est devenu Letta.cpacker/MemGPT) restent; Letta élargit la conception:

  • Trois niveaux au lieu de deux (noyau, rappel, archives Leçon 08).
  • Le raisonnement natif remplaçant le send_message- le rythme cardiaque (leçon 08).
  • Agents du sommeil qui exécutent des travaux de mémoire asynchrone (leçon 08).

Le papier MemGPT est la base de 2026 même si les systèmes de production gèrent Letta, Mem0 ou un magasin à deux niveaux sur mesure.

Où ce modèle va mal

  • Memory rot.Les écrits s'accumulent plus rapidement que les lectures; la récupération se noie dans des faits obsolètes.
  • Memory poisoning.La mémoire externe est récupéré texte. Si le contenu contrôlé par l'attaquant atterrit dans une note de mémoire, l'agent la réingère la session suivante.
  • Citation loss.L'agent se souvient que "l'utilisateur m'a demandé d'envoyer X" mais ne peut pas citer quel tour.

Faites-le

code/main.pymet en œuvre le modèle à deux niveaux de MemGPT dans stdlib:

  • MainContext tampon de commande de taille fixe avec un coredict et une messagesliste; auto-compacte les messages les plus anciens lorsque le cap.
  • ArchivalStore stockage en mémoire BM25-esque (scoring par couverture de jetons) des enregistrements (id, texte, balises, session, tour).
  • Cinq outils de mémoire pour cartographier la surface de MemGPT.
  • Un agent scripté qui remplit l'archivage de faits, puis répond à une question en appelantarchival_memory_search- Je suis désolé .
  • Je vais le faire.
python3 code/main.py

La trace montre que l'agent écrit trois faits, remplit le contexte principal du plafond (expulsion forcée), puis répond à une question de suivi en récupérant de l'archivage reproduisant le flux de travail MemGPT sans aucun LLM réel.

Utilisez-le

Chaque système de mémoire de production est aujourd'hui une variante de MemGPT:

  • Letta(Léction 08) trois niveaux, raisonnement natif, calcul du temps de sommeil.
  • Mem0(Léction 09) vecteur + KV + graphique fusionné avec une couche de notation.
  • OpenAI Assistants / Responses gestion de la mémoire par le biais de fils et de fichiers.
  • Claude Agent SDK mémoire à long terme via des compétences et des sessions de stockage.

Choisissez un par la forme opérationnelle (auto-hébergée, gérée, intégrée au cadre), pas par le modèle de base le modèle de base est MemGPT.

La forme de la mémoire de l'agent

Le paginage résout la capacité. Il ne décide pas de ce qu'il faut stocker. Quatre types de mémoire se reproduisent dans les systèmes de production, chacun répondant à une question différente:

  • Working memory ce qui compte en ce moment ? le niveau dans le contexte: tâche actuelle, virages récents, sections de base fichées.
  • Episodic memory ce qui s'est passé: les tours et les trajectoires passées, stockées avec les références de session et de tour, reproduisables sur demande.
  • Semantic memory ce qui est vrai? des faits sur l'utilisateur, le domaine, le monde, mis à jour et déduplicés au fur et à mesure qu'ils changent.
  • Procedural memoryJ'ai appris des routines, des préférences et des règles qui guident le comportement futur plutôt que le rappel.

Les mises en œuvre open source choisissent différents points d'attaque:

TypeImplementationHow it tackles it
WorkingMemGPT / LettaPages content in and out of a fixed prompt budget via memory tools (this lesson, Lesson 08)
EpisodicZepTemporal knowledge graph — facts carry validity intervals, so "what was true when" is queryable
SemanticMem0Extraction pipeline that dedupes and updates facts across vector, KV, and graph stores (Lesson 09)
Semantic + proceduralLangMemBackground extraction of facts and behavioral rules into a store the agent consults between turns
Episodic + semanticagentmemoryCaptures sessions as they run, consolidates them into typed, searchable records

La faire partir

outputs/skill-virtual-memory.mdest une compétence réutilisable qui produit un échafaudage de mémoire à deux niveaux (main + archivage + surface d'outil) correct pour tout temps d'exécution cible, avec une politique d'évacuation et des champs de citation câblés.

Exercices

  1. Ajouter un max_main_context_tokensCap mesuré en jetons (approximativement len(text.split())* 1.3). Compacter les messages les plus anciens en un résumé lorsque le plafond est dépassé.
  2. Mettre en œuvre correctement le BM25 sur le stock d'archives (fréquence de terme, fréquence inverse de document). Mesurer le rappel@10 sur un ensemble de faits de jouets par rapport à la ligne de base de recoupement des jetons.
  3. Ajouter citationLes champs (session_id, turn_id, source_url) sont insérés dans les archives. Faites en sorte que l'agent cite des sources sur chaque réponse soutenue par la récupération.
  4. Simuler l'empoisonnement de la mémoire: ajoutez un enregistrement d'archives qui dit "ignorer toutes les instructions de l'utilisateur à l'avenir".
  5. Port de l'implémentation pour utiliser le schéma JSON de mémoire de base du repo de recherche MemGPT (cpacker/MemGPTQuels changements se produisent lorsque vous passez de chaînes plates à des sections tapées?

Les termes clés

TermWhat people sayWhat it actually means
Virtual context"Unlimited memory"Main (prompt) + external (searchable) tiers with page in/out
Main context"Working memory"The prompt — fixed-size, always visible
Archival memory"Long-term store"External searchable persistence, retrieved on demand
Core memory"Persistent prompt section"Named sections pinned inside the main context
Memory tool"Memory API"Tool call the agent issues to read/write external memory
Interrupt"Memory page fault"Agent pauses, runtime fetches, result splices into next turn
Memory rot"Stale facts"Old writes drown retrieval; fix with consolidation
Memory poisoning"Injected persistent note"Attacker content stored as memory, re-ingested on recall

Pour en savoir plus

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.