Zep - Context Engineering e Memoria per Agenti
Zep è un livello di memoria e context-engineering per agenti IA. Costruito sul motore di grafi di conoscenza temporale Graphiti, acquisisce la cronologia delle conversazioni e i dati aziendali, li fonde in un grafo queryable che traccia come i fatti cambiano nel tempo, e restituisce contesto pertinente e governato con bassa latenza per radicares le risposte degli agenti. Offre un core open-source e un servizio cloud gestito (SOC 2 / HIPAA), con SDK per Python, TypeScript e Go.
Installazione / Setup
| Target | Comando |
|---|
| SDK Python | pip install zep-cloud (cloud) |
| SDK TypeScript | npm install @getzep/zep-cloud |
| Self-hosted (Community Edition) | esegui tramite il Docker Compose del progetto |
| API key | export ZEP_API_KEY=... |
Concetti Principali
| Termine | Significato |
|---|
| Utente | Un utente finale che l”agente serve |
| Thread | Una sessione di conversazione per un utente |
| Grafo | Il grafo di conoscenza temporale di un utente/gruppo |
| Fatto | Una relazione consapevole del tempo nel grafo |
| Blocco di contesto | Contesto assemblato, pronto per l”iniezione |
Utenti e Thread
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")
| Chiamata | Descrizione |
|---|
user.add(...) | Crea un utente |
thread.create(...) | Avvia un thread di conversazione |
thread.add_messages(...) | Aggiungi messaggi (auto-acquisiti nel grafo) |
user.delete(...) | Rimuovi un utente e i suoi dati |
Aggiunta di Memoria
zep.thread.add_messages(
thread_id="t1",
messages=[{"role": "user", "content": "Mi sono trasferito a Berlino.", "name": "Nick"}],
)
# Aggiungi dati aziendali non-chat direttamente al grafo
zep.graph.add(user_id="nick", type="text",
data="Il livello di abbonamento di Nick è Pro.")
| Chiamata | Descrizione |
|---|
thread.add_messages(...) | Acquisisce turni di conversazione |
graph.add(...) | Aggiungi testo/JSON arbitrario al grafo |
| Acquisizione | Entità/fatti estratti e time-stampati automaticamente |
Recupero del Contesto
# Ottieni un blocco di contesto assemblato per il prompt
memory = zep.thread.get_user_context(thread_id="t1")
print(memory.context) # stringa pronta per l''iniezione dei fatti pertinenti
# O interroga direttamente il grafo
edges = zep.graph.search(user_id="nick", query="dove vive Nick?")
| Chiamata | Restituisce |
|---|
thread.get_user_context(...) | Un blocco di contesto sintetizzato |
graph.search(...) | Fatti/archi o nodi che corrispondono a una query |
| Ambito della ricerca | Archi (fatti), nodi (entità) o episodi |
Perché Temporale
Perché Zep è basato su grafi e consapevole del tempo, gli aggiornamenti contraddittori non sovrascrivono ciecamente — i fatti vecchi vengono invalidati con un timestamp e i nuovi registrati, quindi l”agente ottiene la verità attuale mentre la cronologia rimane queryable.
| Capacità | Vantaggio |
|---|
| Invalidazione dei fatti | Il contesto attuale rimane accurato |
| Provenienza | Traccia i fatti alla loro fonte |
| Recupero governato | Contesto a bassa latenza, permissionato |
| Cross-session | La memoria persiste tra i thread |
Flussi di Lavoro Comuni
# Il ciclo dell''agente con la memoria Zep
zep.thread.add_messages(thread_id="t1", messages=user_turn)
context = zep.thread.get_user_context(thread_id="t1").context
# prependi `context` al tuo prompt di sistema LLM, poi genera
Zep vs Altri Livelli di Memoria
| Aspetto | Zep | Mem0 | archivio vettori raw |
|---|
| Modello | Grafo temporale (Graphiti) | Multi-livello | Solo embeddings |
| Fatti temporali | Sì | Limitato | No |
| Assemblaggio del contesto | Blocco integrato | Recupero | Manuale |
| Migliore per | Memoria dell”agente di produzione | Personalizzazione | Ricordo semplice |
Risorse