This is an old revision of the document!
Deployment: Lokale KI-Umgebung (Zahn-Abrechnungs-Assistent) – Teil 1
Ziel: Von null auf lauffähiges System (LM Studio + Open WebUI + ComfyUI) auf Nobara (Fedora-basiert), x86-64.
Alle Komponenten lokal – kein Cloud-Zugriff.
—
## 0. Voraussetzungen
| Voraussetzung | Details |
| — | — |
| GPU | NVIDIA, 16–19 GB VRAM (Qwen3 27B) |
| Treiber | aktueller NVIDIA-Treiber + CUDA-Check: `nvidia-smi` |
| Podman | `podman –version` (Open WebUI läuft als Container) |
| User | `rootai`, Arbeitsverzeichnis `/home/rootai` |
| Ports | 1234 (LM Studio), 3000 (Open WebUI), 8188 (ComfyUI) |
—
## 1. LM Studio (AppImage) installieren
1. AppImage herunterladen und nach `/home/rootai/Downloads` legen.
2. Ausführbar machen:
```bash chmod +x ~/Downloads/lm-studio-*.AppImage ```
3. Nobara/Fedora-Kompatibilität (FUSE): Falls die AppImage nicht startet:
```bash ./lm-studio-*.AppImage --appimage-extract ./lm-studio-*/AppRun ```
4. Modell laden: In LM Studio → Models → *Qwen3 27B (GGUF)* herunterladen (~16 GB).
- Wichtig: Modelle & Einstellungen landen in `~/.lmstudio` – die AppImage selbst ist austauschbar, die Daten bleiben.
5. CLI `lms` global verlinken (Symlink auf die AppImage):
```bash sudo ln -sf /home/rootai/Downloads/lm-studio-*.AppImage /usr/local/bin/lms ``` ⚠️ Nach jedem AppImage-Update mit neuem Dateinamen: Symlink neu setzen (siehe Fehlersuche).
Test: ```bash lms ls # Modell muss gelistet sein ```
—
## 2. LM Studio Server starten + Test
```bash # Server starten (LM Studio → Developer → Start Server, Port 1234) lms load qwen/qwen3.8-27b
# API-Test curl -s http://127.0.0.1:1234/v1/models ``` ✅ Erwartet: JSON-Liste mit `qwen3.8-27b`.
—
## 3. Open WebUI (Podman-Container)
```bash # Image holen podman pull ghcr.io/open-webui/open-webui
# Container starten (Name: open-webui, Port 3000, eigene Daten-Volume) podman run -d \
- -name open-webui \
- p 3000:8080 \
- v open-webui-data:/app/backend/data \
- -restart unless-stopped \
ghcr.io/open-webui/open-webui ```
Einrichtung im Browser (`http://<server>:3000`):
1. LLM-Anbindung: Settings → Connections → *OpenAI API*
- Base URL: `http://host.docker.internal:1234/v1` (aus der Container-Sicht)
- API-Key: beliebig (LM Studio fordert keinen)
- Test: Modell `qwen3.8-27b` muss erscheinen
2. Embedding-Modell: Settings → Models → `nomic-embed-text-v1.5` (eingebaut) als Embedding setzen 3. Benutzer anlegen: `artz` mit Lesezugriff auf die Wissensbasis 4. Wichtig: Eingebautes Tool „Ask User“ deaktivieren – sonst stellt das Modell Rückfragen statt zu antworten
Test: ```bash podman ps | grep open-webui # Container muss laufen curl -s http://127.0.0.1:3000 # WebUI-Antwort ```
—
## 4. ComfyUI (Z-Image)
```bash # Start (läuft im Hintergrund, Log nach ~/comfyui.log) nohup ~/comfyui-env/bin/python ~/comfyui/main.py –listen –port 8188 » ~/comfyui.log 2>&1 &
# Test curl -s http://127.0.0.1:8188/system_stats ```
Anbindung in Open WebUI: Settings → Connections → ComfyUI - URL: `http://localhost:8188` - Modell: Z-Image - Log bei Problemen: `tail -f ~/comfyui.log`
—
## 5. Autostart beim Systemstart
Skript: `/home/rootai/start-ai.sh` (bereits vorhanden)
```bash #!/bin/bash # warte für Systemdienste und LM Studio Server sleep 15 # lade Qwen-Modell automatisch in LM Studio lms load qwen/qwen3.8-27b # kurze Stabilisierungszeit sleep 10 # starte Open WebUI neu podman restart open-webui ```
Startreihenfolge ist entscheidend: LM Studio → Modell laden → Open WebUI. (ComfyUI-Start bei Bedarf ergänzen: `nohup`-Zeile aus Schritt 4 anhängen.)
—
## 6. Abschluss-Smoke-Test
```bash # 1. LM Studio API curl -s http://127.0.0.1:1234/v1/models
# 2. Open WebUI erreichbar curl -sI http://127.0.0.1:3000 | head -1
# 3. ComfyUI erreichbar curl -s http://127.0.0.1:8188/system_stats | head -c 100 ```
1. Browser → `http://<server>:3000` → Login `artz` 2. Freie Frage an `qwen3.8-27b` stellen → Antwort muss ohne RAG-Zitate kommen (RAG kommt in Teil 2)
—
## 7. Fehlersuche (Deployment)
| Symptom | Ursache | Lösung |
| — | — | — |
| AppImage startet nicht | FUSE fehlt (Fedora/Nobara) | `–appimage-extract`, dann `AppRun` starten |
| `lms: command not found` | Symlink defekt/alter Dateiname | `sudo ln -sf /pfad/neue/AppImage /usr/local/bin/lms` |
| WebUI findet kein Modell | Falsche Base URL | `host.docker.internal:1234/v1` statt `localhost` |
| Container startet nicht neu | Name falsch | `podman ps -a` → richtigen Container-Namen prüfen |
| Port belegt | Alter Prozess | `sudo lsof -i :1234` / `:3000` / `:8188` |
# Deployment: Lokale KI-Umgebung (Zahn-Abrechnungs-Assistent) – Teil 2: RAG-Wissensbasis
Ziel: Die 5 Abrechnungsdokumente als Wissensbasis „Zahnarztabrechnung” in Open WebUI einbinden und ein spezialisiertes Modell „Zahn-Abrechnungs-Assistent“ anlegen.
—
## 1. Embedding-Modell setzen (Voraussetzung)
Ohne Embedding-Modell funktioniert RAG nicht.
1. Open WebUI → Settings → Models 2. Embedding-Modell: `nomic-embed-text-v1.5` (eingebaut – kein Ollama/LM-Studio nötig) 3. Test: Modell-Liste zeigt Embedding an
Fallback, falls die deutsche Suche schlecht wird: `bge-m3` per Ollama installieren und als Embedding setzen.
—
## 2. PDFs vorbereiten
| # | Dokument | Quelle | Besonderheit |
| — | — | — | — |
| 1 | SGB V (Gesamtext) | gesetze-im-internet.de | 577 Seiten – enthält viel Fremdmaterial (Pharmazie, Klinik). Ggf. auf Teil 3 (§§ 55–66) beschneiden, wenn Zitate „Rauschen” zeigen |
| 2 | KZBV FZ-Kompendium 2025 | KZBV | Festzuschüsse |
| 3 | GOÄ/GOZ | pkv.de | Privatärztliche Gebührenordnungen |
| 4 | BEL-Preisliste 2025 | kvzbw.de | |
| 5 | BEB-Preisliste 2024 | itzgmbh.de | ⚠️ Bildbasiert (Scanner) – OCR erforderlich, siehe unten |
Vorheriger Check jedes PDFs: - Kann man Text per Auswahl/Kopieren extrahieren? → OK - Nur Bilder? → OCR-Problem (BEB)
—
## 3. OCR für bildbasierte PDFs aktivieren (BEB!)
Symptom ohne OCR: BEB-Zitate fehlen oder liefern Unsinn, andere PDFs funktionieren.
Lösung: 1. Open WebUI → Admin → Settings → Documents 2. „PDF Extract Images (OCR)“ aktivieren (ON) 3. BEB-Preisliste neu hochladen / neu indizieren (altes Dokument löschen, sonst bleibt der alte, leere Index)
—
## 4. Wissensbasis anlegen
1. Open WebUI → Knowledge → Create
- Name: `Zahnarztabrechnung`
2. Dokumente hinzufügen: alle 5 PDFs hochladen 3. Warten, bis alle Dokumente den Status „processed” haben (keine Fehler) 4. Zugriff: Nutzer `artz` → Read-Zugriff auf die Wissensbasis
Test der Wissensbasis (ohne Modell-Prompt): - Neue Chat-Session, Wissensbasis „Zahnarztabrechnung“ per 📎 anhängen - Testfrage: *„Welcher Festzuschuss gilt für eine Inlaysversorgung?”* - ✅ Erwartet: Antwort mit Quellen-Zitaten aus dem FZ-Kompendium
—
## 5. Modell „Zahn-Abrechnungs-Assistent“ anlegen
1. Open WebUI → Settings → Models → Create 2. Name: `Zahn-Abrechnungs-Assistent` 3. Base Model: `qwen3.8-27b` (LM Studio) 4. System-Prompt:
``` Du bist ein Experte für die zahnärztliche und zahntechnische Abrechnung (GOÄ/GOZ, FZ-Kompendium, BEL/BEB, SGB V). Beantworte ausschließlich auf Basis der hinterlegten Dokumente. Nenne konkrete Positionsnummern, Preise, die Edition (z. B. BEB 2024, BEL 2025) und die Quelle. Falls ein Thema nicht in den Dokumenten abgedeckt ist, sag das klar. Hinweis: Dies ersetzt keine Rechtsberatung. ```
5. Wichtig: Eingebautes Tool „Ask User” in diesem Modell deaktivieren – sonst stellt das Modell Rückfragen („Welche Zahnnummer?“) statt direkt aus den Dokumenten zu antworten.
—
## 6. End-to-End-Test (RAG)
1. Browser → `http://<server>:3000` → Login `artz` 2. Modell `Zahn-Abrechnungs-Assistent` auswählen 3. Deutsche Testfragen, z. B.:
- *„Welche GOZ-Position ist für eine Füllung mit Komposit an einem Schneidezahn zu berechnen?”* → erwartet: GOZ 2010 mit Quelle
- *„Was kostet ein Vollkeramik-Krone laut BEB?“* → erwartet: BEB-Position + Preis + Edition 2024
- *„Welcher Festzuschuss gilt bei Inlays?”* → erwartet: FZ-Kompendium 2025
4. Prüfpunkte pro Antwort:
- ✅ Quellen-Zitate sichtbar (Dokument + Abschnitt)
- ✅ Konkrete Positionsnummer + Preis
- ✅ Edition genannt (BEB 2024 / BEL 2025 / FZ 2025)
- ✅ Bei fehlender Info: klare Aussage statt Halluzination
—
## 7. Fehlersuche (RAG)
| Symptom | Ursache | Lösung |
| — | — | — |
| Antwort ohne Quellen / frei erfunden | RAG nicht angeschlossen | Modell-Prompt prüfen + Wissensbasis in Chat anhängen |
| BEB liefert keine sinnvollen Zitate | PDF bildbasiert | OCR (Abschnitt 3) aktivieren, Dokument neu indizieren |
| Zitate aus SGB V zeigen Pharma/Klinik-Rauschen | 577-Seiten-Gesamtext zu breit | SGB V auf §§ 55–66 beschneiden, Dokument ersetzen, neu indizieren |
| Langsame Antworten bei großen PDFs | Index-Größe | Normal – Cache warmt sich auf; ggf. Chunk-Größe in Settings prüfen |
| Modell fragt nach statt zu antworten | Tool „Ask User“ aktiv | In den Modell-Einstellungen deaktivieren |
| `artz` sieht keine Wissensbasis | Keine Berechtigung | Knowledge → `artz` → Read-Zugriff setzen |
