Zum Inhalt springen

Graphiti - Temporal Knowledge Graphs for Agents Cheatsheet

Graphiti - Temporal Knowledge Graphs for Agents Cheatsheet

Graphiti (von Zep) ist ein Open-Source Framework für die Konstruktion und Abfragung von temporal Knowledge Graphs für AI Agenten. Im Gegensatz zu einem statischen Graph verfolgst Graphiti, wie Fakten sich über Zeit ändern: jede Edge trägt Validitäts Intervalle, damit der Graph nicht nur weiß, was wahr ist, sondern wann es wahr war, Nachverfolgung und Geschichte bewahrend. Es nimmt Daten inkrementell auf — Episodes werden ohne Neuberechnung des gesamten Graphs hinzugefügt — was es gut für Speicher eignet, der über Zeit evolvierenden Fakten Grund muss.

Anforderungen

  • Eine Graph Datenbank: Neo4j oder FalkorDB
  • Ein LLM Provider (OpenAI, Anthropic, usw.) für Entity/Relationship Extraction
  • Python 3.10+

Installation

MethodeBefehl
pippip install graphiti-core
Mit FalkorDBpip install "graphiti-core[falkordb]"
Setzen Sie Schlüsselexport OPENAI_API_KEY=... und Graph DB Umgebungsvariablen
Überprüfenpython -c "import graphiti_core; print('ok')"

Core Concepts

BegriffBedeutung
EpisodeEine Einheit aufgenommener Daten (Nachricht, Text, JSON)
NodeEine Entity, die aus Episodes extrahiert wird
Edge (Fakt)Eine Beziehung mit Validitäts Zeit (valid_at/invalid_at)
Bi-temporalVerfolgung sowohl Event Zeit als auch Aufnahmezeit
CommunityCluster verwandter Entitäten

Initialisieren & Episodes hinzufügen

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 trat 2024 als CTO in die Acme bei.",
        source=EpisodeType.text,
        reference_time=datetime.now(),
        source_description="chat",
    )

asyncio.run(main())
CallBeschreibung
Graphiti(uri, user, pass)Verbinden Sie sich mit der Graph DB
build_indices_and_constraints()Einmalige Schema Einrichtung
add_episode(...)Aufnahme Daten; Entitäten/Edges werden automatisch extrahiert
add_episode_bulk(...)Batch Aufnahme

Memory durchsuchen

# Hybrid Suche: semantisch + BM25 + Graph, Neu rangiert
results = await graphiti.search("Wo arbeitet Nick?")
for r in results:
    print(r.fact, r.valid_at)
SucheVerhalten
search(query)Hybrid (semantisch + Stichwort + Graph) Edge Suche
Node SucheEntity abrufen
NeurangierungRRF / Graph-Entfernung / Cross-Encoder Optionen
Center NodeErgebnis um eine spezifische Entity vorspannen

Temporal Reasoning

Der Differenziator: wenn sich ein Fakt ändert, löscht Graphiti den alten nicht — es markiert die vorherige Edge als ungültig und fügt die neue hinzu, also Geschichte wird bewahrt.

FähigkeitNutzung
Fakt UngültigkeitAlte Fakten erhalten invalid_at Satz wenn widersprochen
Point-in-Time Abfragen”Was war wahr zum Datum X?”
NachverfolgungVerfolgung ein Fakt zurück zu seiner Quelle Episode
Custom Entity TypenDefiniere Pydantic Modelle für Typ Extraction

Integration

ZielWie
ZepGraphiti ist die Engine unter Zeps Memory Service
Agent FrameworksNutzen Sie als Memory/Retrieval Tool
MCPGraphiti MCP Server exponiert Memory zu Agenten
CustomAbfrage den Graph direkt für Kontext

Common Workflows

# Agent Speicher, der sich ändernde Fakten überlebt
await graphiti.add_episode(name="e1", episode_body="Nick nutzt Postgres.", ...)
# später ändert sich der Fakt:
await graphiti.add_episode(name="e2", episode_body="Nick migrierte zu SQLite.", ...)
# Graphiti ungültig den Postgres Fakt und zeichnet den SQLite auf mit Zeit
ctx = await graphiti.search("Welche Datenbank nutzt Nick nun?")

Graphiti vs Andere Memory Frameworks

AspektGraphitiCogneeMem0
Core StärkeTemporal/Bi-temporal FaktenGraph-nativ ECLPersonalisierung
GeschichteBewahrt mit Validitäts ZeitenGraph SnapshotsRecent-fokussiert
BackendNeo4j / FalkorDBMulti-StoreVector/Graph/KV
Beste fürFakten, die sich über Zeit ändernLokale Graph ReasoningKonversations Speicher

Ressourcen