RAG mit Ollama und Qdrant als universelle Suchmaschine für eigene Daten

In einer zunehmend unübersichtlichen Informationswelt wird es immer wichtiger, eigene Datenbestände gezielt durchsuchbar zu machen – nicht über klassische Volltextsuche, sondern durch semantisch relevante Antworten. Genau hier kommt das Prinzip der RAG-Datenbank ins Spiel – also einer KI-gestützten Suchlösung, die sich aus zwei zentralen Komponenten zusammensetzt:


Aktuelle Themen zu Künstlicher Intelligenz

  1. einer Vektordatenbank (wie Qdrant), in der beliebige Inhalte als numerische Vektoren abgelegt sind,
  2. und einem Sprachmodell (z. B. via Ollama), das die jeweiligen Anfragen intelligent mit dem passenden Inhalt kombiniert.

Statt das Modell „raten“ zu lassen, nutzt man bei dieser Architektur eigene Wissensquellen – wie zum Beispiel:

  • selbst verfasste Dokumentationen,
  • Inhalte von Webseiten,
  • technische Handbücher,
  • Supportdatenbanken,
  • FAQ-Listen,
  • oder beliebige archivierte Textquellen (z. B. aus alten Datenbanken).

Das Entscheidende: Alle diese Quellen können im Vorfeld aufbereitet und „gechunkt“ (also in kleine Texteinheiten zerlegt) werden, um später möglichst relevante Textausschnitte zu einer Benutzerfrage liefern zu können.

Ob man also eine eigene Wissensdatenbank, eine interne Dokumentation oder ein ganzes Produktarchiv analysierbar machen möchte – mit Ollama + Qdrant gelingt das auf dem eigenen Mac, ohne Cloud-Zwang und mit voller Kontrolle über die Daten.

Was ist eine RAG-Datenbank – und warum überhaupt „Chunking“?

RAG steht für Retrieval-Augmented Generation – also sinngemäß: textgenerierende KI mit unterstützendem Informationsabruf. Anstatt ein Sprachmodell wie GPT, Mistral oder LLaMA nur auf das zu trainieren, was es bereits „weiß“, kann es durch eine angebundene Wissensdatenbank (meist eine sogenannte Vektordatenbank) auf zusätzliche, eigene Informationen zugreifen.

Beispiel:

Fragt man ein Sprachmodell: „Was steht in meiner Steuererklärung von 2023?“, wird es ohne Zugriff auf die Originaldaten raten müssen. Hat es jedoch Zugriff auf eine lokal gespeicherte, vektorbasierte Repräsentation dieses Dokuments, kann es die entsprechenden Informationen gezielt abrufen und in seine Antwort einbauen.

Warum Inhalte „gechunkt“ werden

Dokumente, Webseiten oder Bücher sind meist viel zu lang, als dass sie in einem Stück verarbeitet oder durchsucht werden könnten. Auch moderne Sprachmodelle haben Token-Grenzen – also eine begrenzte Textlänge, die sie auf einmal verstehen können (oft ca. 4.000–8.000 Token, bei neueren Modellen auch 32.000 oder mehr).

Deshalb wird bei RAG folgender Trick angewendet:

  1. Der ursprüngliche Text wird in kleine Abschnitte (Chunks) aufgeteilt.
  2. Jeder Chunk wird durch ein Sprachmodell in einen Vektor umgerechnet (Embedding).
  3. Diese Vektoren werden in einer Datenbank wie Qdrant gespeichert.
  4. Bei einer Anfrage des Nutzers wird der Prompt ebenfalls in einen Vektor übersetzt – und die ähnlichsten Chunks werden abgerufen.
  5. Diese Inhalte werden dem Sprachmodell dann zusätzlich mitgegeben – z. B. durch ein Systemprompt oder Context-Injection.

So entsteht ein System, das sich wie ein Gedächtnis verhält – allerdings ohne klassische Schlüsselwörter oder Volltextsuche, sondern rein bedeutungsbasiert (semantisch).

