AI Memory
Graphiti — Temporal Knowledge Graphs for AI Agents logo

Graphiti — grafos de conocimiento temporales para Agent de AI

Graphiti construye un grafo de conocimiento temporal a partir de datos en streaming — cada arista tiene una ventana de validez. Los Agent pueden consultar no solo "qué es verdad" sino también "qué era verdad y cuándo".

Why Graphiti

La mayoría de los sistemas de memoria sobrescriben los hechos cuando cambian. Graphiti conserva el historial. Cuando un usuario dice "me mudé a Tokio", Graphiti no borra el antiguo hecho "vive en Berlín" — fija su timestamp valid_to y abre una nueva arista. Ahora tu Agent puede responder de forma natural a "¿dónde vivía William antes de Tokio?".

La apuesta técnica es que las aristas bi-temporales (valid_from / valid_to más created_at / invalidated_at) son la primitiva correcta para la memoria de Agent. Refleja cómo el modelado de datos relacional gestiona el historial, adaptado al modelo entidad-relación que los LLMs producen naturalmente al extraer hechos de prosa.

Graphiti está construido por el equipo de Zep pero publicado como librería independiente. Úsalo standalone cuando quieras memoria graph-first sin el encuadre por sesiones de Zep, o intégralo en pipelines RAG más amplios que necesiten el modelo de arista temporal.

Quick Start — Neo4j + Graphiti

Graphiti extrae entidades y aristas tipadas de cada episodio, luego las concilia con el grafo existente. Cuando el segundo episodio dice que William se mudó a Singapur, Graphiti invalida la antigua arista Shenzhen (valid_to = 2026-04-14) y crea una nueva arista Singapur — el historial se preserva.

# pip install graphiti-core
# docker run -p 7687:7687 -e NEO4J_AUTH=neo4j/password neo4j:5
import asyncio
from datetime import datetime, timezone
from graphiti_core import Graphiti
from graphiti_core.nodes import EpisodeType

g = Graphiti(
    "bolt://localhost:7687", "neo4j", "password",
)

async def main():
    await g.build_indices_and_constraints()

    # Add episodes (raw conversations or docs) — Graphiti extracts entities + edges
    await g.add_episode(
        name="intro",
        episode_body="William is the founder of KeepRule and lives in Shenzhen.",
        source=EpisodeType.text,
        reference_time=datetime(2026, 1, 10, tzinfo=timezone.utc),
        source_description="onboarding chat",
    )
    await g.add_episode(
        name="move",
        episode_body="William just moved from Shenzhen to Singapore.",
        source=EpisodeType.text,
        reference_time=datetime(2026, 4, 14, tzinfo=timezone.utc),
        source_description="weekly standup",
    )

    # Temporal query — agents can ask "what was true at a point in time"
    hits = await g.search(
        "Where does William live?",
        center_node_uuid=None,
    )
    for edge in hits:
        print(edge.fact, "valid:", edge.valid_at, "invalid:", edge.invalid_at)

asyncio.run(main())

Características clave

Aristas bi-temporales

Cada arista rastrea tanto el tiempo del evento (valid_from / valid_to — cuándo el hecho era verdadero en el mundo) como el tiempo del sistema (created_at / invalidated_at — cuándo te enteraste). Patrón bitemporal clásico, adaptado a los datos extraídos por LLM.

Ingesta en streaming

Diseñado para ingerir episodios de forma incremental — conversaciones, documentos, eventos de API. Sin reindexación por batch al llegar nuevos datos. La extracción vía LLM + el merge en el grafo ocurren por episodio.

Recuperación híbrida

Recorrido de grafo (walks de relaciones, BFS/DFS) combinado con similitud vectorial sobre las descripciones de nodos. Las consultas pueden ser estructurales ("¿quién trabajó con X?"), semánticas o ambas.

Flexibilidad de esquema

Los tipos de entidades y relaciones los extrae el LLM, no se declaran de antemano. Funciona en distintos dominios — la misma librería para soporte al cliente, historias clínicas o memoria de codebase.

Backend Neo4j o FalkorDB

