Ir al contenido

Graphiti - Gráficos de Conocimiento Temporal para Agentes

Graphiti - Gráficos de Conocimiento Temporal para Agentes

Graphiti (por Zep) es un marco de código abierto para construir y consultar gráficos de conocimiento temporal para agentes IA. A diferencia de un gráfico estático, Graphiti rastrea cómo cambian los hechos con el tiempo: cada arista lleva intervalos de validez, así el gráfico sabe no solo qué es verdadero sino cuándo fue verdadero, preservando procedencia e historia. Ingiere datos incrementalmente — los episodios se agregan sin recomputar todo el gráfico — lo que lo hace bien adaptado a la memoria que debe razonar sobre hechos en evolución.

Requisitos

  • Una base de datos de gráficos: Neo4j o FalkorDB
  • Un proveedor LLM (OpenAI, Anthropic, etc.) para extracción de entidades/relaciones
  • Python 3.10+

Instalación

MétodoComando
pippip install graphiti-core
Con FalkorDBpip install "graphiti-core[falkordb]"
Establecer clavesexport OPENAI_API_KEY=... y variables de entorno de BD de gráficos
Verificarpython -c "import graphiti_core; print('ok')"

Conceptos Principales

TérminoSignificado
EpisodioUna unidad de datos ingeridos (mensaje, texto, JSON)
NodoUna entidad extraída de episodios
Arista (hecho)Una relación con tiempo de validez (valid_at/invalid_at)
Bi-temporalRastrea tanto el tiempo del evento como el tiempo de ingesta
ComunidadClústeres de entidades relacionadas

Inicializar y Agregar Episodios

from graphiti_core import Graphiti
from graphiti_core.nodes import EpisodeType
import asyncio

async def main():
    graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")
    await graphiti.build_indices_and_constraints()

    await graphiti.add_episode(
        name="msg1",
        episode_body="Nick joined Acme as CTO in 2024.",
        source=EpisodeType.text,
        reference_time=datetime.now(),
        source_description="chat",
    )

asyncio.run(main())
LlamadaDescripción
Graphiti(uri, user, pass)Conectar a la BD de gráficos
build_indices_and_constraints()Configuración de esquema de una sola vez
add_episode(...)Ingerir datos; entidades/aristas extraídas automáticamente
add_episode_bulk(...)Ingesta por lotes

Búsqueda de Memoria

# Búsqueda híbrida: semántica + BM25 + gráfico, reordenada
results = await graphiti.search("Where does Nick work?")
for r in results:
    print(r.fact, r.valid_at)
BúsquedaComportamiento
search(query)Búsqueda de aristas híbrida (semántica + palabra clave + gráfico)
Búsqueda de nodosRecuperar entidades
ReordenamientoOpciones de RRF / distancia de gráfico / cross-encoder
Nodo centralSesgar resultados alrededor de una entidad específica

Razonamiento Temporal

El diferenciador: cuando un hecho cambia, Graphiti no lo borra — marca la arista anterior como inválida y agrega la nueva, así el historial se preserva.

CapacidadUso
Invalidación de hechosLos hechos antiguos obtienen invalid_at establecido cuando se contradicen
Consultas en un punto en el tiempo”¿Qué era verdadero a partir de la fecha X?”
ProcedenciaRastrear un hecho a su episodio de origen
Tipos de entidades personalizadosDefinir modelos Pydantic para extracción tipificada

Integración

DestinoCómo
ZepGraphiti es el motor bajo el servicio de memoria de Zep
Marcos de agentesUsar como herramienta de memoria/recuperación
MCPEl servidor MCP de Graphiti expone memoria a agentes
PersonalizadoConsultar el gráfico directamente para contexto

Flujos de Trabajo Comunes

# Memoria de agente que sobrevive a hechos cambiantes
await graphiti.add_episode(name="e1", episode_body="Nick uses Postgres.", ...)
# más tarde, el hecho cambia:
await graphiti.add_episode(name="e2", episode_body="Nick migrated to SQLite.", ...)
# Graphiti invalida el hecho de Postgres y registra el de SQLite con tiempo
ctx = await graphiti.search("What database does Nick use now?")

Graphiti vs Otros Marcos de Memoria

AspectoGraphitiCogneeMem0
Fortaleza principalHechos temporal/bi-temporalECL nativo de gráficoPersonalización
HistorialPreservado con tiempos de validezSnapshots de gráficoEnfoque reciente
BackendNeo4j / FalkorDBMulti-tiendaVector/gráfico/KV
Mejor paraHechos que cambian con el tiempoRazonamiento de gráfico localMemoria conversacional

Recursos