Voraussetzungen und Ziel

Wir bauen ein lokales RAG-System bestehend aus:

  • einem lokalen LLM via Ollama
  • einer Vektor-Datenbank namens Qdrant
  • einem Python-Skript, das Texte chunked, vektorisiert und in die Datenbank einfügt
  • optional: einer einfachen Oberfläche oder API zur Abfrage

Zielplattform: macOS (Intel oder Apple Silicon)

Vorausgesetzt wird:

  • macOS 12 oder neuer (Monterey oder höher)
  • Terminal-Grundkenntnisse
  • Python 3.10 oder neuer
  • Optional: Homebrew installiert

1. Schritt: Ollama installieren

Ollama ist ein schlankes Tool, mit dem lokale Sprachmodelle wie Mistral, LLaMA, Gemma oder Codellama auf dem eigenen Rechner laufen – auch ohne Internet.

Installation auf dem Mac:

curl -fsSL https://ollama.com/install.sh | sh

Alternativ kann Ollama auch über Homebrew installiert werden:
brew install ollama

Nach der Installation:

ollama run mistral

Das lädt das Mistral 7B-Modell herunter und startet es lokal. Ollama bringt eine REST-API mit, die wir später zur Vektorisierung nutzen. Du kannst natürlich auch andere Modelle nutzen wie z.B. Gemma3 (12B), Mistral Small (24B) oder andere LLMs.

2. Schritt: Qdrant installieren (lokale Vektordatenbank)

Qdrant ist eine blitzschnelle, auf Rust basierende Vektor-Datenbank. Es ist kostenlos, Open Source und leicht auf dem Mac startbar – am besten via Docker. Solltest Du Docker noch nicht auf Deinem Mac installiert haben, kannst Du es auf der Docker Website kostenlos herunterladen und auf Deinem Mac als normale Desktop-App installieren. Alternativ kannst Du Docker auch per Homebrew installieren, wenn Du Homebrew bereits nutzen solltest:

brew install --cask docker

Danach Qdrant per Docker starten:

docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant

Qdrant ist danach erreichbar unter:

http://localhost:6333

Zum Testen:

curl http://localhost:6333/collections

3. Schritt: Python-Umgebung vorbereiten

Für das Chunking, Embedding und die Kommunikation mit Qdrant brauchen wir Python.

Vorbereitung:

python3 -m venv rag-env
source rag-env/bin/activate
pip install qdrant-client sentence-transformers ollama numpy

Falls ollama nicht als Python-Paket erkannt wird, nutze das REST-API direkt per requests:

pip install requests

4. Schritt: Chunking und Embedding

Im folgenden findest Du ein Beispielskript, das ein Textdokument in Chunks aufteilt, Embeddings über Ollama erzeugt und sie in Qdrant einfügt:

import requests
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
import uuid

# Konfiguration
CHUNK_SIZE = 500 # Zeichen
COLLECTION_NAME = "mein_rag_wissen"

# Text vorbereiten
with open("mein_text.txt", "r") as f:
text = f.read()

chunks = [text[i:i+CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]

# Qdrant vorbereiten
client = QdrantClient("localhost", port=6333)

# Neue Collection anlegen (falls noch nicht vorhanden)
client.recreate_collection(
collection_name=COLLECTION_NAME,
vectors_config={"size": 4096, "distance": "Cosine"}
)

def get_embedding_ollama(text):
response = requests.post(
"http://localhost:11434/api/embeddings",
json={"model": "mistral", "prompt": text}
)
return response.json()["embedding"]

# Embeddings erzeugen und in Qdrant speichern
points = []
for i, chunk in enumerate(chunks):
vector = get_embedding_ollama(chunk)
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=vector,
payload={"text": chunk}
))

client.upsert(collection_name=COLLECTION_NAME, points=points)
print(f"{len(points)} Chunks erfolgreich eingefügt.")

