Zep - Ingeniería de Contexto y Memoria para Agentes
Zep es una capa de ingeniería de contexto y memoria para agentes IA. Construida sobre el motor de gráfico de conocimiento temporal Graphiti, ingiere historial de conversaciones y datos empresariales, los fusiona en un gráfico consultable que rastrea cómo cambian los hechos con el tiempo, y devuelve contexto relevante y gobernado con baja latencia para fundamentar respuestas de agentes. Ofrece un núcleo de código abierto y un servicio en la nube administrado (SOC 2 / HIPAA), con SDKs para Python, TypeScript y Go.
Instalación / Configuración
| Destino | Comando |
|---|
| SDK de Python | pip install zep-cloud (nube) |
| SDK de TypeScript | npm install @getzep/zep-cloud |
| Alojado automáticamente (Community Edition) | ejecutar a través de Compose de Docker del proyecto |
| Clave API | export ZEP_API_KEY=... |
Conceptos Principales
| Término | Significado |
|---|
| Usuario | Un usuario final al que el agente sirve |
| Hilo | Una sesión de conversación para un usuario |
| Gráfico | El gráfico de conocimiento temporal de un usuario/grupo |
| Hecho | Una relación consciente del tiempo en el gráfico |
| Bloque de contexto | Contexto ensamblado y listo para inyectar |
Usuarios y Hilos
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")
| Llamada | Descripción |
|---|
user.add(...) | Crear un usuario |
thread.create(...) | Iniciar un hilo de conversación |
thread.add_messages(...) | Agregar mensajes (auto-ingestados al gráfico) |
user.delete(...) | Eliminar un usuario y sus datos |
Agregando Memoria
zep.thread.add_messages(
thread_id="t1",
messages=[{"role": "user", "content": "I moved to Berlin.", "name": "Nick"}],
)
# Agregar datos empresariales no-chat directamente al gráfico
zep.graph.add(user_id="nick", type="text",
data="Nick's subscription tier is Pro.")
| Llamada | Descripción |
|---|
thread.add_messages(...) | Ingerir turnos de conversación |
graph.add(...) | Agregar texto/JSON arbitrario al gráfico |
| Ingesta | Entidades/hechos extraídos y marcados con tiempo automáticamente |
Recuperando Contexto
# Obtener un bloque de contexto ensamblado para el prompt
memory = zep.thread.get_user_context(thread_id="t1")
print(memory.context) # cadena lista para inyectar de hechos relevantes
# O consultar el gráfico directamente
edges = zep.graph.search(user_id="nick", query="where does Nick live?")
| Llamada | Devuelve |
|---|
thread.get_user_context(...) | Un bloque de contexto sintetizado |
graph.search(...) | Hechos/aristas o nodos coincidentes con una consulta |
| Alcance de búsqueda | aristas (hechos), nodos (entidades), o episodios |
Por Qué Temporal
Porque Zep se basa en gráficos y es consciente del tiempo, las actualizaciones contradictorias no sobrescriben ciegamente — los hechos antiguos se invalidan con una marca de tiempo y se registran los nuevos, así el agente obtiene la verdad actual mientras el historial permanece consultable.
| Capacidad | Beneficio |
|---|
| Invalidación de hechos | El contexto actual se mantiene preciso |
| Procedencia | Rastrear hechos a su origen |
| Recuperación gobernada | Contexto de baja latencia y con permisos |
| Sesiones cruzadas | La memoria persiste a través de hilos |
Flujos de Trabajo Comunes
# El bucle del agente con memoria de Zep
zep.thread.add_messages(thread_id="t1", messages=user_turn)
context = zep.thread.get_user_context(thread_id="t1").context
# anteponer `context` al prompt del sistema LLM, luego generar
Zep vs Otras Capas de Memoria
| Aspecto | Zep | Mem0 | almacén de vectores bruto |
|---|
| Modelo | Gráfico temporal (Graphiti) | Multi-tienda | Solo incrustaciones |
| Hechos temporales | Sí | Limitados | No |
| Ensamble de contexto | Bloque incorporado | Recuperación | Manual |
| Mejor para | Memoria de agente en producción | Personalización | Recuperación simple |
Recursos