Aller au contenu

Zep - Ingénierie du contexte et mémoire pour agents

Zep - Ingénierie du contexte et mémoire pour agents

Zep est une couche de mémoire et d’ingénierie du contexte pour les agents IA. Construite sur le moteur de graphe de connaissances temporel Graphiti, elle ingère l’historique des conversations et les données commerciales, les fusionne dans un graphe interrogeable qui suit comment les faits changent au fil du temps, et retourne un contexte pertinent et gouverné avec une faible latence pour ancrer les réponses des agents. Elle offre un cœur open-source et un service cloud géré (SOC 2 / HIPAA), avec des SDK pour Python, TypeScript et Go.

Installation / Configuration

CibleCommande
Python SDKpip install zep-cloud (cloud)
TypeScript SDKnpm install @getzep/zep-cloud
Self-hosted (Community Edition)exécuter via le Docker Compose du projet
API keyexport ZEP_API_KEY=...

Concepts clés

TermeSignification
UserUn utilisateur final que l’agent sert
ThreadUne session de conversation pour un utilisateur
GraphLe graphe de connaissances temporel d’un utilisateur/groupe
FactUne relation consciente du temps dans le graphe
Context blockContexte assemblé, prêt à injecter

Utilisateurs et threads

from zep_cloud.client import Zep
zep = Zep(api_key="...")

zep.user.add(user_id="nick", email="nick@example.com")
zep.thread.create(thread_id="t1", user_id="nick")
AppelDescription
user.add(...)Créer un utilisateur
thread.create(...)Démarrer un thread de conversation
thread.add_messages(...)Ajouter des messages (ingestion automatique dans le graphe)
user.delete(...)Supprimer un utilisateur et ses données

Ajouter de la mémoire

zep.thread.add_messages(
    thread_id="t1",
    messages=[{"role": "user", "content": "Je me suis installé à Berlin.", "name": "Nick"}],
)

# Ajouter les données commerciales non-chat directement au graphe
zep.graph.add(user_id="nick", type="text",
              data="Le niveau d'abonnement de Nick est Pro.")
AppelDescription
thread.add_messages(...)Ingérer les tours de conversation
graph.add(...)Ajouter du texte/JSON arbitraire au graphe
IngestionEntités/faits extraits et horodatés automatiquement

Récupérer le contexte

# Obtenir un bloc de contexte assemblé pour l'invite
memory = zep.thread.get_user_context(thread_id="t1")
print(memory.context)   # chaîne prête à injecter des faits pertinents

# Ou interroger directement le graphe
edges = zep.graph.search(user_id="nick", query="où Nick vit-il ?")
AppelRetour
thread.get_user_context(...)Un bloc de contexte synthétisé
graph.search(...)Faits/arêtes ou nœuds correspondant à une requête
Search scopearêtes (faits), nœuds (entités), ou épisodes

Pourquoi temporel

Parce que Zep est basé sur un graphe et conscient du temps, les mises à jour contradictoires ne remplacent pas aveuglément — les anciens faits sont invalidés avec un timestamp et les nouveaux enregistrés, donc l’agent obtient la vérité actuelle tandis que l’historique reste interrogeable.

CapacitéBénéfice
Fact invalidationLe contexte actuel reste précis
ProvenanceRetracer les faits jusqu’à leur source
Governed retrievalContexte à faible latence et permissionnné
Cross-sessionLa mémoire persiste entre les threads

Workflows courants

# La boucle d'agent avec la mémoire Zep
zep.thread.add_messages(thread_id="t1", messages=user_turn)
context = zep.thread.get_user_context(thread_id="t1").context
# ajouter en préfixe le `context` à votre invite système LLM, puis générer

Zep vs autres couches de mémoire

AspectZepMem0magasin de vecteurs brut
ModèleGraphe temporel (Graphiti)Multi-tierEmbeddings uniquement
Faits temporelsOuiLimitéNon
Assembly du contexteBloc intégréRécupérationManuel
Meilleur pourMémoire d’agent en productionPersonnalisationRappel simple

Ressources