5. Schritt: Abfragen über semantische Suche

Du kannst nun Anfragen als Vektor an Qdrant schicken und die relevantesten Textabschnitte finden lassen:

query = "Wie funktioniert ein RAG-System?"
query_vector = get_embedding_ollama(query)

results = client.search(
collection_name=COLLECTION_NAME,
query_vector=query_vector,
limit=3
)

for r in results:
print(r.payload["text"])

Diese Chunks kannst Du dann z. B. über einen Systemprompt an Ollama weitergeben und als kontextbezogene Antwort formulieren lassen.

Chunking + JSON-Export in FileMaker und anderen Datenbanken

In vielen Fällen kann das Chunking bereits in einer vorhandenen Datenbanklösung erfolgen – zum Beispiel in FileMaker. Genau so funktioniert es auch in meiner eigenen Arbeitsumgebung: Die Quelldaten – etwa Webseiteninhalte, Supporteinträge oder technische Artikel – liegen bereits in strukturierter Form in FileMaker vor.

So läuft der Prozess ab:

  1. Die Texte werden innerhalb von FileMaker mit einer eigenen Chunking-Logik in Abschnitte von z. B. 300–500 Zeichen unterteilt.
  2. Jeder Chunk erhält eine eigene ID sowie ggf. Metadaten (Titel, Kategorie, Quelle, Sprache etc.).
  3. Alle Chunks werden automatisch als JSON-Dateien exportiert – z. B. in ein bestimmtes Verzeichnis auf einem Netzlaufwerk oder direkt auf die Festplatte des KI-Servers.
  4. Ein Python-Skript auf dem Server liest diese JSON-Dateien ein und speichert sie in der Qdrant-Datenbank.

Beispiel für eine exportierte Chunk-Datei (chunk_00017.json)

{
"id": "00017",
"text": "Dies ist ein einzelner Textabschnitt mit ca. 400 Zeichen, der aus einer größeren Quelle stammt. Er wurde in FileMaker vorbereitet und enthält alle relevanten Inhalte, die für eine semantische Suche benötigt werden.",
"metadata": {
"source": "support_center",
"category": "Fehlermeldung",
"language": "de",
"title": "Drucker wird nicht erkannt"
}
}

Das anschließende Importskript kann dann über das Terminal automatisch oder regelmäßig ausgeführt werden – z. B. via Cronjob oder manuellen Aufruf:

python3 import_json_chunks.py /Users/markus/Desktop/chunks/

Dabei liest das Skript jeden JSON-Chunk ein, erzeugt den passenden Vektor (z. B. via Ollama oder SentenceTransformers) und überträgt den Eintrag an die Qdrant-Datenbank.

Diese Methode ist nicht nur transparent, sondern lässt sich auch sehr gut mit bestehenden IT-Strukturen kombinieren – insbesondere in Unternehmen, die bereits FileMaker einsetzen oder aus Gründen der Prozessklarheit gerne alles zentral und visuell gesteuert abbilden.

Beliebige Datenbanken an Deine lokale KI anbinden

Mit Ollama und Qdrant lässt sich auf dem Mac in kurzer Zeit ein vollständiges, performantes RAG-System aufbauen:

  • Lokal, ohne Cloud oder Abo
  • Erweiterbar, mit eigenen Inhalten
  • Datensicher, da nichts den Rechner verlässt
  • Effizient, da Qdrant auch auf größeren Datenmengen schnell bleibt

Wer seine KI nicht nur zum Plaudern, sondern als echtes Wissens- und Gedächtnissystem nutzen will, kommt an dieser Kombination kaum vorbei. Und: Es funktioniert bereits mit geringem Aufwand – bei voller Kontrolle über die eigenen Daten.


Aktuelle Umfrage zur Nutzung lokaler KI-Systeme

Wie stehst Du zu lokal laufender KI-Software wie MLX oder Ollama?

