GraphRAG: Wissensgraphen für bessere KI-Antworten

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:

  1. Zerlegt die Dokumente in Chunks (z.B. 512 Tokens)
  2. Erstellt Embeddings für jeden Chunk
  3. Bei einer Frage: Findet die ähnlichsten Chunks
  4. 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:

  1. Wissensgraphen: Strukturierte Darstellung von Entitäten und ihren Beziehungen
  2. 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:

  1. Nutzt die Community-Zusammenfassungen
  2. Aggregiert Informationen aus verschiedenen Clustern
  3. 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:

  1. Identifiziert relevante Entitäten in der Frage
  2. Traversiert den Graphen von diesen Entitäten aus
  3. Sammelt verbundene Informationen
  4. 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 response

Wann welchen Modus nutzen?

FragetypModusBeispiel
Überblick/TrendsGlobal"Hauptthemen der Berichte?"
Spezifische EntitätLocal"Details zu Projekt X?"
VergleicheGlobal"Unterschiede Q1 vs Q2?"
BeziehungenLocal"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-project

Konfiguration

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: 2000

Dokumente indexieren

# Dokumente in ./my-project/input/ ablegen
cp meine-dokumente/*.txt ./my-project/input/
 
# Indexierung starten
graphrag index --root ./my-project

Wichtig: GraphRAG verbraucht viele LLM-Tokens! Starte mit kleinen Testdaten.

Vergleich: GraphRAG vs. klassisches RAG

Performance-Unterschiede

AspektKlassisches RAGGraphRAG
Einfache FaktenfragenSehr gutGut
Komplexe SynthesefragenSchwachSehr gut
BeziehungsfragenSchwachSehr gut
IndexierungszeitSchnellLangsam
IndexierungskostenNiedrigHoch
AbfragekostenNiedrigMittel

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

LevelBeschreibungAnwendung
0Sehr granularDetailfragen
1Mittlere GranularitätLocal Search
2AbstraktGlobal 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 Zusammenfassungen

4. 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 wiederverwenden

Fazit

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: