Repository navigation
RAG Einrichtung
Diese Seite beschreibt, was ein Verwalter für die Dokumentsuche einrichten muss: Embedding-Modell, Texterkennung (OCR), das Beschreiben von Abbildungen, den Worker und die Fehlersuche. Was Nutzer mit Sammlungen tun, steht unter Fragen an eigene Dokumente, das Anbinden von NAS-Ordnern unter Verzeichnisquellen.
Stand: Alles auf dieser Seite ist umgesetzt: Worker, Suche, die Verwaltung im Admin und die komplett lokale Verarbeitung – Embeddings mit nomic-embed-text über LM Studio (768 Dimensionen, Präfixe
search_document:undsearch_query:), OCR mit olmOCR über LM Studio und Tesseract als Ersatz, die Auswahl der von LM Studio gemeldeten Modelle in den Einstellungen sowie die Knöpfe „Speichern und Embedding testen“ und „Speichern und OCR testen“. Ein OCR-Test gegen ein echtes LM Studio mit olmOCR war erfolgreich. Seit 0.3.2 lädt MultiGPT die Modelle in LM Studio auf Wunsch selbst und hält sich an ein Speicherbudget (Modellverwaltung); gegen ein echtes LM Studio ist nur das Lesen der Modellliste geprüft, Laden und Entladen nur mit nachgebildeter API.
Platzhalter, die du ersetzen musst, stehen in spitzen Klammern, z. B. <schlüssel>.
| Teil | Aufgabe |
|---|---|
Weboberfläche (multi-gpt.service) |
Upload, Sammlungen, Suche im Chat |
Worker (multi-gpt-worker.service) |
liest hochgeladene Dokumente, OCR, Zerteilung, Embeddings |
| Embedding-Modell | rechnet Text in Vektoren um, für Indexierung und jede Suchanfrage |
| OCR | liest gescannte PDF-Seiten ohne Textebene und Bilddateien: olmOCR über LM Studio (Tesseract auf Wunsch als Ersatz) oder Tesseract auf dem Server |
| Abbildungen (optional) | ein allgemeines Vision-Modell beschreibt Bilder und Diagramme in PDF und DOCX sowie Bilddateien; die Beschreibung wird mit durchsucht |
| PostgreSQL mit pgvector | speichert Abschnitte und Vektoren, sucht per HNSW-Index und Volltext |
Ohne eingerichtetes Embedding-Modell lassen sich Dokumente zwar hochladen, sie werden aber nicht indexiert („Es ist kein Embedding-Modell eingerichtet …“), und die Seiten der Sammlungen zeigen einen Hinweis.
Im Admin (nur Verwalter) gibt es einen eigenen Abschnitt „Dokumente (RAG)“ mit:
- RAG-Übersicht: Konfiguration (Embedding-Modell, Anbieter, Vektordimension), Zahlen je Status, Speicherbedarf, Zustand des Workers und Warteschlange. Knöpfe „Embedding testen“, „OCR testen“, „Alles neu indexieren“, „Fehlgeschlagene erneut versuchen“ und „Hängende Aufträge zurücksetzen“.
- Einstellungen: Embedding-Modell, Zerteilung, Suche (siehe unten).
- Sammlungen, Dokumente, Indexierungsaufträge: Listen mit Aktionen wie „Neu indexieren“, „Erneut versuchen“ und „Abbrechen und löschen“.
- Verzeichnisquellen (siehe Verzeichnisquellen).
Verwalter sehen dort nur Metadaten (Titel, Status, Größe, Fehlertext), nie Dokument- oder Abschnittsinhalte.
Das Debian-Paket multi-gpt hängt von poppler-utils (pdftoppm, rendert PDF-Seiten als
Bild) sowie tesseract-ocr, tesseract-ocr-deu und tesseract-ocr-eng ab; apt installiert sie
mit. In der Entwicklung von Hand:
sudo apt install poppler-utils tesseract-ocr tesseract-ocr-deu tesseract-ocr-engPrüfen, welche Sprachen Tesseract kennt:
tesseract --list-langsDie Sprachen der Texterkennung legt OCR_LANGUAGES fest (Grundeinstellung deu+eng). Für
weitere Sprachen das passende Paket tesseract-ocr-<sprache> installieren (Liste der
Sprachkürzel in der Tesseract-Doku),
dann in /etc/multi-gpt/.env zum Beispiel:
OCR_LANGUAGES=deu+eng+fraund den Worker neu starten: sudo systemctl restart multi-gpt-worker.
Alle Werte sind optional; ohne Eintrag gilt die Grundeinstellung.
Die vollständige Liste aller Schlüssel (Datenbank, Netz, Login-Sperre, gunicorn, Entwicklung) steht auf der Seite Konfiguration. Hier nur die für Dokumente:
| Variable | Grundeinstellung | Wirkung |
|---|---|---|
DOCUMENT_MAX_UPLOAD_MB |
25 |
Höchstgröße je hochgeladenem Dokument in MB |
OCR_LANGUAGES |
deu+eng |
Sprachen für Tesseract, mit + verbunden |
JOB_MAX_ATTEMPTS |
5 |
Versuche je Indexierungsauftrag bei Fehlern, danach „Fehler“ |
RAG_SOURCE_ROOTS |
leer (aus) | erlaubte Wurzeln für Verzeichnisquellen |
RAG_SOURCE_MAX_FILES |
5000 |
Höchstzahl Dateien je Einlesevorgang einer Verzeichnisquelle |
Die nginx-Site des Pakets setzt client_max_body_size automatisch auf DOCUMENT_MAX_UPLOAD_MB + 10 MB;
nach einer Änderung des Werts sudo dpkg-reconfigure multi-gpt ausführen (siehe nginx und TLS). Nach Änderungen an der .env:
sudo systemctl restart multi-gpt multi-gpt-workerDie Vektordimension (768) ist fest im Code und keine Umgebungsvariable: Eine Änderung braucht eine Migration der Datenbank und „Alles neu indexieren“.
Damit keine Dokumentinhalte das Haus verlassen, rechnet LM Studio im Heimnetz die Embeddings und auf Wunsch die Texterkennung. LM Studio muss dafür in MultiGPT als Anbieter eingerichtet sein (wie für lokale Chat-Modelle).
Modelle:
| Zweck | Modell | Hinweis |
|---|---|---|
| Embeddings |
text-embedding-nomic-embed-text-v1.5 (GGUF von nomic-ai/nomic-embed-text-v1.5-GGUF) |
768 Dimensionen, passt zur Datenbank |
| OCR |
allenai/olmocr-2-7b (GGUF-Variante von allenai/olmOCR-2-7B-1025) |
Vision-Modell, laut Modellseite ca. 5 GB Speicher |
| Abbildungen (optional) |
qwen/qwen3-vl-8b (Qwen3-VL-8B, GGUF oder MLX) |
allgemeines Vision-Modell, laut Modellseite ab 6 GB Speicher; Alternativen: google/gemma-3-12b (ab 11 GB) oder Qwen2.5-VL-7B-Instruct |
olmOCR eignet sich nur zum Lesen von Text, nicht zum Beschreiben von Abbildungen; dafür ein
allgemeines Vision-Modell nehmen. Empfohlen ist Qwen3-VL-8B: aktuell, in LM Studio als
qwen/qwen3-vl-8b mit Bild-Eingabe gelistet und für Diagramme mit Achsen und Beschriftungen
gut geeignet. Wer wenig Speicher hat, nimmt qwen/qwen3-vl-4b.
Speicher: Sind nomic-embed, olmOCR und das Vision-Modell gleichzeitig geladen, braucht LM Studio zusammen grob 12 GB (mit Gemma 3 12B statt Qwen3-VL-8B rund 17 GB) Grafik- bzw. Arbeitsspeicher, dazu Platz für den Kontext. Reicht der Speicher nicht, entweder ein kleineres Vision-Modell wählen oder das Beschreiben der Abbildungen ausgeschaltet lassen.
Von sich aus lädt LM Studio ein Modell erst bei der ersten Anfrage (JIT), entlädt es nach 60 Minuten ohne Nutzung wieder und verdrängt mit „Auto-Evict“ ein JIT-geladenes Modell, sobald ein anderes kommt (LM Studio: TTL und Auto-Evict). Wechseln sich bei der Indexierung olmOCR und nomic-embed ab, während im Chat gpt-oss läuft, lädt LM Studio ständig um, Anfragen warten oder scheitern mit „Modell nicht geladen“, und die Modelle drängen sich im Grafikspeicher – an dem auch der Monitor hängt.
Deshalb kann MultiGPT die Modelle selbst verwalten (ab LM Studio 0.4, REST-API v1):
-
Vor jedem Gebrauch laden: Chat, Vergleich,
asküber die API, Embeddings (Indexierung und Suche), OCR und Abbildungen prüfen, ob das Modell geladen ist, und laden es sonst mit seinem Lade-Profil (Kontextfenster, Parallelität, ohne TTL). Im Chat steht solange „Lade openai/gpt-oss-20b …“ in der Statuszeile, beim Lauf im Fortschritt. - Nie über das Budget: Am Anbieter stehen Speicherbudget für Modelle (GB) (was LM Studio an Grafikspeicher nutzen darf) und Reserve für Anzeige bzw. System (GB) (Standard 2 GB, bleibt immer frei). Passt ein Modell nicht in den freien Rest, entlädt MultiGPT zuerst andere – aber nur, wenn das genug Platz schafft. Sonst lädt es nichts: Der Chat zeigt „Zu wenig Grafikspeicher für …: belegt durch …“, ein Lauf wartet mit dieser Meldung (neuer Versuch alle 5 Minuten, wie bei ausgeschaltetem LM Studio).
-
Entladeregeln (Reihenfolge: Priorität, dann am längsten nicht genutzt):
- nie angeheftete Modelle (z. B. nomic-embed: klein und für die Suche immer nötig);
- nie Modelle, die gerade eine Anfrage bearbeiten (Zähler je Modell in der Datenbank, für alle Prozesse; läuft nach 20 Minuten ab, falls ein Prozess abstürzt);
- nie Modelle, die MultiGPT nicht kennt (von Hand in LM Studio geladen);
- Indexierungsmodelle (Embedding, OCR, Abbildungen) weichen einem Chatmodell, auf das ein Mensch wartet – aber nicht, solange ein Lauf offen ist;
- die Indexierung verdrängt nur Modelle mit niedrigerer Priorität, das Chatmodell bei gleicher Priorität also nie; im Chat weichen auch gleich hohe.
- Leerlauf: Der Worker entlädt jede Minute Modelle, die länger als Entladen nach Leerlauf (Standard 30 Minuten, 0 = nie) nicht genutzt wurden – nie angeheftete, belegte oder Indexierungsmodelle während eines Laufs. Die TTL von LM Studio bleibt ungenutzt.
- Nach der Indexierung: Modelle der Indexierung (Embedding, OCR, Abbildungen) werden nur für den Lauf geladen: Ist kein Lauf mehr offen, entlädt der Worker sie nach 2 Minuten ohne Gebrauch (Schalter „nach der Indexierung entladen“, Standard an). So bleibt die Grafikkarte außerhalb der Läufe dem Chat. Die Suche im Chat lädt das Embedding-Modell bei Bedarf kurz nach (nomic: etwa 0,4 GB, wenige Sekunden). Wer das vermeiden will, heftet es an.
- Gleichzeitig: Laden und Entladen laufen nacheinander (Sperre in PostgreSQL). Wer währenddessen dasselbe Modell braucht, wartet und nutzt es dann.
- Ladefehler: Meldet LM Studio einen Fehler (z. B. zu wenig Speicher), wartet MultiGPT mit dem nächsten Versuch 1, 2, 4 … höchstens 30 Minuten; „Laden“ von Hand geht sofort.
Mehrere Installationen an einem LM Studio (z. B. Produktion und Entwicklung): Seit 0.3.6 entlädt jede Installation nach Leerlauf bzw. nach der Indexierung nur Modelle, die sie selbst geladen hat. Eine Installation, die gerade ein Modell der anderen nutzt, verliert es dadurch nicht mehr. Platz für eine wartende Anfrage schaffen darf jede Installation weiterhin; wird ein Modell dabei mitten in der Arbeit entladen („Model is unloaded“ bzw. „Model unloaded by user or API request“), wiederholt die OCR die Seite einmal. Am ruhigsten bleibt es, wenn nur eine Installation „Modelle verwalten“ eingeschaltet hat.
Einrichten: Admin → Anbieter → LM Studio → Abschnitt „Modellverwaltung (LM Studio)“: „Modelle verwalten“ an, Budget und Reserve eintragen. Ohne diesen Schalter ändert sich nichts. In LM Studio die Einstellung „JIT models auto-evict“ ausschalten bzw. JIT-Laden ganz abschalten, damit LM Studio nicht selbst nebenher lädt.
Lade-Profil je Modell (KI-Modell im Admin, Kontextfenster auch in der Fähigkeiten-Matrix, in den RAG-Einstellungen und auf der Seite „LM Studio: geladene Modelle“):
| Feld | Standard | Bedeutung |
|---|---|---|
| Kontextfenster beim Laden | Vorschlag: Chat 32 768, OCR 8 192, Embedding Modellstandard | Stufen 2 048 … 131 072, nur bis zur Länge, die LM Studio für das Modell meldet |
| Parallele Anfragen | leer (LM Studio) | nur setzen, wenn nötig |
| angeheftet | aus | nie automatisch entladen |
| Priorität | 50 | 0–100, niedrigere gehen zuerst |
| automatisch laden | an | aus: nur von Hand laden, sonst Meldung |
| Entladen nach Leerlauf | 30 min | 0 = nie; gilt nicht für angeheftete |
| nach der Indexierung entladen | an | nur Indexierungsmodelle: 2 min nach dem Lauf statt nach dem Leerlauf |
| gemessener Speicherbedarf | leer | überschreibt die Schätzung (z. B. Wert aus nvidia-smi) |
Erwarteter Speicher: Neben jeder Auswahl „Kontextfenster“ steht live die Schätzung, das Budget (frei bzw. belegt durch die anderen geladenen Modelle, Reserve) und – wenn es nicht passt – eine Warnung („passt nicht: 3,2 GB zu viel – kleinere Stufe wählen oder anderes Modell entladen“). Speichern geht trotzdem; das Laden hält sich an das Budget. Die Schätzung:
- Modelldatei: Größe laut LM Studio (bei Vision-Modellen mit Bild-Projektor).
-
Kontext-Cache (KV-Cache): 2 × Schichten × KV-Köpfe × Kopfdimension × 2 Byte × Kontext
(NVIDIA: Mastering LLM Techniques).
LM Studio meldet die Architekturdaten nicht; für bekannte Modelle stehen sie in MultiGPT
(aus deren
config.json: gpt-oss-20b 24 Schichten, 8 KV-Köpfe, 64 Dimensionen; olmOCR-2-7B bzw. Qwen2.5-VL-7B 28/4/128; nomic-embed-text 12/12/64). gpt-oss nutzt in jeder zweiten Schicht ein Fenster von 128 Tokens; diese Schichten zählen nur mit Fenster plus Puffer. Unbekannte Modelle: konservative Näherung nach Größe (8 KV-Köpfe × 128, reichlich Schichten). - Zuschlag für Rechenpuffer: 0,5 GB je Sprachmodell, 0,3 GB mehr mit Bild-Eingabe, 0,25 GB bei Embedding-Modellen.
Einheit GB = 10⁹ Byte wie in LM Studio (eine Karte mit 16 GiB hat 17,2 GB; wer 16 einträgt, lässt ungefähr 1 GB zusätzlich frei).
Typische Werte (Schätzung, nicht gemessen):
| Modell (Datei) | 8 k | 16 k | 32 k | 64 k |
|---|---|---|---|---|
| nomic-embed-text-v1.5 (0,08 GB, höchstens 2 048 Tokens) | – (bei 2 048: 0,4 GB) | – | – | – |
| olmocr-2-7b Q4_K_M (6,0 GB) | 7,3 GB | 7,8 GB | 8,7 GB | 10,6 GB |
| gpt-oss-20b MXFP4 (12,1 GB) | 12,9 GB | 13,1 GB | 13,5 GB | 14,3 GB |
Empfehlung Kontextlängen: gpt-oss-20b 32 768 (Werkzeuge brauchen Platz), olmOCR 8 192 (eine Seite plus 8 000 Tokens Antwort), nomic 2 048. Alle drei zusammen brauchen dann rund 21,2 GB; mit einer 24-GB-Karte und 2 GB Reserve passt das knapp (Budget 24, nutzbar 22). Bei 16 GB Grafikspeicher passen gpt-oss und olmOCR nicht gleichzeitig: Dann lädt die Indexierung olmOCR erst, wenn der Chat ruht und gpt-oss nach Leerlauf entladen wurde, bzw. der Chat verdrängt olmOCR, solange kein Lauf offen ist.
Chat während der Indexierung: Läuft ein großes Vision-Modell (olmOCR, Qwen3-VL), teilen sich Chat und Indexierung die Grafikkarte; Antworten kommen dann spürbar langsamer. Wer das nicht will, startet große Läufe abends (ein Zeitfenster „Indexierung nachts“ gibt es noch nicht).
Anzeige: RAG-Übersicht → „LM Studio: geladene Modelle“ zeigt wie lms ps Modell, Größe,
Kontext, Status (geladen, wird geladen, Ladefehler), angeheftet, zuletzt genutzt, dazu einen
Budgetbalken (belegt, frei, Reserve) und Knöpfe Laden, Entladen, Anheften. Modelle, die nie ins
Budget passen, sind rot markiert. Auf der Konsole:
sudo mgpt-ctl lms ps # geladene Modelle mit Schätzung
sudo mgpt-ctl lms budget # Budget und Lade-Profile
sudo mgpt-ctl lms load allenai/olmocr-2-7b --context 8192
sudo mgpt-ctl lms unload openai/gpt-oss-20bOhne Modellverwaltung (oder mit LM Studio vor 0.4) die Indexierungsmodelle auf dem
LM-Studio-Rechner von Hand laden. Mit lms load ohne --ttl geladene Modelle bleiben
geladen, bis man sie entlädt:
# Vorhandene Modelle und ihre Schlüssel anzeigen
lms ls
# Fehlt ein Modell: herunterladen (fragt bei mehreren Treffern nach)
lms get nomic-embed-text-v1.5
lms get allenai/olmocr-2-7b
lms get qwen/qwen3-vl-8b # nur für „Abbildungen beschreiben“
# Laden, ohne --ttl; <schlüssel> aus der Ausgabe von "lms ls" übernehmen
lms load <schlüssel-nomic-embed>
lms load <schlüssel-olmocr> --context-length 8192
lms load <schlüssel-qwen3-vl> # nur für „Abbildungen beschreiben“
# Prüfen, was geladen ist
lms psTypische Schlüssel sind text-embedding-nomic-embed-text-v1.5, allenai/olmocr-2-7b und
qwen/qwen3-vl-8b. Nach einem Neustart des LM-Studio-Rechners mit lms ps prüfen und bei
Bedarf erneut laden.
Ohne Bildschirm betreiben (headless): Entweder den Dienst llmster installieren und mit
lms daemon up starten, oder in der Desktop-App in den Einstellungen den LLM-Server beim Anmelden
starten lassen und den Server mit lms server start starten
(LM Studio: Headless,
lms-Befehle).
Ist LM Studio aus, wartet die Indexierung (siehe Fehlersuche), und Antworten im Chat entstehen mit einem Hinweis ohne Dokumentquellen.
Admin → „Dokumente (RAG)“ → „Einstellungen“.
| Feld | Grundeinstellung | Bedeutung |
|---|---|---|
| Embedding-Modell | leer | genau ein Modell mit der Fähigkeit „Embedding“ |
| Präfix für Abschnitte / Präfix für Suchanfragen | leer | wird jedem Text beim Einbetten vorangestellt; bei nomic-embed laut Modellkarte search_document: bzw. search_query: (wird bei Wahl eines nomic-Modells vorbelegt) |
| OCR-Verfahren | Tesseract (auf dem Server) | oder „olmOCR (Vision-Modell, z. B. über LM Studio)“ |
| OCR-Modell | leer | Vision-Modell für olmOCR, Pflicht bei olmOCR |
| Kontextfenster (bei Embedding-, OCR- und Abbildungsmodell) | Vorschlag | Lade-Profil des Modells für die Modellverwaltung, daneben der erwartete Speicher |
| Tesseract als Ersatz | an | ist das OCR-Modell nicht erreichbar, liest Tesseract die Seite |
| Abbildungen beschreiben | aus | Bilder in PDF/DOCX und Bilddateien von einem Vision-Modell beschreiben lassen |
| Modell für Abbildungen | leer | allgemeines Vision-Modell (z. B. qwen/qwen3-vl-8b), Pflicht, wenn eingeschaltet; nur OpenAI-kompatible Anbieter wie LM Studio |
| Abbildungen je Dokument / je Seite (höchstens) | 50 / 10 | weitere Abbildungen werden übersprungen |
| Mindestgröße (Pixel) | 150 | kürzere Kante; kleinere Bilder (Symbole, Logos) werden übersprungen |
| Bildgröße für das Modell (Pixel) | 1024 | längste Kante; größere Bilder werden vor dem Senden verkleinert |
| Abschnittsgröße (Tokens) | 800 | 100 bis 4000 |
| Überlappung (Tokens) | 100 | kleiner als die Abschnittsgröße |
| Dokumente gleichzeitig | 2 | 1 bis 4, siehe „Der Worker“ |
| Treffer je Frage | 6 | so viele Abschnitte gehen als Quellen an das Modell (1 bis 20) |
| Volltextsuche dazunehmen | an | Vektor- und deutsche Volltextsuche zusammenführen (Reciprocal Rank Fusion) |
Die Auswahl „Embedding-Modell“ ist je aktivem Anbieter gruppiert. Sie
zeigt die schon angelegten Modelle und dazu die Modelle, die der Anbieter meldet, aber noch nicht
in MultiGPT angelegt sind, als „LM Studio · <id> (neu)“. Ein solches Modell wird beim
Speichern angelegt. Die OCR-Felder stehen im Abschnitt „Texterkennung (OCR)“. Ein nur für OCR
angelegtes Modell ist für den Chat inaktiv, wird für die Texterkennung aber trotzdem genutzt.
Die Felder für Abbildungen stehen im Abschnitt „Abbildungen“. Die Auswahl „Modell für Abbildungen“ zeigt allgemeine Vision-Modelle unter „Empfohlen“; angeboten werden nur OpenAI-kompatible Anbieter (LM Studio, OpenAI), bei Cloud-Anbietern nur Modelle mit Bild-Eingabe. Ein dafür neu angelegtes Modell ist für den Chat inaktiv. Kosten und Datenschutz: Je Abbildung entsteht ein Modellaufruf – lokal einige Sekunden je Bild, bei Cloud-Anbietern Gebühren. Mit einem lokalen Modell bleiben die Bilder im Haus, mit einem Cloud-Modell gehen sie an den Anbieter. Die RAG-Übersicht zeigt, ob die Beschreibung an ist, welches Modell sie nutzt und ob es geladen ist; beim Dokument im Admin steht die Zahl der beschriebenen Abbildungen.
Prüfen: Unten im Formular stehen die Knöpfe „Speichern und Embedding testen“ und „Speichern und OCR testen“. Sie speichern die angezeigten Werte und testen dann genau diese. Der Embedding-Test bettet mit dem gewählten Modell einen kurzen Text ein und meldet die Dimension oder die Ursache eines Fehlers (ohne Key). Der OCR-Test liest eine erzeugte Testseite mit bekanntem Text mit dem gewählten Verfahren und zeigt den erkannten Text oder die Ursache. In der RAG-Übersicht gibt es dieselben Tests als „Embedding testen“ und „OCR testen“ für die gespeicherten Einstellungen.
Vektoren verschiedener Modelle passen nicht zueinander. Nach einem Wechsel des Embedding-Modells, der Präfixe oder der Zerteilung deshalb alle Dokumente neu indexieren. Dasselbe gilt, wenn das Beschreiben der Abbildungen ein- oder ausgeschaltet oder sein Modell gewechselt wird – sonst gilt die Änderung nur für neu hochgeladene Dokumente. MultiGPT erinnert nach dem Speichern mit einem Hinweis daran.
-
Im Admin: „Dokumente (RAG)“ → „RAG-Übersicht“ → „Alles neu indexieren“ und bestätigen.
-
Auf der Kommandozeile (Debian-Paket):
sudo mgpt-ctl reindex
Nur bestimmte Sammlungen oder Dokumente (
<id>aus dem Admin, mehrfach möglich) oder nur Dokumente mit Fehler:sudo mgpt-ctl reindex --collection <id> sudo mgpt-ctl reindex --document <id> sudo mgpt-ctl reindex --errors-only
-
In der Entwicklung:
make reindex.
Bis ein Dokument fertig ist, bleiben seine alten Abschnitte durchsuchbar. Die Arbeit macht der Worker.
Beim Update von einer älteren Version auf 768 Dimensionen verwirft die Migration alle vorhandenen Abschnitte und reiht alle Dokumente neu ein. Danach muss das Embedding-Modell eingerichtet und der Worker gelaufen sein, bevor die Suche wieder Treffer liefert.
Der Worker holt Aufträge aus einer Tabelle in PostgreSQL (SELECT … FOR UPDATE SKIP LOCKED, so
können mehrere Worker parallel laufen), indexiert die Dokumente und wiederholt vorübergehende
Fehler.
Läufe pausieren: Admin → „Dokumente (RAG)“ → „Läufe“ → Lauf öffnen → „Pausieren“ (oder Aktion
in der Liste, mgpt-ctl index pause <ID>, MCP pause_run). Der Lauf holt dann keine neuen
Dokumente mehr; gerade laufende werden fertig. „Fortsetzen“ macht an derselben Stelle weiter.
Von Hand Hochgeladenes kommt ohnehin vor großen Läufen (Verzeichnisquellen, „Alles neu
indexieren“) dran – und zwar sofort: Die zusätzlichen Spuren über „Dokumente gleichzeitig“ hinaus
übernehmen ausschließlich solche eiligen Aufträge, auch wenn lange Dokumente großer Läufe alle
regulären Plätze belegen.
Dokumente gleichzeitig (RAG-Einstellungen, Abschnitt „Indexierung“, Standard 2, höchstens 4): So viele Dokumente bearbeitet der Worker parallel, ohne Neustart änderbar. Das lohnt nur, wenn LM Studio die Anfragen auch parallel abarbeitet: beim OCR-Modell „Parallele Anfragen“ (Lade-Profil, nur mit „Modelle verwalten“) mindestens so hoch setzen, sonst stehen die Anfragen in LM Studio an. Embedding-Modelle kennen diese Einstellung nicht; nomic verarbeitet die Pakete ohnehin schnell.
Debian-Paket: Das Paket bringt die Unit multi-gpt-worker.service mit. Sie wird bei der
Installation aktiviert und gestartet und bei Updates nach der Migration neu gestartet. Sie läuft
als Nutzer multi-gpt mit /etc/multi-gpt/.env und niedriger Priorität (Nice=10, IO
idle), damit die Weboberfläche Vorrang hat.
sudo systemctl status multi-gpt-worker
sudo journalctl -u multi-gpt-worker -f
sudo systemctl restart multi-gpt-workerBeim Beenden unterbricht der Worker den laufenden Auftrag an der nächsten Prüfstelle (zwischen PDF-Seiten oder Embedding-Paketen) und reiht ihn ohne Zählung des Versuchs neu ein.
Entwicklung: Den Worker im Vordergrund starten, Strg+C beendet ihn:
make workerDocker: compose.yaml enthält einen eigenen Dienst worker.
Wiederholungen:
- Vorübergehende Fehler werden mit wachsendem Abstand wiederholt (30 s, 2 min, 8 min, 32 min,
höchstens 1 h), bis
JOB_MAX_ATTEMPTS(5) erreicht ist; danach steht das Dokument auf „Fehler“. - Dauerhafte Fehler (Datei unlesbar, kein Text, falscher Typ) setzen das Dokument sofort auf „Fehler“.
- Ein Auftrag, dessen Worker kein Lebenszeichen mehr gibt (Absturz,
kill -9), wird nach 10 Minuten automatisch neu eingereiht. - Ist der Anbieter (LM Studio) nicht erreichbar, bleibt das Dokument auf „wartet“ mit dem Text „Wartet: … Neuer Versuch ab hh:mm Uhr.“ Der Worker versucht es alle 5 Minuten erneut, ohne Obergrenze und ohne den Versuch zu zählen.
Die RAG-Übersicht zeigt diese Warnung, wenn Aufträge seit über 2 Minuten fällig sind, aber kein Worker arbeitet, oder wenn ein Auftrag seit über 10 Minuten kein Lebenszeichen gibt.
sudo systemctl status multi-gpt-worker
sudo journalctl -u multi-gpt-worker -n 100
sudo systemctl enable --now multi-gpt-workerHängende Aufträge lassen sich in der RAG-Übersicht mit „Hängende Aufträge zurücksetzen“ sofort neu einreihen.
- Läuft der Worker? Siehe oben.
- Steht beim Dokument „Versuch n fehlgeschlagen: …“, wird automatisch wiederholt. Die Ursache steht im Text und unter „Indexierungsaufträge“ in der Spalte „letzter Fehler“.
-
LM Studio offline: Text „Wartet: Der Anbieter … ist nicht erreichbar.“
LM-Studio-Rechner einschalten, mit
lms psprüfen, ob die Modelle geladen sind; der nächste Versuch folgt nach höchstens 5 Minuten. Ist für OCR „Tesseract als Ersatz“ an, liest Tesseract die Seiten des Dokuments statt olmOCR.
Den Fehlertext beim Dokument lesen (Admin → „Dokumente“ oder Seite der Sammlung). Ist die Ursache behoben, im Admin bei den Dokumenten die Aktion „Erneut versuchen (nur mit Fehler)“ wählen, in der RAG-Übersicht „Fehlgeschlagene erneut versuchen“ oder:
sudo mgpt-ctl reindex --errors-only| Meldung | Ursache und Abhilfe |
|---|---|
| „Es ist kein Embedding-Modell eingerichtet. …“ | In den Einstellungen ein Embedding-Modell wählen, dann erneut versuchen. |
| „Das Embedding-Modell oder sein Anbieter ist deaktiviert.“ | Modell und Anbieter im Admin aktivieren. |
| „Das Embedding-Modell liefert 1536 statt 768 Dimensionen – das passt nicht zur Datenbank. …“ | Das Modell passt nicht zur festen Dimension der Datenbank. Ein Modell mit 768 Dimensionen wählen (z. B. text-embedding-nomic-embed-text-v1.5 über LM Studio), dann „Alles neu indexieren“. |
| „Dieser Anbietertyp unterstützt keine Embeddings.“ | Anderen Anbieter wählen. |
| „Im Dokument wurde kein Text gefunden.“ | Leere Datei oder ein Scan, den auch die OCR nicht lesen konnte. OCR prüfen (siehe unten). |
| „Die Datei des Dokuments fehlt auf dem Server.“ | Datei unter MEDIA_ROOT gelöscht oder nicht lesbar. Dokument löschen und neu hochladen. |
| „Das Dokument ist zu umfangreich für die Verarbeitung.“ | Datei aufteilen. |
| „Das PDF enthält keine Textebene (gescannt), und die Texterkennung (OCR) ist nicht installiert …“ | Pakete aus Schritt 1 installieren, Worker neu starten, dann erneut versuchen. |
- Fehlen
tesseractoderpdftoppm, steht im Log des Workers „OCR nicht verfügbar“. Hat das PDF gar keine Textebene, endet die Indexierung mit „Das PDF enthält keine Textebene (gescannt), und die Texterkennung (OCR) ist nicht installiert …“; gemischte PDFs werden ohne die gescannten Seiten indexiert. Pakete aus Schritt 1 installieren, Worker neu starten und die Dokumente neu indexieren. - Falsche Sprache:
tesseract --list-langsprüfen undOCR_LANGUAGESanpassen. - Bei olmOCR: „Speichern und OCR testen“ in den Einstellungen nutzen, mit
lms psprüfen, oballenai/olmocr-2-7bgeladen ist.
- Abbildungen werden nur beschrieben, wenn „Abbildungen beschreiben“ an ist, und erst für Dokumente, die danach (neu) indexiert werden. Übersprungen werden kleine Bilder, schmale Linien, Wiederholungen (z. B. ein Logo auf jeder Seite), Bilder über den Obergrenzen und gescannte Seiten (deren Text liest die OCR). Bilder, die pypdf nicht dekodieren kann (z. B. JBIG2), entfallen ebenfalls.
- Ist das Modell für Abbildungen nicht erreichbar, wartet die Indexierung wie bei der OCR
(„Wartet: … Neuer Versuch ab …“). Mit
lms psbzw.mgpt-ctl lms psprüfen, ob es geladen ist. Mit Modellverwaltung kann der Grund auch „Zu wenig Grafikspeicher für …“ sein: Budget, Kontextfenster bzw. angeheftete Modelle prüfen (RAG-Übersicht → „LM Studio: geladene Modelle“). - Lehnt das Modell ein einzelnes Bild ab (z. B. weil es keine Bilder versteht), entfällt nur diese Abbildung; im Log des Workers steht „Abbildung … abgelehnt“ mit Dokument-ID und Nummer.
- Hinweis „Dokumentsuche fehlgeschlagen: … Die Antwort entsteht ohne Dokumentquellen.“: Ursache steht im Text, häufig ist das Embedding-Modell nicht erreichbar (LM Studio aus) oder nicht eingerichtet. „Embedding testen“ hilft.
- „In den gewählten Sammlungen wurde nichts Passendes gefunden.“: Sind die Dokumente „indexiert“? Nach einem Modellwechsel wurde vielleicht nicht neu indexiert.
- LM Studio: lms-Befehle,
lms load,lms ps,lms get, TTL und Auto-Evict, REST-API v1 ab 0.4: Übersicht, Modelle auflisten, laden, entladen, Änderungen - Speicherschätzung: NVIDIA: KV-Cache je Token,
Architekturdaten aus
config.jsonvon gpt-oss-20b, olmOCR-2-7B-1025, nomic-embed-text-v1.5 Headless - olmOCR: Modellseite in LM Studio, Projekt olmOCR
- Abbildungen: Qwen3-VL-8B in LM Studio, Gemma 3 12B in LM Studio, Qwen3-VL
- nomic-embed-text: Modellkarte (Präfixe)
- Tesseract: Doku, Sprachdaten
MultiGPT-Wiki
- Startseite
- Konfiguration (.env)
- nginx und TLS
- Chat-Bedienung (Zitieren, Kontextmenü, Scrollen, Tasten)
- Chat-Einstellungen (Grundregeln, Kreativität, Denktiefe)
- Projekte
- Chats teilen
- Anbieter und Modelle
- MCP-Server
- API-Keys (MultiGPT als MCP-Server)
- n8n
- Bilder erzeugen
- Berechnungen
- Runner (Arbeitsumgebung)
- Blätter und Dokumente (PDF)
- Kosten und Budgets
- mgpt-ctl (Verwaltungsbefehle)
Dokumente (RAG)
Websuche
Projekt