Graphiti: Ein Framework zum Aufbau und zur Abfrage von Echtzeit-Wissensgraphen 161

小编 ·

Graphiti: Ein Framework zum Aufbau und zur Abfrage von Echtzeit-Wissensgraphen

Graphiti ist ein Framework zum Aufbau und zur Abfrage von Wissensgraphen mit Zeitbewusstsein und eignet sich ideal für dynamische Umgebungen. Anders als klassische RAG-Ansätze integriert Graphiti Benutzerinteraktionen, strukturierte und unstrukturierte Daten sowie externe Informationen in Echtzeit in einen abfragbaren Graphen. Es unterstützt Echtzeit-Updates, effiziente Abfragen und präzise historische Anfragen ohne Neuberechnung des gesamten Graphen – ideal für interaktive, kontextbewusste Anwendungen.

Graphiti: Ein Framework zum Aufbau und zur Abfrage von Echtzeit-Wissensgraphen

Was ist Graphiti?

Graphiti ist ein Framework zum Aufbau und zur Abfrage von Wissensgraphen, das über eine zeitliche Wahrnehmung verfügt und sich daher besonders für den Einsatz in dynamischen Umgebungen eignet. Im Gegensatz zu herkömmlichen Retrieval-Augmented-Generation-Methoden (RAG) kann Graphiti Benutzerinteraktionen, strukturierte und unstrukturierte Daten sowie externe Informationen in Echtzeit integrieren und einen abfragbaren Graphen erzeugen. Zu seinen Stärken gehören die Unterstützung von Echtzeit-Updates der Daten, eine effiziente Abfrage sowie präzise historische Abfragen, ohne dass der gesamte Graph neu berechnet werden muss – ideal für die Entwicklung interaktiver, kontextbewusster Anwendungen.

Graphiti:一个用于构建和查询实时知识图谱的框架.webp

Die wichtigsten Funktionen von Graphiti

  • Echtzeit-Inkrementupdates: Neue Datenfragmente können sofort integriert werden, ohne dass eine stapelweise Neuberechnung erforderlich ist.

  • Duales temporales Datenmodell: Verfolgt explizit die Ereigniszeit und die Aufnahmezeit und ermöglicht so präzise zeitpunktbezogene Abfragen.

  • Effiziente hybride Suche: Kombiniert semantische Embeddings, Schlüsselwörter (BM25) und Graph-Traversierung für Abfragen mit niedriger Latenz, ohne auf Large Language Models (LLMs) für Zusammenfassungen angewiesen zu sein.

  • Benutzerdefinierte Entitätsdefinitionen: Unterstützt die Erstellung flexibler Ontologien und benutzerdefinierter Entitäten durch einfache Pydantic-Modelle.

  • Skalierbarkeit: Verwaltet große Datensätze durch parallele Verarbeitung effektiv und eignet sich damit für Unternehmensumgebungen.

  • Integration mit mehreren LLMs: Unterstützt LLM-Anbieter wie Openai, Anthropic und Groq und bietet flexible Optionen für LLM-Inferenz und Embeddings.

  • MCP-Server: Stellt einen API-Dienst auf Basis von FastAPI bereit, der die Interaktion mit dem Wissensgraphen über das MCP-Protokoll unterstützt, einschließlich Funktionen für Ereignisverwaltung, Entitätsverwaltung und Behandlungen von Beziehungen.

Warum Graphiti wählen

  • Es kann Daten in Echtzeit aktualisieren und sich an dynamisch veränderliche Umgebungen anpassen.

  • Unterstützt präzise zeitpunktbezogene Abfragen und erleichtert so das Zurückverfolgen historischer Informationen.

  • Schnelle Abfragegeschwindigkeit, ohne auf komplexe Sprachmodelle angewiesen zu sein.

  • Datenstrukturen können an spezifische Anforderungen angepasst werden.

  • Kann große Datenmengen effizient verarbeiten und eignet sich für Anwendungen auf Unternehmensebene.

Installation und Verwendung von Graphiti

Graphiti installieren

Stelle zunächst sicher, dass dein System die Installationsanforderungen erfüllt, und installiere die erforderlichen Abhängigkeiten:

  • Python: Stelle sicher, dass Python 3.10 oder höher auf deinem System installiert ist.

  • Neo4j: Installiere die Neo4j-Datenbank, Version 5.26 oder höher. Du kannst Neo4j Desktop verwenden, um die Installation und Verwaltung zu vereinfachen.

  • OpenAI-API-Schlüssel: Wenn du OpenAI für LLM-Inferenz und Embeddings verwenden möchtest, benötigst du einen gültigen OpenAI-API-Schlüssel.

