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
| Methode | Befehl |
|---|
| pip | pip install graphiti-core |
| Mit FalkorDB | pip install "graphiti-core[falkordb]" |
| Setzen Sie Schlüssel | export OPENAI_API_KEY=... und Graph DB Umgebungsvariablen |
| Überprüfen | python -c "import graphiti_core; print('ok')" |
Core Concepts
| Begriff | Bedeutung |
|---|
| Episode | Eine Einheit aufgenommener Daten (Nachricht, Text, JSON) |
| Node | Eine Entity, die aus Episodes extrahiert wird |
| Edge (Fakt) | Eine Beziehung mit Validitäts Zeit (valid_at/invalid_at) |
| Bi-temporal | Verfolgung sowohl Event Zeit als auch Aufnahmezeit |
| Community | Cluster 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())
| Call | Beschreibung |
|---|
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)
| Suche | Verhalten |
|---|
search(query) | Hybrid (semantisch + Stichwort + Graph) Edge Suche |
| Node Suche | Entity abrufen |
| Neurangierung | RRF / Graph-Entfernung / Cross-Encoder Optionen |
| Center Node | Ergebnis 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ähigkeit | Nutzung |
|---|
| Fakt Ungültigkeit | Alte Fakten erhalten invalid_at Satz wenn widersprochen |
| Point-in-Time Abfragen | ”Was war wahr zum Datum X?” |
| Nachverfolgung | Verfolgung ein Fakt zurück zu seiner Quelle Episode |
| Custom Entity Typen | Definiere Pydantic Modelle für Typ Extraction |
Integration
| Ziel | Wie |
|---|
| Zep | Graphiti ist die Engine unter Zeps Memory Service |
| Agent Frameworks | Nutzen Sie als Memory/Retrieval Tool |
| MCP | Graphiti MCP Server exponiert Memory zu Agenten |
| Custom | Abfrage 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
| Aspekt | Graphiti | Cognee | Mem0 |
|---|
| Core Stärke | Temporal/Bi-temporal Fakten | Graph-nativ ECL | Personalisierung |
| Geschichte | Bewahrt mit Validitäts Zeiten | Graph Snapshots | Recent-fokussiert |
| Backend | Neo4j / FalkorDB | Multi-Store | Vector/Graph/KV |
| Beste für | Fakten, die sich über Zeit ändern | Lokale Graph Reasoning | Konversations Speicher |
Ressourcen