Ausblick: Was mit RAG, Ollama und Qdrant möglich wird

Das in diesem Artikel beschriebene Setup bildet die technische Grundlage für eine neue Form des Umgangs mit Wissen – lokal, kontrolliert und flexibel erweiterbar. Doch damit endet die Reise keineswegs. Wer das Zusammenspiel von Chunking, Embedding, semantischer Suche und Sprachmodellen einmal verstanden hat, erkennt schnell, wie vielseitig diese Architektur in der Praxis einsetzbar ist.

1. Anbindung an eigene Datenbanken

Ob FileMaker, MySQL, PostgreSQL oder MongoDB – durch gezielte Abfragen lassen sich beliebige Inhalte regelmäßig extrahieren, chunken und automatisiert in die Vektordatenbank einfügen. So wird aus einer klassischen Datenbank eine semantisch durchsuchbare Wissensquelle. Besonders in Support-Systemen, Produktarchiven oder digitalen Bibliotheken eröffnet das ganz neue Zugriffsmöglichkeiten für Mitarbeiter oder Kunden.

2. Automatischer Import von Webseiten, PDFs oder Dokumenten

Inhalte müssen nicht händisch übertragen werden. Mit Tools wie BeautifulSoup, readability, pdfplumber oder docx2txt lassen sich ganze Webseiten, PDF-Handbücher oder Word-Dokumente automatisiert einlesen, in Textform bringen und für das Chunking vorbereiten. So können z. B. technische Wikis, Kundenportale oder Online-Dokumentationen regelmäßig aktualisiert in die RAG-Datenbank eingespeist werden.

3. Langfristiger Wissensaufbau durch Strukturierung

Im Gegensatz zu einer klassischen KI-Anwendung, die bei jeder Frage von Null beginnt, erlaubt ein RAG-Setup die schrittweise Erweiterung und Kuratierung des zugrunde liegenden Wissens. Durch gezielte Auswahl und Vorbereitung der Chunks entsteht ein eigenes semantisches Gedächtnis, das mit jedem Eintrag wertvoller wird.

4. Verbindung mit Wissensgraphen (Neo4j)

Wer noch einen Schritt weiter gehen will, kann die Informationen nicht nur semantisch ablegen, sondern auch logisch verknüpfen. Mit Neo4j, einer Graphdatenbank, lassen sich Beziehungen zwischen Begriffen, Personen, Themen oder Kategorien visualisieren und gezielt abfragen. So wird aus einer Sammlung von Texten ein strukturierter Wissensgraph, der sowohl vom Menschen als auch von der KI genutzt werden kann – z. B. um Kausalketten, zeitliche Abläufe oder thematische Cluster sichtbar zu machen.

5. Verwendung in eigenen Tools, Apps oder Chatbots

Einmal eingerichtet, kann die RAG-Logik in nahezu jede Anwendung integriert werden: als semantische Suchfunktion in einer internen Web-App, als intelligente Eingabehilfe in einem CRM-System oder als Chatbot mit eigenem Fachwissen auf der Firmenwebsite. Durch die Verwendung lokaler APIs (z. B. Ollama REST und Qdrant gRPC) bleiben sämtliche Komponenten flexibel und erweiterbar – auch über klassische Unternehmensgrenzen hinaus.

Wer den Mut hat, sich mit diesen Tools vertraut zu machen, schafft die Grundlage für unabhängige, lokale KI-Systeme mit echtem Nutzwert – ganz im Geist von Kontrolle, Souveränität und technischer Klarheit.


Aktuelle Themen rund um ERP-Software

Häufig gestellte Fragen zu RAG mit Ollama + Qdrant

1. Was ist eine RAG-Datenbank – und wofür ist sie gut?

Eine RAG-Datenbank (Retrieval-Augmented Generation) kombiniert eine Vektordatenbank mit einem Sprachmodell. Sie ermöglicht es, eigene Inhalte – z. B. Dokumentationen oder Webseiten – semantisch durchsuchbar zu machen, sodass KI-Modelle gezielt auf relevante Ausschnitte aus dem eigenen Datenbestand zugreifen können.

