Selbsthosting von Cognee: Auswahl des LLM mit Ollama
Cognee mit lokalen LLMs testen – reale Ergebnisse
Cognee ist ein Python-Framework zur Erstellung von Wissensgraphen aus Dokumenten mithilfe von LLMs. Funktioniert es jedoch mit selbstgehosteten Modellen?
Ich habe es mit mehreren lokalen LLMs getestet, um es herauszufinden.

Das ist eine Preisliste-PDF-Seite, die ich verarbeiten wollte.
TL;DR
Cognee funktioniert vermutlich gut mit intelligenten LLMs mit hunderten von Milliarden Parametern, aber bei selbstgehosteten RAG-Einrichtungen, die erwartet werden, um Daten automatisch aus PDFs (wie Preislisten) zu extrahieren, versagte es auf meiner Hardware. Die starke Abhängigkeit des Frameworks von strukturierten Ausgaben macht es für kleinere lokale Modelle schwierig, zuverlässig zu funktionieren.
Was ist Cognee?
Cognee ist ein quelloffenes Python-Framework, das entwickelt wurde, um aus unstrukturierten Dokumenten mithilfe von LLMs Wissensgraphen zu erstellen. Im Gegensatz zu herkömmlichen RAG-Systemen, die einfach Dokumente in Stücke teilen und einbetten, versucht Cognee, ein semantisches Verständnis zu schaffen, indem es Entitäten, Beziehungen und Konzepte in eine Graphdatenbank extrahiert. Dieser Ansatz entspricht fortgeschrittenen RAG-Architekturen wie GraphRAG, die eine bessere kontextuelle Retrieval-Unterstützung versprechen.
Das Framework unterstützt mehrere Backends:
- Vektordatenbanken: LanceDB (Standard), mit Unterstützung für andere Vektorspeicher
- Graphdatenbanken: Kuzu (Standard), ermöglicht komplexe Beziehungsabfragen
- LLM-Anbieter: OpenAI, Anthropic, Ollama und andere
- Strukturierte Ausgabeframeworks: BAML und Instructor für eingeschränkte Generierung
Für Enthusiasten der Selbstgehostung macht die Kompatibilität von Cognee mit Ollama es attraktiv für lokale Bereitstellungen. Allerdings liegt das Problem in den Details – wie wir sehen werden, erzeugen die Anforderungen an strukturierte Ausgaben erhebliche Herausforderungen für kleinere Modelle.
Warum Strukturierte Ausgaben Wichtig Sind
Cognee verlässt sich stark auf strukturierte Ausgaben, um Informationen aus Dokumenten in einer konsistenten Form zu extrahieren. Beim Verarbeiten eines Dokuments muss das LLM eine ordnungsgemäß formatierte JSON-Datei zurückgeben, die Entitäten, Beziehungen und Metadaten enthält. An dieser Stelle geraten viele kleinere Modelle in Schwierigkeiten.
Wenn Sie mit strukturierten Ausgaben in Ihren eigenen Projekten arbeiten, ist es entscheidend, diese Einschränkungen zu verstehen. Die Herausforderungen, die ich mit Cognee hatte, spiegeln größere Probleme im LLM-Ökosystem wider, wenn mit lokalen Modellen gearbeitet wird.
Konfigurationsaufbau
Hier ist meine funktionierende Konfiguration für Cognee mit Ollama. Beachten Sie die wichtigen Einstellungen, die den lokalen Betrieb ermöglichen:
TELEMETRY_DISABLED=1
# STRUCTURED_OUTPUT_FRAMEWORK="instructor"
STRUCTURED_OUTPUT_FRAMEWORK="BAML"
# LLM-Konfiguration
LLM_API_KEY="ollama"
LLM_MODEL="gpt-oss:20b"
LLM_PROVIDER="ollama"
LLM_ENDPOINT="http://localhost:11434/v1"
# LLM_MAX_TOKENS="25000"
# Einbettungskonfiguration
EMBEDDING_PROVIDER="ollama"
EMBEDDING_MODEL="avr/sfr-embedding-mistral:latest"
EMBEDDING_ENDPOINT="http://localhost:11434/api/embeddings"
EMBEDDING_DIMENSIONS=4096
HUGGINGFACE_TOKENIZER="Salesforce/SFR-Embedding-Mistral"
# BAML-Konfiguration
BAML_LLM_PROVIDER="ollama"
BAML_LLM_MODEL="gpt-oss:20b"
BAML_LLM_ENDPOINT="http://localhost:11434/v1"
# Datenbank-Einstellungen (Standard)
DB_PROVIDER="sqlite"
VECTOR_DB_PROVIDER="lancedb"
GRAPH_DATABASE_PROVIDER="kuzu"
# Auth
REQUIRE_AUTHENTICATION=False
ENABLE_BACKEND_ACCESS_CONTROL=False
Wichtige Konfigurationsentscheidungen
Strukturiertes Ausgabeframework: Ich habe BAML getestet, das eine bessere Kontrolle über Ausgabeschemata bietet als grundlegende Prompting-Methoden. BAML ist speziell für strukturierte LLM-Ausgaben entworfen und daher eine natürliche Wahl für Wissensgraph-Extraktionsaufgaben.
LLM-Anbieter: Die Verwendung des OpenAI-kompatiblen API-Endpunkts von Ollama (/v1) ermöglicht es Cognee, ihn wie jeden anderen OpenAI-ähnlichen Dienst zu behandeln.
Einbettungsmodell: Das SFR-Embedding-Mistral-Modell (4096 Dimensionen) bietet hochwertige Einbettungen. Für weitere Informationen zur Auswahl und Leistung von Einbettungsmodellen bieten die Qwen3-Embedding-Modelle hervorragende Alternativen mit starken multilingualen Fähigkeiten.
Datenbanken: SQLite für Metadaten, LanceDB für Vektoren und Kuzu für den Wissensgraphen lassen alles lokal ohne externe Abhängigkeiten.
Cognee installieren
Die Installation ist mit uv (oder pip) einfach. Ich empfehle die Verwendung von uv für eine schnellere Abhängigkeitsauflösung:
uv venv && source .venv/bin/activate
uv pip install cognee[ollama]
uv pip install cognee[baml]
uv pip install cognee[instructor]
uv sync --extra scraping
uv run playwright install
sudo apt-get install libavif16
Die Extras [ollama], [baml] und [instructor] installieren die notwendigen Abhängigkeiten für den lokalen LLM-Betrieb und strukturierte Ausgaben. Der Scraping-Extra fügt Web-Scraping-Fähigkeiten hinzu, während Playwright JavaScript-renderierte Seitenverarbeitung ermöglicht.
Beispielcode und Verwendung
Hier ist der grundlegende Workflow zur Verarbeitung von Dokumenten mit Cognee. Zuerst fügen wir Dokumente hinzu und erstellen den Wissensgraphen:
msy-add.py:
import cognee
import asyncio
async def main():
# Erstelle eine leere Umgebung für Cognee – lösche Daten und Systemzustand
await cognee.prune.prune_data()
await cognee.prune.prune_system(metadata=True)
# Füge Beispielinhalt hinzu
await cognee.add(
"/home/rg/prj/prices/msy_parts_price_20251224.pdf",
node_set=["price_list", "computer_parts", "2025-12-24", "aud"]
)
# Verarbeite mit LLMs, um den Wissensgraphen zu erstellen
await cognee.cognify()
if __name__ == '__main__':
asyncio.run(main())
Der node_set-Parameter liefert semantische Tags, die helfen, das Dokument im Wissensgraphen zu kategorisieren. Die cognify()-Methode ist der Moment, an dem die Magie (oder Probleme) geschehen – sie sendet Dokumentenstücke an das LLM für die Extraktion von Entitäten und Beziehungen.
msy-search.py:
import cognee
import asyncio
async def main():
# Durchsuche den Wissensgraphen
results = await cognee.search(
query_text="Welche Produkte sind in der Preisliste enthalten?"
# query_text="Was ist der Durchschnittspreis für 32 GB RAM (2 x 16 GB Module)?"
)
# Drucke
for result in results:
print(result)
if __name__ == '__main__':
asyncio.run(main())
Im Gegensatz zur herkömmlichen Vektorsuche in RAG-Systemen durchsucht Cognee den Wissensgraphen, was theoretisch komplexere Beziehungsabfragen ermöglicht. Dies ist ähnlich wie bei fortgeschrittenen RAG-Architekturen, erfordert jedoch den Erfolg der ursprünglichen Graphkonstruktion.
Testergebnisse: Leistung der LLMs
Ich habe Cognee mit einem realen Anwendungsfall getestet: Extrahieren von Produktinformationen aus einer PDF-Preisliste für Computerbauteile. Dies schien ein idealer Fall – strukturierte Daten in einer tabellenartigen Form. Hier ist, was mit jedem Modell passierte:
Getestete Modelle
1. gpt-oss:20b (20 Milliarden Parameter)
- Ergebnis: Versagte aufgrund von Zeichencodierungsfehlern
- Problem: Gibt fehlerhaftes strukturiertes Ausgabeformat mit falschen Zeichencodes zurück
- Hinweis: Obwohl es speziell für die Open-Source-Verträglichkeit entworfen wurde, konnte es konsistentes JSON-Formatieren nicht aufrechterhalten
2. qwen3:14b (14 Milliarden Parameter)
- Ergebnis: Versagte bei der Erstellung strukturierter Ausgaben
- Problem: Das Modell erzeugte Text, aber nicht im erforderlichen JSON-Schema
- Hinweis: Qwen-Modelle leisten in der Regel gut, aber diese Aufgabe überstieg ihre Fähigkeiten bei strukturierten Ausgaben
3. deepseek-r1:14b (14 Milliarden Parameter)
- Ergebnis: Versagte bei der Erstellung strukturierter Ausgaben
- Problem: Ähnlich wie qwen3, konnte es die BAML-Schemaverpflichtungen nicht erfüllen
- Hinweis: Die Schlussfolgerungsfähigkeiten halfen nicht bei der Einhaltung des Formats
4. devstral:24b (24 Milliarden Parameter)
- Ergebnis: Versagte bei der Erstellung strukturierter Ausgaben
- Problem: Selbst mit mehr Parametern konnte es konsistentes JSON nicht generieren
- Hinweis: Das spezialisierte Codierungsmodell hatte Schwierigkeiten, strenge Schemaanforderungen zu erfüllen
5. ministral-3:14b (14 Milliarden Parameter)
- Ergebnis: Versagte bei der Erstellung strukturierter Ausgaben
- Problem: Das kleinere Modell von Mistral konnte die Anforderungen an strukturierte Ausgaben nicht erfüllen
6. qwen3-vl:30b-a3b-instruct (30 Milliarden Parameter)
- Ergebnis: Versagte bei der Erstellung strukturierter Ausgaben
- Problem: Die visuellen Fähigkeiten halfen nicht bei der Extraktion von PDF-Tabellen in diesem Kontext
7. gpt-oss:120b (120 Milliarden Parameter)
- Ergebnis: Verarbeitung nicht abgeschlossen nach mehr als 2 Stunden
- Hardware: Verbraucher-GPU-Setup
- Problem: Das Modell war zu groß für praktische selbstgehostete Verwendung, selbst wenn es letztendlich funktioniert hätte
Wichtige Erkenntnisse
Chunk-Größenbeschränkung: Cognee verwendet 4k Token-Blöcke beim Verarbeiten von Dokumenten mit Ollama. Für komplexe Dokumente oder Modelle mit größeren Kontextfenstern erscheint dies unnötig restriktiv. Das Framework bietet keine einfache Möglichkeit, diesen Parameter anzupassen.
Anforderungen an strukturierte Ausgaben: Das zentrale Problem ist nicht die Modellintelligenz, sondern die Einhaltung von Formaten. Diese Modelle können den Inhalt verstehen, aber das Erreichen einer konsistenten JSON-Schema während des Extraktionsprozesses erwies sich als schwierig. Dies entspricht größeren Herausforderungen, lokale Modelle dazu zu bringen, Ausgabekonstrains zu respektieren.
Hardware-Aspekte: Selbst wenn ein ausreichend großes Modell funktionieren würde (wie gpt-oss:120b), machen die Hardwareanforderungen es für die meisten selbstgehosteten Szenarien unpraktisch. Sie benötigen erhebliche GPU-Speicher- und Verarbeitungsleistung.
Vergleich mit Best Practices bei strukturierten Ausgaben
Diese Erfahrung unterstreicht Lektionen aus der Arbeit mit strukturierten Ausgaben bei verschiedenen LLM-Anbietern. Kommerzielle APIs von OpenAI, Anthropic und Google verfügen oft über eingebaute Mechanismen, um Ausgabeschemata zu erzwingen, während lokale Modelle komplexere Ansätze wie grammatikbasierte Sampling oder mehrere Validierungsschritte erfordern.
Für eine tiefergehende Analyse von der Wahl des richtigen LLM für Cognee auf Ollama, einschließlich detaillierter Vergleiche verschiedener Modellgrößen und deren Leistungsmerkmale, gibt es umfassende Leitfäden, die Ihnen bei der Entscheidungsfindung helfen können.
Alternativen für selbstgehostete RAG
Wenn Sie sich auf die Selbstgehostung verpflichtet fühlen und strukturierte Daten aus Dokumenten extrahieren müssen, erwägen Sie diese Alternativen:
1. Traditioneller RAG mit einfacherer Extraktion
Statt einen komplexen Wissensgraphen von vornherein zu erstellen, verwenden Sie den traditionellen RAG mit Dokumentenabschnitten und Vektorsuche. Für die Extraktion strukturierter Daten:
- Parse Tabellen direkt mithilfe von Bibliotheken wie
pdfplumberodertabula-py - Verwenden Sie einfachere Prompts, die keine strikte Schema-Einhaltung erfordern
- Implementieren Sie Validierung in Python nach der Verarbeitung anstelle auf LLM-Ausgabeformat zu verlassen
2. Spezialisierte Einbettungsmodelle
Die Qualität Ihrer Einbettungen beeinflusst erheblich die Retrieval-Leistung. Überlegen Sie sich, hochleistungsfähige Einbettungsmodelle zu verwenden, die gut lokal funktionieren. Moderne Einbettungsmodelle wie die von Qwen3 bieten ausgezeichnete multilinguale Unterstützung und können die Genauigkeit Ihres RAG-Systems erheblich verbessern.
3. Reranking für bessere Ergebnisse
Selbst mit einfacheren RAG-Architekturen kann ein Reranking-Schritt die Ergebnisse erheblich verbessern. Nach der ursprünglichen Vektorsuche-Retrieval kann ein Reranker-Modell besser die Relevanz beurteilen. Dieser zweistufige Ansatz übertreffen oft komplexere Einzelstufen-Systeme, insbesondere wenn mit eingeschränkter Hardware gearbeitet wird.
4. Hybrid-Search-Strategien
Das Kombinieren von Vektorsuche mit traditionellen Suchstrategien (BM25) ergibt oft bessere Ergebnisse als entweder allein. Viele moderne Vektordatenbanken unterstützen Hybrid-Search standardmäßig.
5. Überlegen Sie Alternativen zu Vektordatenbanken
Wenn Sie ein RAG-System von Grund auf erstellen, bewerten Sie verschiedene Vektordatenbanken basierend auf Ihren Anforderungen. Die Optionen reichen von leichten eingebetteten Datenbanken bis hin zu verteilten Systemen, die für Produktionsumfänge konzipiert sind.
Docker-Bereitstellung
Für die Produktionsselbstgehostung vereinfacht das Containerisieren Ihrer RAG-Setup die Bereitstellung und Skalierung. Wenn Sie Cognee oder ähnliche Frameworks mit Ollama verwenden:
# Führen Sie Ollama in einem Container aus
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# Ziehen Sie Ihre Modelle
docker exec -it ollama ollama pull gpt-oss:20b
# Konfigurieren Sie Cognee, um sich mit dem Container-Endpunkt zu verbinden
Stellen Sie sicher, dass Sie GPU-Passthrough und Volume-Mounts ordnungsgemäß konfigurieren, um die Persistenz der Modelle zu gewährleisten.
Gelernte Lektionen
1. Werkzeuge an die Hardware anpassen: Cognee ist für Cloud-LLMs konzipiert. Wenn Sie auf Verbraucherhardware selbstgehosten, sind einfachere Architekturen praktischer.
2. Strukturierte Ausgaben sind schwierig: Die Erzielung konsistenter Schema-Einhaltung aus lokalen LLMs bleibt eine Herausforderung. Wenn Ihre Anwendung stark von strukturierten Ausgaben abhängt, verwenden Sie entweder kommerzielle APIs oder implementieren Sie robuste Validierung und Wiederholungslogik.
3. Früh testen: Bevor Sie sich einem Framework verpflichten, testen Sie es mit Ihrem spezifischen Anwendungsfall und Ihrer Hardware. Was in Demos funktioniert, funktioniert möglicherweise nicht in der Skalierung oder mit Ihren Dokumenten.
4. Hybridansätze in Betracht ziehen: Verwenden Sie kommerzielle APIs für komplexe Extraktionsaufgaben und lokale Modelle für einfachere Abfragen, um Kosten und Fähigkeiten auszugleichen.
Verwandte Lektüre
Strukturierte Ausgaben mit LLMs
Das Verständnis von strukturierten Ausgaben ist für Frameworks wie Cognee entscheidend. Diese Artikel vertiefen das Wissen über konsistente, schemakonforme Antworten von LLMs:
- Die Wahl des richtigen LLM für Cognee: Lokale Ollama-Setup
- LLMs mit strukturierten Ausgaben: Ollama, Qwen3 und Python oder Go
- Strukturierte Ausgaben bei populären LLM-Anbietern – OpenAI, Gemini, Anthropic, Mistral und AWS Bedrock
- Strukturierte Ausgabenprobleme bei Ollama GPT-OSS
RAG-Architektur und Implementierung
Für alternative oder ergänzende Ansätze zur Wissensextraktion und -abfrage:
- Erweiterte RAG: LongRAG, Self-RAG und GraphRAG
- Vektordatenbanken für RAG-Vergleich
- MCP-Server in Python: WebSearch & Scrape
Einbettung und Reranking
Die Verbesserung der Retrieval-Qualität durch bessere Einbettungen und Reranking:
- Qwen3-Einbettungs- und Reranker-Modelle auf Ollama: State-of-the-Art-Performance
- Reranking mit Einbettungsmodellen
- Reranking von Textdokumenten mit Ollama und Qwen3-Einbettungsmodell – in Go