Alejandría

Busca en Alejandría

Plataformas

Graphiti

Framework abierto de grafos temporales que conserva relaciones y cambios de hechos para agentes.

01

En pocas palabras

Framework abierto de grafos temporales que conserva relaciones y cambios de hechos para agentes.

Qué problema resuelve

Memoria que mezcla hechos antiguos y actuales o pierde su procedencia.

Cuándo utilizarlo

Agentes con información cambiante. Ejemplo: distinguir el responsable actual de una cuenta del anterior.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

Incorpora episodios y deriva entidades y relaciones con ventanas temporales. Combina búsqueda semántica, textual y recorridos del grafo para recuperar contexto.

Ejemplo de uso

Registrar que una cuenta cambió de asesor en septiembre. Una consulta actual recupera al nuevo responsable; una auditoría histórica puede recuperar la relación vigente en agosto.

Modelo bitemporal

Cada relación (arista) guarda dos líneas de tiempo:

Línea temporal Campos Responde a
Validez valid_at, invalid_at ¿Cuándo fue cierto este hecho en el mundo?
Transacción created_at, expired_at ¿Cuándo lo supo el sistema y cuándo lo dejó de considerar vigente?

Cuando llega información contradictoria («desde septiembre el asesor es Ana»), Graphiti no borra la relación anterior: la invalida con fecha, de modo que se puede reconstruir el estado en cualquier momento.

Ejemplo de uso

from datetime import datetime, timezone
from graphiti_core import Graphiti
from graphiti_core.nodes import EpisodeType

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

await graphiti.add_episode(
    name="reasignacion-cuenta-42",
    episode_body="La cuenta 42 pasa a ser atendida por la asesora Ana Ruiz desde el 1 de septiembre.",
    source=EpisodeType.text,
    source_description="CRM, nota del supervisor",
    reference_time=datetime(2026, 9, 1, tzinfo=timezone.utc),
    group_id="cliente-42",
)

resultados = await graphiti.search("¿Quién atiende la cuenta 42?", group_ids=["cliente-42"])
for arista in resultados:
    print(arista.fact, arista.valid_at, arista.invalid_at)

Los episodios pueden ser texto, mensajes de chat o JSON estructurado. Un LLM extrae entidades y relaciones; el grafo se guarda en Neo4j, FalkorDB, Kuzu o Amazon Neptune.

Búsqueda híbrida

La recuperación combina similitud semántica (embeddings), búsqueda por palabras clave (BM25) y recorrido del grafo desde un nodo central, con reordenación de resultados. Esto reduce la dependencia de llamadas al LLM en el momento de consulta, lo que mejora la latencia.

Tipos de entidad propios

Se pueden definir entidades con modelos de Pydantic (por ejemplo Cliente, Credito, Asesor con sus atributos) para que la extracción produzca un esquema coherente en lugar de entidades genéricas.

Cuándo usarlo frente a otras memorias

Necesidad Opción
Buscar fragmentos de documentos estáticos RAG con vector store
Responder preguntas globales sobre un corpus GraphRAG
Memoria de agente que cambia con el tiempo Graphiti

Incluye un servidor MCP para usarlo como memoria desde asistentes y agentes de código.

Criterios de implementación

Validar contradicciones y errores de extracción. Elegir un backend compatible, fijar versiones y aplicar aislamiento por usuario o organización; no asumir latencias universales.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.