Bases de datos de grafo production-grade. Graphiti hace la extracción y el merging inteligentes; la DB gestiona almacenamiento, transacciones y ejecución de queries.

Integración con Zep

Zep usa Graphiti por debajo para su servicio de grafo. Puedes usar uno u otro de forma independiente o juntos — Zep para memoria de sesión gestionada, Graphiti para pipelines graph-first personalizados.

Comparación

 Memory ModelHistoryQuery TypeBackend
GraphitiestaTemporal knowledge graphFull bitemporal historyGraph + vector hybridNeo4j / FalkorDB
mem0Vector + optional graphOverwrites on updateVector similarityQdrant / Chroma / etc.
Neo4j GraphRAGStatic knowledge graphSnapshot at ingestGraph + vectorNeo4j
Microsoft GraphRAGCommunity-detected graphRebuilt on re-indexHierarchical summariesFilesystem / any DB

Casos de uso

01. Salud y compliance

Escenarios donde los hechos históricos importan legalmente — "¿qué medicación tomaba el paciente en enero?". Las aristas bitemporales son el patrón estándar para datos regulados, ahora disponible para los Agent LLM.

02. CRM e historial de cuentas

Asistentes de ventas que necesitan razonar sobre la evolución de la relación: "¿quién decidió ampliar el contrato y cuál era su rol en ese momento?"

03. Contexto de ingeniería

Agent de code intelligence que rastrean qué equipo era dueño de qué servicio a lo largo del tiempo, incluyendo reorgs y traspasos de ownership. Las tablas simples de "current owner" pierden el historial previo a la reorg.

Precios y licencia

Graphiti: open source Apache 2.0. Sin tarifa de servicio — self-host junto a Neo4j Community (gratis) o FalkorDB (basado en Redis, gratis). Pagas las llamadas de API LLM de extracción y la infra de graph DB.

Coste de graph DB: el tier gratis de Neo4j AuraDB cubre grafos pequeños (~200K nodos). Para producción, Neo4j AuraDB Professional empieza alrededor de 65 $/mes, o self-host Neo4j Community en tu propia infra.

Coste de extracción LLM: cada episodio dispara una llamada de extracción de entidades/aristas. ~0,001 $ por episodio en gpt-4o-mini. El modelo de extracción es configurable.

Activos relacionados en TokRepo

Preguntas frecuentes

Graphiti vs Microsoft GraphRAG — ¿en qué se diferencian?+

Microsoft GraphRAG construye un grafo estático a partir de un corpus de documentos en el momento del indexado y consulta resúmenes jerárquicos. Graphiti construye un grafo temporal en evolución a partir de episodios en streaming y consulta aristas individuales con filtros temporales. Usa GraphRAG para grandes bases de conocimiento estáticas; usa Graphiti para memoria de Agent que cambia con el tiempo.

¿Tengo que conocer bases de datos de grafo para usar Graphiti?+

No — Graphiti abstrae las consultas Cypher/grafo detrás de una API Python. Escribes llamadas .add_episode() y .search(). Saber Neo4j ayuda a la hora de depurar o escribir queries custom, pero no es requisito para el uso típico.

¿Graphiti puede reemplazar mi base vectorial?+

Para memoria, sí — Graphiti embebe las descripciones de nodos y hace búsqueda híbrida grafo + vectorial internamente. Para RAG generalista sobre documentos, mantén una vector DB aparte. Graphiti está optimizado para memoria centrada en entidades, no para recuperación de documentos largos.

¿Graphiti está listo para producción?+

Graphiti es usado en producción por el equipo de Zep (alimenta su servicio de grafo) y por una lista creciente de terceros listados en el README de GitHub. La API es estable; cuenta con scripts de migración ocasionales a medida que la librería madure.

¿Con qué LLMs funciona Graphiti?+

OpenAI, Anthropic Claude, Google Gemini, Azure OpenAI y modelos locales vía un endpoint compatible con OpenAI (Ollama, vLLM). Configura el cliente LLM en el constructor de Graphiti — extracción y búsqueda usan el mismo cliente por defecto.

Comparar alternativas