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
| Cible | Commande |
|---|
| Python SDK | pip install zep-cloud (cloud) |
| TypeScript SDK | npm install @getzep/zep-cloud |
| Self-hosted (Community Edition) | exécuter via le Docker Compose du projet |
| API key | export ZEP_API_KEY=... |
Concepts clés
| Terme | Signification |
|---|
| User | Un utilisateur final que l’agent sert |
| Thread | Une session de conversation pour un utilisateur |
| Graph | Le graphe de connaissances temporel d’un utilisateur/groupe |
| Fact | Une relation consciente du temps dans le graphe |
| Context block | Contexte 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")
| Appel | Description |
|---|
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.")
| Appel | Description |
|---|
thread.add_messages(...) | Ingérer les tours de conversation |
graph.add(...) | Ajouter du texte/JSON arbitraire au graphe |
| Ingestion | Entité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 ?")
| Appel | Retour |
|---|
thread.get_user_context(...) | Un bloc de contexte synthétisé |
graph.search(...) | Faits/arêtes ou nœuds correspondant à une requête |
| Search scope | arê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 invalidation | Le contexte actuel reste précis |
| Provenance | Retracer les faits jusqu’à leur source |
| Governed retrieval | Contexte à faible latence et permissionnné |
| Cross-session | La 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
| Aspect | Zep | Mem0 | magasin de vecteurs brut |
|---|
| Modèle | Graphe temporel (Graphiti) | Multi-tier | Embeddings uniquement |
| Faits temporels | Oui | Limité | Non |
| Assembly du contexte | Bloc intégré | Récupération | Manuel |
| Meilleur pour | Mémoire d’agent en production | Personnalisation | Rappel simple |
Ressources