2. Was bedeutet „Chunking“ in diesem Zusammenhang?

Chunking bedeutet, lange Texte in kleinere, sinnvoll zusammenhängende Abschnitte (Chunks) zu zerlegen – meist zwischen 200 und 500 Zeichen. Dadurch können einzelne Textteile effizient in der Vektordatenbank gespeichert und später bei Fragen wiedergefunden werden.

3. Warum kann man nicht einfach ganze Texte in Qdrant speichern?

Weil KI-Modelle und Vektorsuchen mit begrenzten Textlängen arbeiten. Große Dokumente würden wichtige Inhalte „verstecken“ oder ungenau machen. Chunking erhöht die Treffsicherheit, da gezielte Abschnitte statt kompletter Texte verglichen werden.

4. Kann ich Inhalte aus beliebigen Quellen verwenden?

Ja. Solange Du die Texte in bearbeitbarer Form (z. B. als Klartext, HTML, Markdown, PDF, FileMaker-Einträge etc.) vorliegen hast, kannst Du sie aufbereiten, chunken und in Qdrant integrieren. Auch Mischquellen sind möglich.

5. Muss ich programmieren können, um so ein System zu bauen?

Grundkenntnisse in Terminal und Python sind hilfreich, aber nicht zwingend erforderlich. Viele Schritte (z. B. Chunking in FileMaker, JSON-Export) lassen sich visuell und automatisiert umsetzen. Das Qdrant-Importskript lässt sich leicht anpassen.

6. Kann ich auch mehrere Dokumente oder Kategorien verwalten?

Ja. Jeder Chunk kann Metadaten enthalten – z. B. Titel, Quelle, Sprache oder Kategorie. Diese können bei der Suche mitberücksichtigt werden, um Ergebnisse gezielter zu filtern.

7. Welche Modelle sind für die Embedding-Erzeugung geeignet?

Du kannst entweder ein lokales Modell über Ollama verwenden (z. B. mistral, llama2, gemma) oder ein separates Embedding-Modell wie all-MiniLM aus sentence-transformers. Wichtig ist, dass das Modell Embedding-Ausgaben als Vektoren erzeugt.

8. Wie starte ich Qdrant auf dem Mac?

Am einfachsten per Docker-Befehl:

docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant

Qdrant läuft danach unter http://localhost:6333

9. Wie groß dürfen meine Datenmengen sein?

Qdrant ist sehr performant und kann problemlos Zehntausende oder Hunderttausende Chunks verwalten. Die Hauptbegrenzung liegt in RAM und Speicherplatz, nicht in der Anzahl.

10. Funktioniert das auch mit FileMaker?

Ja. Du kannst das gesamte Chunking und den JSON-Export direkt in FileMaker erledigen. Die Chunks werden als einzelne JSON-Dateien exportiert, die dann über ein Python-Skript in Qdrant eingespielt werden – völlig unabhängig vom Ursprungssystem.

11. Kann ich das auch auf einem anderen Server statt Mac betreiben?

Absolut. Das Setup funktioniert auch unter Linux-Servern, Raspberry Pi, oder in der Cloud (wenn gewünscht). Docker macht es plattformunabhängig. Für produktive Nutzung wird meist ein Server mit mehr RAM und GPU-Unterstützung empfohlen.

12. Wie kombiniere ich die Vektorsuche mit Ollama?

Du erstellst zu einer Nutzerfrage zunächst einen Vektor via Ollama (Embedding API), suchst damit in Qdrant die relevantesten Chunks, und gibst diese dem Sprachmodell als Kontext mit. Ollama verarbeitet dann die Frage + kontextrelevante Infos und erzeugt eine fundierte Antwort.

Bild (c) geralt @ pixabay

Schreibe einen Kommentar