GraphRAG: Wissensgraphen für bessere KI-Antworten

Foto von Max Petrunin auf Unsplash
Klassische RAG-Systeme (Retrieval Augmented Generation) haben ein fundamentales Problem: Sie behandeln Dokumente als isolierte Textfragmente. Bei der Frage "Welche Auswirkungen hat die Übernahme von Unternehmen A auf die Marktposition von Unternehmen B?" versagt die reine Vektorsuche – sie findet zwar relevante Passagen, versteht aber nicht die Beziehungen zwischen Entitäten.
GraphRAG löst dieses Problem, indem es einen Wissensgraphen aus deinen Dokumenten extrahiert und diesen für die Suche nutzt. Das Ergebnis: Bessere Antworten auf komplexe Fragen, weniger Halluzinationen und ein tieferes Verständnis von Zusammenhängen.
Das Problem mit klassischem RAG
Warum Vektorsuche nicht ausreicht
Stell dir vor, du hast 500 Seiten interne Dokumentation über dein Unternehmen. Ein klassisches RAG-System macht folgendes:
- Zerlegt die Dokumente in Chunks (z.B. 512 Tokens)
- Erstellt Embeddings für jeden Chunk
- Bei einer Frage: Findet die ähnlichsten Chunks
- Gibt diese dem LLM als Kontext
Das funktioniert für einfache Fragen wie "Was ist unsere Rückgaberichtlinie?". Aber bei Fragen wie:
- "Wie haben sich unsere Kundenbeziehungen in den letzten 3 Jahren entwickelt?"
- "Welche Teams arbeiten an Projekt X und wie sind sie verbunden?"
- "Was sind die übergreifenden Themen in unseren Quartalsberichten?"
...scheitert klassisches RAG, weil es die Beziehungen zwischen Informationen nicht versteht.
Die fundamentale Einschränkung
Die Vektoren existieren isoliert – das System weiß nichts über die Beziehungen zwischen den Dokumenten.
Was ist GraphRAG?
GraphRAG kombiniert zwei mächtige Konzepte:
- Wissensgraphen: Strukturierte Darstellung von Entitäten und ihren Beziehungen
- RAG: Abruf relevanter Informationen zur Anreicherung von LLM-Antworten
Microsoft hat GraphRAG 2024 als Open-Source-Projekt veröffentlicht. Der Ansatz extrahiert automatisch einen Wissensgraphen aus unstrukturierten Texten und nutzt diesen für intelligentere Suche.
Der GraphRAG-Vorteil
Jetzt versteht das System nicht nur den Inhalt, sondern auch die Struktur deiner Daten.
Die GraphRAG-Architektur
Phase 1: Indexierung
GraphRAG verarbeitet deine Dokumente in mehreren Schritten:
1. Text Unit Segmentation
Der gesamte Textkorpus wird in handhabbare Einheiten zerlegt – ähnlich wie bei klassischem RAG, aber mit dem Ziel, zusammenhängende Informationen zu bewahren.
2. Entity & Relationship Extraction
Ein LLM analysiert jeden Text und extrahiert:
- Entitäten: Personen, Organisationen, Konzepte, Produkte
- Beziehungen: Wie Entitäten miteinander verbunden sind
- Claims: Wichtige Aussagen und Fakten
# Beispiel: Extrahierte Daten
{
"entities": [
{"name": "Acme Corp", "type": "ORGANIZATION"},
{"name": "John Smith", "type": "PERSON"},
{"name": "Project Alpha", "type": "PROJECT"}
],
"relationships": [
{"source": "John Smith", "target": "Acme Corp", "type": "WORKS_AT"},
{"source": "John Smith", "target": "Project Alpha", "type": "LEADS"}
]
}3. Community Detection
GraphRAG nutzt den Leiden-Algorithmus, um Gruppen von eng verbundenen Entitäten zu identifizieren. Diese "Communities" repräsentieren thematische Cluster in deinen Daten.
4. Hierarchische Zusammenfassungen
Für jede Community erstellt ein LLM eine Zusammenfassung. Diese Zusammenfassungen sind hierarchisch – von sehr granular (Level 0) bis sehr abstrakt (höhere Level).
Die Pipeline visualisiert
Suchmodi verstehen
GraphRAG bietet verschiedene Suchmodi für unterschiedliche Anwendungsfälle:
Global Search
Zweck: Übergreifende Fragen, die den gesamten Dokumentenkorpus betreffen.
Beispiele:
- "Was sind die Hauptthemen in diesen Dokumenten?"
- "Welche Trends zeigen sich über alle Quartalsberichte?"
- "Fasse die wichtigsten strategischen Entscheidungen zusammen."
Wie es funktioniert:
- Nutzt die Community-Zusammenfassungen
- Aggregiert Informationen aus verschiedenen Clustern
- Synthetisiert eine übergreifende Antwort
# Global Search Beispiel
import asyncio
import pandas as pd
from pathlib import Path
from graphrag.config.load_config import load_config
import graphrag.api as api
async def global_query():
project_dir = Path("./my-project")
config = load_config(project_dir)
# Index-Dateien laden
output = project_dir / "output"
entities = pd.read_parquet(output / "entities.parquet")
communities = pd.read_parquet(output / "communities.parquet")
community_reports = pd.read_parquet(output / "community_reports.parquet")
response, context = await api.global_search(
config=config,
entities=entities,
communities=communities,
community_reports=community_reports,
community_level=2, # Abstraktionsgrad
response_type="Multiple Paragraphs",
query="Was sind die Hauptthemen der Dokumentation?"
)
return response
result = asyncio.run(global_query())
print(result)Local Search
Zweck: Spezifische Fragen zu bestimmten Entitäten und ihren direkten Beziehungen.
Beispiele:
- "Was wissen wir über Kunde XYZ?"
- "Welche Projekte leitet Person A?"
- "Wie ist Produkt B mit anderen Produkten verbunden?"
Wie es funktioniert:
- Identifiziert relevante Entitäten in der Frage
- Traversiert den Graphen von diesen Entitäten aus
- Sammelt verbundene Informationen
- Generiert eine fokussierte Antwort
# Local Search Beispiel
from graphrag.api import local_search
async def local_query():
# ... config und Daten laden wie oben ...
response, context = await local_search(
config=config,
entities=entities,
communities=communities,
community_reports=community_reports,
text_units=text_units,
relationships=relationships,
community_level=2,
query="Wer ist Max Mustermann und was sind seine Hauptprojekte?"
)
return responseWann welchen Modus nutzen?
| Fragetyp | Modus | Beispiel |
|---|---|---|
| Überblick/Trends | Global | "Hauptthemen der Berichte?" |
| Spezifische Entität | Local | "Details zu Projekt X?" |
| Vergleiche | Global | "Unterschiede Q1 vs Q2?" |
| Beziehungen | Local | "Wer arbeitet mit wem?" |
Praktische Implementierung
Installation
# Python-Umgebung erstellen
python -m venv graphrag-env
source graphrag-env/bin/activate
# GraphRAG installieren
pip install graphrag
# Projekt initialisieren
graphrag init --root ./my-projectKonfiguration
GraphRAG erstellt eine settings.yaml mit wichtigen Einstellungen:
# settings.yaml
llm:
type: openai_chat
model: gpt-4o-mini # Für kostenbewusste Indexierung
api_key: ${OPENAI_API_KEY}
embeddings:
type: openai_embedding
model: text-embedding-3-small
chunks:
size: 1200
overlap: 100
entity_extraction:
max_gleanings: 1 # Reduziert LLM-Calls
community_reports:
max_length: 2000Dokumente indexieren
# Dokumente in ./my-project/input/ ablegen
cp meine-dokumente/*.txt ./my-project/input/
# Indexierung starten
graphrag index --root ./my-projectWichtig: GraphRAG verbraucht viele LLM-Tokens! Starte mit kleinen Testdaten.
Vergleich: GraphRAG vs. klassisches RAG
Performance-Unterschiede
| Aspekt | Klassisches RAG | GraphRAG |
|---|---|---|
| Einfache Faktenfragen | Sehr gut | Gut |
| Komplexe Synthesefragen | Schwach | Sehr gut |
| Beziehungsfragen | Schwach | Sehr gut |
| Indexierungszeit | Schnell | Langsam |
| Indexierungskosten | Niedrig | Hoch |
| Abfragekosten | Niedrig | Mittel |
Kostenbetrachtung
GraphRAG ist teurer in der Indexierung, weil es LLM-Calls für Entity Extraction, Relationship Extraction und Community Summarization benötigt.
Faustregeln:
- 100 Seiten Text ≈ 1-5$ Indexierungskosten (mit GPT-4o-mini)
- Abfragen sind günstiger (nur Zusammenfassungen werden geladen)
Wann GraphRAG wählen?
GraphRAG ist ideal für:
- Dokumentenkorpora mit vielen Beziehungen
- Fragen, die Synthese erfordern
- Anwendungen, wo Qualität wichtiger ist als Kosten
Klassisches RAG reicht für:
- Einfache FAQ-Systeme
- Dokumentation mit wenig Querverweisen
- Kostensensitive Anwendungen
Best Practices
1. Optimale Dokumentgröße
- Zu kleine Chunks: Kontext geht verloren
- Zu große Chunks: Unpräzise Extraktion
- Empfehlung: 1000-1500 Tokens pro Chunk
2. Community Level wählen
| Level | Beschreibung | Anwendung |
|---|---|---|
| 0 | Sehr granular | Detailfragen |
| 1 | Mittlere Granularität | Local Search |
| 2 | Abstrakt | Global Search |
| 3+ | Sehr abstrakt | Übersichtsfragen |
Tipp: Starte mit Level 2 für Global Search, Level 1 für Local Search.
3. Kosten im Griff behalten
# Kostenoptimierte Konfiguration
llm:
model: gpt-4o-mini # Statt gpt-4o
entity_extraction:
max_gleanings: 0 # Reduziert Extraktionsrunden
community_reports:
max_length: 1500 # Kürzere Zusammenfassungen4. Caching nutzen
# Parquet-Dateien sind dein Cache
# Lade sie einmal und nutze sie für viele Abfragen
entities = pd.read_parquet("entities.parquet") # Einmal laden
# Dann für alle Queries wiederverwendenFazit
GraphRAG ist ein mächtiges Werkzeug für Anwendungen, die über einfache Faktenfragen hinausgehen. Die Kombination aus Wissensgraph und RAG ermöglicht:
- Besseres Verständnis von Beziehungen
- Zuverlässigere Antworten auf komplexe Fragen
- Reduzierte Halluzinationen durch strukturierte Daten
Meine Empfehlung: Starte mit einem kleinen Testdatensatz, verstehe die Kosten, und skaliere dann. GraphRAG ist besonders wertvoll für interne Wissensdatenbanken, Forschungsdokumente und komplexe Unternehmensarchive.
Der nächste Schritt? Kombiniere GraphRAG mit Agentic RAG für noch intelligentere Systeme, die autonom planen und iterativ arbeiten können.
Weiterführende Artikel: