RAGLite: RAG-Werkzeugkasten auf DuckDB oder PostgreSQL, ohne PyTorch und LangChain
🥤 RAGLite is a Python toolkit for Retrieval-Augmented Generation (RAG) with DuckDB or PostgreSQL
Auf einen Blick
- Was ist das?
- RAGLite bündelt Hybride Suche, spätes Chunking und einen linearen Query-Adapter in einer Python-Bibliothek, die auf DuckDB oder PostgreSQL aufsetzt. Der Reiz liegt in den Abhängigkeiten, die nicht dabei sind. Der Preis liegt in der Enge des Materialangebots.
- Für wen ist es gedacht?
- Wer eine schlanke RAG-Pipeline in Python sucht, bereits LiteLLM nutzt und PDFs als Hauptquelle hat, findet in RAGLite eine kleine, klar abgegrenzte Abhängigkeitsbasis. Wer DOCX- und PPTX-Bestände ohne Pandoc oder Mistral OCR verarbeiten muss, wer eine fertige Weboberfläche erwartet oder wer ein umfangreich dokumentiertes Projekt braucht, sollte zuerst die Extras und die Dokumentationslage prüfen.
- Darf ich es kommerziell nutzen?
- Ja, unter Bedingungen. MPL-2.0 ist eine Lizenz mit schwachem Copyleft: Sie dürfen sie in kommerzieller und proprietärer Software verwenden, müssen aber Änderungen an ihren eigenen Dateien unter derselben Lizenz veröffentlichen, wenn Sie sie weitergeben.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 30 Tagen.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Python, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welche Lücke RAGLite adressiert
Viele RAG-Beispiele im Python-Ökosystem ziehen PyTorch und LangChain als Abhängigkeiten mit. RAGLite positioniert sich dagegen ausdrücklich als Sammlung leichtgewichtiger und permissiv lizenzierter Bibliotheken. Im README steht als Ziel: keine Abhängigkeit von PyTorch oder LangChain. Wer schon einmal versucht hat, eine Vektorsuche in einer bestehenden Anwendung unterzubringen und dabei einen mehrstelligen Gigabyte-Stack an Transitive Dependencies mitzog, kennt das Motiv. RAGLite ist für Python-Entwickler gedacht, die eine vollständige Kette von der Dokumentaufnahme über die Suche bis zur Antwort generieren wollen, ohne die Kontrolle über die Bausteine abzugeben. Ein bestimmter Anwendertyp fehlt allerdings: Wer seine Dokumente in DOCX, PPTX oder als Bilder vorliegen hat, braucht zusätzliche Extras oder Mistral OCR. Die Grundinstallation deckt laut README nur PDF ab.
Hybride Suche direkt in der Datenbank
Der Kern von RAGLite ist eine hybride Suche, die die Stichwort- und Vektorsuche der Datenbank selbst nutzt, statt beide Signale in Python zu kombinieren. Auf DuckDB sind das die Erweiterungen FTS und VSS, auf PostgreSQL tsvector und pgvector. Das ist eine Architekturentscheidung mit Folgen: Die Suche läuft dort, wo die Daten liegen, und die Datenbankwahl bestimmt, welche Betriebsform möglich ist. DuckDB ist eine eingebettete Datei, PostgreSQL ein Server. Wer später von einer auf die andere wechseln will, wechselt nicht nur einen Connection-String, sondern die Suchmaschinerie. Für die Fusion der beiden Trefferlisten verweist das README auf Reciprocal Rank Fusion nach Cormack et al. Ein Reranker kommt danach zum Einsatz, standardmäßig FlashRank über die Bibliothek rerankers, die laut README auch mehrsprachige Modelle umfasst. Die Reihenfolge ist also: zwei Suchpfade, Fusion, Reranking. Das ist keine Besonderheit von RAGLite, aber es ist der Teil, an dem die Ergebnisqualität tatsächlich hängt, und die Dokumentation beschreibt die Schritte, ohne Schwellenwerte oder Standardparameter zu nennen.
Spätes Chunking und der Query-Adapter
Zwei Mechanismen heben sich aus der Funktionsliste heraus. Erstens das späte Chunking: Die Chunk-Embeddings entstehen als Multi-Vektor-Embeddings, das heißt, ein Chunk trägt mehr als einen Vektor. Das README verweist dazu auf einen Blogbeitrag von Weaviate und ergänzt kontextuelle Chunk-Überschriften, eine Idee von d-star.ai. Zweitens ein linearer Query-Adapter in src/raglite/_query_adapter.py, der als geschlossene Lösung eines orthogonalen Procrustes-Problems beschrieben wird. Beide Punkte sind in der README-Darstellung eher Verweise als Erklärungen: Wer verstehen will, was der Adapter mit welchen Trainingsdaten tut, findet im vorliegenden Material nur den Dateipfad und die mathematische Einordnung. Dasselbe gilt für das optimale Satz-Splitting mit wtpsplit-lite und das semantische Chunking, die beide als binäres ganzzahliges Optimierungsproblem beschrieben werden. Das ist ein ehrlicher Hinweis darauf, dass hier Optimierungsverfahren eingesetzt werden, aber es ist keine Betriebsanleitung. Wer diese Teile anpassen will, muss den Quellcode lesen.
Installation und Konfiguration
Die Grundinstallation ist ein Befehl: pip install raglite. Alles Weitere kommt über Extras. Für die Chat-Oberfläche auf Basis von Chainlit heißt es pip install raglite[chainlit], für weitere Dateitypen neben PDF pip install raglite[pandoc], für die Evaluierung pip install raglite[ragas]. Mistral OCR ist kein Extra, sondern ein separates Paket: pip install mistralai. Wer lokale Modelle über llama.cpp betreiben will, dem empfiehlt das README ausdrücklich ein vorkompiliertes llama-cpp-python-Binary statt eines Quellbaus, mit den Umgebungsvariablen LLAMA_CPP_PYTHON_VERSION, PYTHON_VERSION, ACCELERATOR und PLATFORM. Das README warnt selbst, dass nicht jede Kombination verfügbar ist. Die Modellkennung für llama.cpp folgt dem Muster llama-cpp-python/<hugging_face_repo_id>/<filename>@<n_ctx>, wobei n_ctx die Kontextgröße angibt. Die zentrale Konfiguration läuft über die Klasse RAGLiteConfig, die im README mit dem Kommentar 'Example remote config' beginnt und im vorliegenden Auszug abgeschnitten ist. Das ist eine konkrete Lücke: Welche Felder RAGLiteConfig im Einzelnen akzeptiert, lässt sich aus dem Material nicht ableiten.
Optionale Bausteine und ihre Kosten
RAGLite liefert mehrere optionale Schichten, die jeweils einen zusätzlichen Dienst oder ein zusätzliches Paket bedeuten. Pandoc konvertiert beliebige Eingabedokumente nach Markdown. Mistral OCR verarbeitet PDFs, Bilder, DOCX und PPTX mit automatischen Bildbeschreibungen, ist aber ein gehosteter Dienst von Mistral und damit ein externer Aufruf mit entsprechenden Kosten und Datenabfluss. Ragas bewertet Retrieval und Generierung, was ohne Referenzdaten wenig aussagekräftig bleibt. Chainlit liefert eine anpassbare ChatGPT-ähnliche Oberfläche für Web, Slack und Teams. Dazu kommt ein eingebauter MCP-Server, den jeder MCP-Client wie Claude Desktop verbinden kann. Das sind viele Anknüpfungspunkte, und jeder davon hat eigene Abhängigkeiten, eigene Ausfallmodi und eigene Versionierung. Die Aussage des README, nur leichte und permissive Abhängigkeiten zu verwenden, gilt für die Grundinstallation. Sie gilt nicht automatisch für jede Kombination aus Extras.
Wo RAGLite das falsche Werkzeug ist
Drei Grenzen sind aus dem Material ableitbar. Erstens die Dokumentenformate: Ohne Pandoc oder Mistral OCR verarbeitet RAGLite nur PDF. Wer einen gemischten Bestand aus Office-Dateien und Scans hat, muss eine dieser beiden Zusatzschichten einbauen, und beide bringen fremde Abhängigkeiten oder einen externen Dienst mit. Zweitens die Sprach- und Modellfrage: Die Modellwahl läuft über LiteLLM, und die Qualität der Antwort hängt an dem Modell, das dort konfiguriert wird, nicht an RAGLite. Drittens die Dokumentationslage. Das README listet sieben Nutzungsschritte von der Konfiguration bis zum Frontend, bricht aber im vorliegenden Auszug mitten in der Konfiguration ab. Vergleichende Angaben zu Latenz, Speicherbedarf oder Trefferqualität zwischen DuckDB und PostgreSQL enthält das Material nicht. Wer eine belastbare Entscheidung für eine der beiden Datenbanken braucht, findet sie hier nicht. Das Projekt ist zudem mit Stand August 2026 nicht archiviert, aber die Abstände zwischen den Releases sind unregelmäßig: v0.7.0 im März 2025, v1.0.0 im Juni 2025, v1.1.1 erst im Mai 2026.
Alternative: LlamaIndex und Haystack setzen anders an
Der naheliegende Vergleich sind Frameworks wie LlamaIndex oder Haystack. Der Unterschied liegt nicht in den Funktionen, sondern im Grad der Bindung. RAGLite überlässt die Suche der Datenbank und die Modellanbindung LiteLLM. LlamaIndex und Haystack definieren eigene Abstraktionen für Index, Retriever und Node, dazu eigene Speicher-Backends und eigene Query-Engines. Das erlaubt mehr Austauschbarkeit innerhalb des Frameworks, zieht aber auch dessen Typsystem, seine Versionierung und seine Konventionen in die eigene Anwendung. RAGLite geht den umgekehrten Weg: weniger eigene Abstraktion, mehr direkte Abhängigkeit von DuckDB-Erweiterungen oder PostgreSQL-Typen. Wer bereits PostgreSQL mit pgvector betreibt, kann RAGLite auf eine bestehende Datenbank setzen. Wer eine eingebettete Datei ohne Server bevorzugt, nimmt DuckDB. Der Preis für diese Nähe ist, dass ein Datenbankwechsel keine Konfigurationsänderung ist.
Lizenz und Pflegeaufwand
RAGLite steht unter MPL-2.0, der Mozilla Public License 2.0. Das ist eine Datei-für-Datei-Copyleft-Lizenz: Änderungen an bestehenden MPL-Dateien müssen unter derselben Lizenz offengelegt werden, während größere eigene Werke, die RAGLite einbinden, unter anderen Bedingungen bleiben können. Das README selbst betont, dass die Abhängigkeiten permissiv lizenziert sind, was die Weitergabe erleichtert. Eine rechtliche Bewertung ersetzt das nicht. Beim Pflegeaufwand sind die Extras der eigentliche Kostentreiber: Chainlit, Pandoc, Ragas und Mistral OCR haben eigene Release-Zyklen, und die Modellkennungen für llama.cpp sind an konkrete Dateinamen und Repository-IDs auf Hugging Face gebunden. Ein Upgrade von llama-cpp-python erfordert die passende Kombination aus Python-Version, Accelerator und Plattform, wie das README anhand der Variablen LLAMA_CPP_PYTHON_VERSION, PYTHON_VERSION, ACCELERATOR und PLATFORM zeigt. Wer diese Kombination einmal festgelegt hat, sollte sie nicht als Nebensache behandeln.
Redaktionelles Fazit
Wer eine schlanke RAG-Pipeline in Python sucht, bereits LiteLLM nutzt und PDFs als Hauptquelle hat, findet in RAGLite eine kleine, klar abgegrenzte Abhängigkeitsbasis. Wer DOCX- und PPTX-Bestände ohne Pandoc oder Mistral OCR verarbeiten muss, wer eine fertige Weboberfläche erwartet oder wer ein umfangreich dokumentiertes Projekt braucht, sollte zuerst die Extras und die Dokumentationslage prüfen. Vor dem Einsatz lohnt ein Blick in die Beispiele unter 'Using', in die Konfigurationsklasse RAGLiteConfig und in die Frage, ob das eigene Dokumentenformat ohne Zusatzpaket überhaupt gelesen wird.
Community-Notizen