Du kannst pip oder poetry verwenden, um die Graphiti-Kernbibliothek zu installieren:

pip install graphiti-core
# 或者
poetry add graphiti-core

Graphiti initialisieren

Initialisiere eine Graphiti-Instanz in deinem Code und stelle eine Verbindung zur Neo4j-Datenbank her:

from graphiti_core import Graphiti
graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")

Indizes und Constraints aufbauen

Bevor du Daten hinzufügst, initialisiere die Graphdatenbank und baue die Indizes und Constraints von Graphiti auf:

await graphiti.build_indices_and_constraints()

Daten hinzufügen

Verwende die Methode add_episode, um Daten zum Wissensgraphen hinzuzufügen. Jedes Datenfragment wird als „episode" bezeichnet:

from graphiti_core.nodes import EpisodeType
from datetime import datetime, timezone
episodes = [
"Kamala Harris is the Attorney General of California. She was previously the district attorney for San Francisco.",
"As AG, Harris was in office from January 3, 2011 – January 3, 2017"
]
for i, episode in enumerate(episodes):
await graphiti.add_episode(
name=f"Freakonomics Radio {i}",
episode_body=episode,
source=EpisodeType.text,
source_description="podcast",
reference_time=datetime.now(timezone.utc)
)

Daten abfragen

Verwende die Methode search, um den Wissensgraphen abzufragen, wobei semantische Ähnlichkeit und Schlüsselwortsuche kombiniert werden:

results = await graphiti.search('Who was the California Attorney General?')

Benutzerdefinierte Abfragen

Du kannst Abfragen nach Bedarf anpassen, z. B. durch Angabe eines zentralen Knotens, um Ergebnisse zu bevorzugen, die diesem Knoten näher stehen:

await graphiti.search('Who was the California Attorney General?', center_node_uuid)

Verbindung schließen

Schließe nach Abschluss der Verwaltung des Chat-Zustands die Graphiti-Verbindung:

graphiti.close()

MCP-Server verwenden

Graphiti stellt einen MCP-Server bereit, der über FastAPI interagiert werden kann. Du kannst diesen Server bereitstellen und über das MCP-Protokoll mit dem Wissensgraphen interagieren:

1. Klone oder lade das Graphiti-Repository herunter.

2. Starte den MCP-Server:

uvicorn graphiti.mcp_server.main:app --reload

3. Verwende in deinem KI-Assistenten das MCP-Protokoll, um mit dem Server zu kommunizieren.

Azure OpenAI verwenden

Wenn du Azure OpenAI verwenden möchtest, musst du den entsprechenden Client und Embedder konfigurieren:

from openai import AsyncAzureOpenAI
from graphiti_core import Graphiti
from graphiti_core.llm_client import OpenAIClient
from graphiti_core.embedder.openai import OpenAIEmbedder, OpenAIEmbedderConfig
api_key = "<your-api-key>"
api_version = "<your-api-version>"
azure_endpoint = "<your-azure-endpoint>"
azure_openai_client = AsyncAzureOpenAI(api_key=api_key, api_version=api_version, azure_endpoint=azure_endpoint)
graphiti = Graphiti(
"bolt://localhost:7687",
"neo4j",
"password",
llm_client=OpenAIClient(client=azure_openai_client),
embedder=OpenAIEmbedder(config=OpenAIEmbedderConfig(embedding_model="text-embedding-3-small"), client=azure_openai_client)
)

Stelle sicher, dass du die Platzhalterwerte durch deine tatsächlichen Azure-OpenAI-Anmeldedaten ersetzt und den korrekten Namen des Embedding-Modells angibst.

Die Vorteile von Graphiti

  • Im Vergleich zu anderen Technologien bietet Graphiti deutliche Vorteile bei der Verarbeitung dynamischer Daten, Echtzeit-Updates und der Abfragegeschwindigkeit.

  • Stellt eine Server-Implementierung bereit, die die Integration in andere Systeme erleichtert.

  • Unterstützt verschiedene Umgebungskonfigurationen und die Integration mit anderen Diensten.

Verwandte Links

Paper: https://arxiv.org/abs/2501.13956

GitHub-Repository: https://github.com/getzep/graphiti