User Tools

Site Tools


ai-deployment-deutsch

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ai-deployment-deutsch [2026/09/16 13:26] – misaai-deployment-deutsch [2026/09/16 14:24] (current) – misa
Line 1: Line 1:
-====== Deployment: Lokale KI-Umgebung (Zahn-Abrechnungs-Assistent) – Teil 1 ======+====== Lokaler AI-Stack - Teil 1: Basis-Einrichtung (LM Studio + Open WebUI + ComfyUI) ======
  
 +''Ziel:'' Die drei Kernkomponenten auf dem Nobara-System installieren und verbinden. Alles laeuft lokal, ohne Cloud-Zugang.
  
-**Ziel:** Von null auf lauffähiges System (LM Studio + Open WebUI + ComfyUI) auf Nobara (Fedora-basiert), x86-64.+''Komponenten und ihre Rollen:''
  
-**Alle Komponenten lokal – kein Cloud-Zugriff.**+|| Komponente || Rolle || Port || Ausfuehrungsort || 
 +|| LM Studio || laedt und serviert das LLM, stellt die lms-Kommandozeile zur Verfuegung || 1234 || AppImage auf dem Host || 
 +|| Open WebUI || Chat-Oberflaeche, Benutzerkonten, Wissensdatenbank (RAG) || 3000 || Podman-Container || 
 +|| ComfyUI || Bildgenerierung mit Z-Image || 8188 || Python-Virtualenv auf dem Host || 
 +|| Qwen3 27B (GGUF) || die LLM-Modelldatei, ca. 16 GB || - || gespeichert in ~/.lmstudio ||
  
----+''Wichtiges Prinzip:'' LM Studio und das Modell laufen auf dem Host. Open WebUI spricht nur ueber das Netzwerk (Port 1234) mit LM Studio. Das bedeutet: Beim Aktualisieren oder Ersetzen des LM-Studio-AppImages bricht die WebUI-Verbindung nicht ab - relevant sind nur die Modelldateien in ~/.lmstudio, und die sind kein Teil des AppImages.
  
-## 0. Voraussetzungen+===== 1. Voraussetzungen =====
  
-| Voraussetzung | Details | +|| Voraussetzung || Details || Pruef-Befehl || 
-|---|---| +|| GPU || NVIDIA-Grafikkarte mit 16 bis 19 GB VRAM (fuer Qwen3 27B erforderlich) || nvidia-smi || 
-| GPU | NVIDIA, **16–19 GB VRAM** (Qwen3 27B) | +|| NVIDIA-Treiber || aktueller, funktionierender Treiber || nvidia-smi zeigt Karte, Treiber und CUDA-Version || 
-| Treiber | aktueller NVIDIA-Treiber + CUDA-Check: `nvidia-smi` | +|| RAM || 32 GB empfehlenswert, 16 GB Minimum || free -h || 
-| Podman | `podman --version` (Open WebUI läuft als Container) | +|| Festplattenspeicher || ca. 25 GB frei fuer Modell, Container und Dokumente || df -h /home || 
-| User | `rootai`, Arbeitsverzeichnis `/home/rootai` | +|| Podman || installiert, wird fuer Open WebUI verwendet || podman --version || 
-| Ports | 1234 (LM Studio), 3000 (Open WebUI), 8188 (ComfyUI) |+|| Benutzerkonto || rootai, Home-Verzeichnis /home/rootai || whoami || 
 +|| Ports || 1234, 3000 und 8188 muessen frei sein || sudo lsof -i :1234 -i :3000 -i :8188 ||
  
----+Falls nvidia-smi nicht gefunden wird, muss zuerst der Grafikkarten-Treiber installiert werden.
  
 +===== 2. LM Studio installieren (AppImage) =====
  
-===== 1. LM Studio (AppImage) installieren =====+''Warum AppImage:'' Es ist eine einzige, in sich geschlossene Datei. Ein spaeteres Update bedeutet nur, die Datei zu ersetzen - Modelle, Einstellungen und Skripte sind nicht darin enthalten.
  
 +''Schritt 2.1 - Herunterladen:''
  
-1. **AppImage herunterladen** und nach `/home/rootai/Downloads` legen.+Das aktuellste LM-Studio-AppImage herunterladen und in /home/rootai/Downloads ablegen.
  
-2. **Ausführbar machen:**+''Schritt 2.2 - Ausfuehrbar machen:''
  
-   ```bash +    chmod +x /home/rootai/Downloads/lm-studio-*.AppImage
-   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).+
  
 +''Schritt 2.3 - Starten (FUSE-Workaround fuer Nobara/Fedora):''
  
-**Test:**+Fedora-basierte Systeme aktivieren FUSE fuer normale Benutzer nicht standardmaessig. Daher kann das AppImage mit einem FUSE- oder Mount-Fehler scheitern. Falls das passiert:
  
-```bash +    cd /home/rootai/Downloads 
-lms ls          # Modell muss gelistet sein+    ./lm-studio-*.AppImage --appimage-extract 
 +    ./lm-studio-*/AppRun
  
-```+Dies entpackt das AppImage in einen Ordner und startet es ueber AppRun. Das Verhalten ist exakt wie beim normalen AppImage.
  
----+''Schritt 2.4 - Modell laden:''
  
 +In LM Studio, Bereich "Modelle": nach Qwen3 27B suchen und die GGUF-Variante (ca. 16 GB) herunterladen. Die Modelle werden in ~/.lmstudio abgelegt - dieses Verzeichnis ueberlebt jedes AppImage-Update.
  
-=====  2. LM Studio Server starten + Test =====+''Schritt 2.5 - lms global verlinken:''
  
 +LM Studio stellt das lms-Kommando bereit (wird vom Skript start-ai.sh genutzt). Ein stabiler Symlink verhindert, dass Skripte vom exakten AppImage-Dateinamen abhaengen:
  
-```bash +    sudo ln -sf /home/rootai/Downloads/lm-studio-*.AppImage /usr/local/bin/lms
-# Server starten (LM Studio → Developer → Start Server, Port 1234) +
-lms load qwen/qwen3.8-27b+
  
-# API-Test +''Hinweis:'' Nach einem LM-Studio-Update (neue Versionsnummer im Dateinamen) diesen Symlink neu erstellen, sonst funktioniert lms nicht mehr. Das ist der einzige Teil des Stacks, der nach einem Update angepasst werden muss.
-curl -s http://127.0.0.1:1234/v1/models +
-``` +
-✅ Erwartet: JSON-Liste mit `qwen3.8-27b`.+
  
----+''Schritt 2.6 - Pruefen:''
  
-## 3. Open WebUI (Podman-Container)+    lms ls
  
-```bash +Erwartet: Der Befehl laeuft und listet das Modell.
-# Image holen +
-podman pull ghcr.io/open-webui/open-webui+
  
-# Container starten (Name: open-webui, Port 3000, eigene Daten-Volume) +===== 3. LM-Studio-Server starten und API testen =====
-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`):+''Schritt 3.1 - Server starten:''
  
-1. **LLM-Anbindung:** Settings → Connections → *OpenAI API* +In LM Studio, Bereich "Developer": Port 1234 setzen und "Start Server" klicken. (Das lms-Kommando laedt unten das Modell und startet den Server automatisch.)
-   - 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:** +''Schritt 3.2 - Modell laden:''
-```bash +
-podman ps | grep open-webui      # Container muss laufen +
-curl -s http://127.0.0.1:3000   # WebUI-Antwort +
-```+
  
----+    lms load qwen/qwen3.8-27b
  
-## 4. ComfyUI (Z-Image)+Warten, bis der Ladevorgang abgeschlossen ist (ca. 16 GB in den VRAM, dauert wenige Sekunden).
  
-```bash +''Schritt 3.3 - OpenAI-kompatible API testen:''
-# 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:1234/v1/models
-curl -s http://127.0.0.1:8188/system_stats +
-```+
  
-**Anbindung in Open WebUI:** Settings → Connections → ComfyUI +Erwartet: JSON-Ausgabe, die qwen3.8-27b enthaelt. Wenn das funktioniert, ist die LLM-Seite fertig.
-- URL: `http://localhost:8188` +
-- Modell: **Z-Image** +
-- Log bei Problemen: `tail -f ~/comfyui.log`+
  
----+===== 4. Open WebUI (Podman-Container) =====
  
-## 5. Autostart beim Systemstart+''Schritt 4.1 - Image ziehen:''
  
-Skript: `/home/rootai/start-ai.sh` (bereits vorhanden)+    podman pull ghcr.io/open-webui/open-webui
  
-```bash +''Schritt 4.2 - Container anlegen und starten:''
-#!/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. +    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
-(ComfyUI-Start bei Bedarf ergänzen: `nohup`-Zeile aus Schritt 4 anhängen.)+
  
----+''Erklaerung der Parameter:''
  
-## 6. Abschluss-Smoke-Test+* --name open-webui: fester Name, wird von start-ai.sh verwendet (podman restart open-webui) 
 +* -p 3000:8080: Host-Port 3000 wird auf Container-Port 8080 gemappt 
 +* -v open-webui-data:/app/backend/data: alle Einstellungen, Benutzer und die Wissensdatenbank liegen in diesem Volume und ueberleben Container-Updates 
 +* --restart unless-stopped: automatischer Neustart nach einem Reboot
  
-```bash +''Schritt 4.3 - Pruefen, ob er laeuft:''
-# 1. LM Studio API +
-curl -s http://127.0.0.1:1234/v1/models+
  
-# 2. Open WebUI erreichbar +    podman ps | grep open-webui 
-curl -sI http://127.0.0.1:3000 | head -1+    curl -sI http://127.0.0.1:3000 | head -1
  
-# 3. ComfyUI erreichbar +Erwartet: eine HTTP-Zeile mit 200 oder 302.
-curl -s http://127.0.0.1:8188/system_stats | head -c 100 +
-```+
  
-1. Browser → `http://<server>:3000` → Login `artz` +''Schritt 4.4 - Im Browser einrichten:''
-2. Freie Frage an `qwen3.8-27b` stellen → Antwort muss ohne RAG-Zitate kommen (RAG kommt in Teil 2)+
  
----+http://<server-ip>:3000 oeffnen und als Admin anmelden, dann:
  
-## 7. Fehlersuche (Deployment)+1. Einstellungen, Verbindungen: OpenAI-API hinzufuegen 
 +    * Basis-URL: http://host.docker.internal:1234/v1 
 +    * API-Schluessel: ein beliebiger, nicht leerer Wert (LM Studio ignoriert ihn) 
 +    * Test: qwen3.8-27b muss in der Modellliste erscheinen 
 +    * Warum host.docker.internal: Im Inneren des Containers zeigt localhost auf den Container selbst, nicht auf den Host 
 +2. Einstellungen, Modelle: nomic-embed-text-v1.5 als Embedding-Modell setzen (Voraussetzung fuer RAG, Details in Teil 2)
  
-| Symptom | Ursache | Lösung | +''Hinweis:'' Das Kunden-Benutzerkonto (artz) und die Modell-Einstellungen werden in Teil 2 eingerichtet.
-|---|---|---| +
-| 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` |+
  
 +===== 5. ComfyUI (Z-Image) =====
  
-# Deployment: Lokale KI-Umgebung (Zahn-Abrechnungs-Assistent) – Teil 2: RAG-Wissensbasis+''Schritt 5.1 - Im Hintergrund starten mit Logfile:''
  
-**Ziel:** Die 5 Abrechnungsdokumente als Wissensbasis „Zahnarztabrechnung" in Open WebUI einbinden und ein spezialisiertes Modell „Zahn-Abrechnungs-Assistent" anlegen.+    nohup ~/comfyui-env/bin/python ~/comfyui/main.py --listen --port 8188 >> ~/comfyui.log 2>&1 &
  
----+''Schritt 5.2 - Pruefen:''
  
-## 1. Embedding-Modell setzen (Voraussetzung)+    curl -s http://127.0.0.1:8188/system_stats
  
-Ohne Embedding-Modell funktioniert RAG nicht.+Erwartet: JSON mit System-Statistiken. Bei Problemen:
  
-1. Open WebUI → **Settings → Models** +    tail -f ~/comfyui.log
-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.+''Schritt 5.3 - In Open WebUI verbinden:''
  
----+Einstellungen, Verbindungen: ComfyUI hinzufuegen.
  
-## 2. PDFs vorbereiten+* URL: http://host.docker.internal:8188 (gleicher Grund wie oben - Open WebUI laeuft im Container) 
 +* Modell: Z-Image
  
-| # | Dokument | Quelle | Besonderheit | +===== 6. Autostart nach dem Neustart =====
-|---|---|---|---| +
-| 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:** +''Datei:'' /home/rootai/start-ai.sh (das vorhandene Skript, unveraendert)
-- Kann man Text per Auswahl/Kopieren extrahieren? → OK +
-- Nur Bilder? → OCR-Problem (BEB)+
  
----+    #!/bin/bash 
 +    # warten, bis Systemdienste und der LM-Studio-Server hochgefahren sind 
 +    sleep 15
  
-## 3. OCR für bildbasierte PDFs aktivieren (BEB!)+    # das Qwen-Modell in LM Studio laden (startet auch den Server) 
 +    lms load qwen/qwen3.8-27b
  
-**Symptom ohne OCR:** BEB-Zitate fehlen oder liefern Unsinn, andere PDFs funktionieren.+    # dem Modell ein paar Sekunden zur voelllaendigen Initialisierung geben 
 +    sleep 10
  
-**Lösung:** +    # Open WebUI neu starten, damit es sich wieder mit der LM-Studio-API verbindet 
-1. Open WebUI → **Admin → Settings → Documents** +    podman restart open-webui
-2. **„PDF Extract Images (OCR)" aktivieren (ON)** +
-3. **BEB-Preisliste neu hochladen / neu indizieren** (altes Dokument löschen, sonst bleibt der alte, leere Index)+
  
----+''Ausfuehrbar machen:''
  
-## 4. Wissensbasis anlegen+    chmod +x /home/rootai/start-ai.sh
  
-1. Open WebUI → **Knowledge** → **Create** +''Die Reihenfolge ist wichtig:'' zuerst LM Studio, dann das Modell, dann Open WebUI.
-   - **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):** +''Nach einem LM-Studio-Update:'' Nur Schritt 2.5 (lms-Symlink neu erstellen) ist noetig. Das Skript, der Container und die WebUI-Konfiguration bleiben unberuehrt.
-- 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+
  
----+===== 7. Funktionstest =====
  
-## 5. Modell „Zahn-Abrechnungs-Assistent" anlegen+Alle drei Pruefungen ausfuehren:
  
-1. Open WebUI → **Settings → Models → Create** +    # 1. LM-Studio-API 
-2. **Name:** `Zahn-Abrechnungs-Assistent` +    curl -s http://127.0.0.1:1234/v1/models
-3. **Base Model:** `qwen3.8-27b` (LM Studio) +
-4. **System-Prompt:**+
  
-``` +    # 2. Open WebUI erreichbar 
-Du bist ein Experte für die zahnärztliche und zahntechnische Abrechnung +    curl -sI http://127.0.0.1:3000 | head -1
-(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.+    # 3. ComfyUI erreichbar 
 +    curl -s http://127.0.0.1:8188/system_stats | head -c 100
  
----+Danach im Browser:
  
-## 6. End-to-End-Test (RAG)+1. http://<server-ip>:3000 oeffnen und anmelden (als Admin) 
 +2. Ein Chat mit qwen3.8-27b starten und eine einfache Frage stellen, ohne Wissensdatenbank 
 +3. Erwartet: eine normale Antwort ohne Quellenangaben (Quellenangaben kommen mit RAG, siehe Teil 2)
  
-1. Browser → `http://<server>:3000` → Login `artz` +===== 8. Fehlerbehebung =====
-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+
  
----+|| Symptom || Wahrscheinliche Ursache || Loesung || 
 +|| AppImage startet nicht || FUSE fuer den Benutzer nicht aktiviert (Fedora-Standard) || --appimage-extract und AppRun verwenden (Schritt 2.3) || 
 +|| lms: command not found || Symlink zeigt auf einen alten AppImage-Namen || Schritt 2.5 mit dem neuen Pfad wiederholen || 
 +|| WebUI findet das Modell nicht || falsche Basis-URL aus dem Container heraus || http://host.docker.internal:1234/v1 verwenden, nicht localhost || 
 +|| podman restart schlaegt fehl || falscher Container-Name || echten Namen mit podman ps -a pruefen || 
 +|| Port bereits belegt || ein alter Prozess haelt den Port || sudo lsof -i :1234 (ebenso fuer 3000 und 8188), den Prozess beenden || 
 +|| Erste Antwort nach dem Neustart langsam || Modell wird noch geladen || auf den voelllaendigen Ladevorgang warten, Statusanzeige in LM Studio beobachten ||
  
-## 7. Fehlersuche (RAG) 
  
-| Symptom | Ursache | Lösung | +====== Lokaler AI-Stack - Teil 2: RAG-Wissensdatenbank (Zahnarztabrechnung) ======
-|---|---|---| +
-| 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 |+
  
 +''Ziel:'' Die fuenf Abrechnungsdokumente in die Wissensdatenbank "Zahnarztabrechnung" laden, das Modell "Zahn-Abrechnungs-Assistent" einrichten und pruefen, dass die Antworten aus den Dokumenten stammen und mit korrekten Quellenangaben versehen sind.
 +
 +''Voraussetzung:'' Teil 1 ist abgeschlossen - LM Studio serviert qwen3.8-27b auf Port 1234 und Open WebUI ist auf Port 3000 erreichbar.
 +
 +===== 1. Embedding-Modell setzen (muss zuerst geschehen) =====
 +
 +RAG arbeitet in zwei Schritten:
 +
 +1. Der Dokumenttext wird in Abschnitte (Chunks) zerlegt und von einem Embedding-Modell in Vektoren umgewandelt.
 +2. Zur Chatzeit wird die Frage auf dieselbe Weise in einen Vektor umgewandelt. Die aehnlichsten Abschnitte werden abgerufen und als Quellenangabe angezeigt.
 +
 +Ohne Embedding-Modell kann Schritt 1 nicht stattfinden und die Wissensdatenbank bleibt leer.
 +
 +1. Open WebUI, Einstellungen, Modelle
 +2. Als Embedding-Modell: nomic-embed-text-v1.5 setzen (eingebaut - kein Ollama und kein zusaetzliches LM-Studio-Modell noetig)
 +3. Pruefen: In der Modellliste wird das Embedding-Modell als aktiv angezeigt
 +
 +''Ausweichloesung:'' Falls die deutsche Abrufqualitaet mangelhaft ist: bge-m3 ueber Ollama installieren und das Embedding-Modell darauf umstellen.
 +
 +===== 2. PDFs vorbereiten =====
 +
 +|| Nr. || Dokument || Quelle || Hinweis ||
 +|| 1 || SGB V (Volltext) || gesetze-im-internet.de || 577 Seiten, enthaelt fremde Bereiche (Apotheke, Krankenhaus) - siehe Schritt 2.1 ||
 +|| 2 || KZBV FZ-Kompendium 2025 || KZBV || gesetzliche Festzuschuesse ||
 +|| 3 || GOÄ / GOZ || pkv.de || private Gebuehrenordnungen ||
 +|| 4 || BEL-Preisliste 2025 || kvzbw.de || Abrechnungspositionen fuer Zahntechnikerlabore ||
 +|| 5 || BEB-Preisliste 2024 || itzgmbh.de || eingescannt (bildbasiert) - OCR erforderlich, siehe Schritt 3 ||
 +
 +''Vorkontrolle fuer jedes PDF (ca. 30 Sekunden):''
 +
 +1. Im Browser oder PDF-Betrachter oeffnen
 +2. Text markieren und kopieren
 +3. Wird Text kopiert: in Ordnung
 +4. Zeigt die Seite nur ein Bild: OCR-Problem (betrifft die BEB-Datei)
 +
 +''Schritt 2.1 - SGB V kuezen (optional, empfohlen):''
 +
 +Das komplette SGB V umfasst 577 Seiten und zieht Inhalte aus dem Apotheken- und Krankenhausbereich mit hinein, die bei zahnmedizinischen Fragen als Quellenangabe auftauchen koennen. Falls solches Rauschen in den Quellen sichtbar wird:
 +
 +1. Das Dokument aus der Wissensdatenbank entfernen
 +2. Eine gekuerzte Version hochladen, die nur Teil 3, Paragraphen 55 bis 66 (die zahnmedizinisch relevanten Kapitel) enthaelt
 +3. Auf den Abschluss der Verarbeitung warten
 +
 +===== 3. OCR fuer die BEB-Datei einschalten =====
 +
 +''Symptom ohne OCR:'' Die BEB-Zitate fehlen oder sind unsinnig, waehrend alle anderen Dokumente funktionieren. Ursache: Die BEB-Seiten sind gescannte Bilder, die Textextraktion liefert nichts.
 +
 +''Loesung:''
 +
 +1. Open WebUI, Admin, Einstellungen, Dokumente
 +2. Option "PDF Extract Images (OCR)" aktivieren
 +3. Den alten BEB-Eintrag in der Wissensdatenbank loeschen (wichtig - sonst bleibt der leere, veraltete Index erhalten)
 +4. Das BEB-PDF erneut hochladen
 +5. Auf den Status "verarbeitet" warten
 +
 +OCR dauert deutlich laenger als die normale Textextraktion - bei groesseren PDFs einige Minuten. Das ist normal.
 +
 +===== 4. Benutzerkonto fuer den Kunden anlegen =====
 +
 +1. Open WebUI, Einstellungen, Benutzer
 +2. Neuen Benutzer anlegen
 +3. Benutzername: artz
 +4. Passwort: gemeinsam mit dem Kunden festlegen und sicher uebergeben
 +5. Rolle: Benutzer (keine Admin-Rechte)
 +
 +Der Benutzer artz erhaelt im Schritt 5 die Leseberechtigung fuer die Wissensdatenbank.
 +
 +===== 5. Wissensdatenbank erstellen =====
 +
 +1. Open WebUI, Wissensdatenbanken, neue Wissensdatenbank anlegen
 +2. Name: Zahnarztabrechnung
 +3. Dokumente hinzufuegen: alle fuenf PDFs hochladen (BEB nach Schritt 3)
 +4. Warten, bis jedes Dokument den Status "verarbeitet" hat und keine Fehler angezeigt werden
 +5. Berechtigungen: Benutzer artz, Zugriff Lesen
 +
 +''Schnelltest (vor dem Modell):''
 +
 +1. Neue Chat-Sitzung, Wissensdatenbank Zahnarztabrechnung anhaengen
 +2. Frage: Welcher gesetzliche Festzuschuss gilt fuer eine Krone?
 +3. Erwartet: Antwort mit sichtbaren Quellenangaben aus dem FZ-Kompendium 2025
 +
 +===== 6. Modell Zahn-Abrechnungs-Assistent erstellen =====
 +
 +''Anlegen:''
 +
 +1. Open WebUI, Einstellungen, Modelle, neu anlegen
 +2. Name: Zahn-Abrechnungs-Assistent
 +3. Basismodell: qwen3.8-27b (aus LM Studio)
 +4. Wissensdatenbank Zahnarztabrechnung anhaengen
 +
 +''Systemprompt (Deutsch, direkter Stil):''
 +
 +    Du bist ein Experte fuer die deutsche Zahnarzt- und Zahntechnikerabrechnung
 +    (GOÄ/GOZ, KZBV FZ-Kompendium, BEL und BEB, SGB V).
 +
 +    Antworte direkt auf Basis der bereitgestellten Dokumente.
 +    Nenne immer:
 +    - die konkrete Positionsnummer
 +    - den Preis
 +    - die Edition der Preisliste (z. B. BEB 2024, BEL 2025)
 +    - das Quelldokument
 +
 +    Stelle keine Rueckfragen. Wenn Informationen fehlen, sage das klar,
 +    statt zu raten.
 +    Diese Abfragen erteilen keine Rechtsberatung.
 +
 +''Zusaetzliche Einstellungen:''
 +
 +1. Das eingebaute Ask-User-Tool deaktivieren (Einstellungen, Tools). Sonst stellt das Modell Rueckfragen (z. B. "Welche Zahnnummer?"), statt direkt aus den Dokumenten zu antworten.
 +2. In der Chat-Oberflaeche als Antwortmodell auswaehlen
 +
 +===== 7. Gesamtfunktionstest =====
 +
 +1. Browser: http://<server-ip>:3000, als artz anmelden
 +2. Modell Zahn-Abrechnungs-Assistent auswaehlen
 +3. Die folgenden Fragen nacheinander stellen:
 +
 +|| Testfrage || Erwartete Antwortbestandteile ||
 +|| Welche GOZ-Position gilt fuer eine Kompositfuellung an einem Schneidezahn? || GOZ 2010, Preis, Quelle ||
 +|| Was kostet eine Vollkeramikkrone nach BEB? || BEB-Positionsnummer, Preis, Edition 2024 ||
 +|| Wie hoch ist der gesetzliche Festzuschuss fuer einen Inlay? || FZ-Kompendium 2025, Betrag, Quelle ||
 +|| Welche BEL-Position deckt eine Teilprothese ab? || BEL-Position, Preis, Edition 2025 ||
 +
 +''Checkliste fuer jede Antwort:''
 +
 +* Quellenangabe sichtbar (Dokumentenname und Abschnitt)
 +* Konkrete Positionsnummer und Preis
 +* Edition genannt (BEB 2024 / BEL 2025 / FZ 2025)
 +* Bei fehlenden Informationen: klare Aussage statt erfundener Antwort
 +
 +===== 8. Fehlerbehebung =====
 +
 +|| Symptom || Ursache || Loesung ||
 +|| Antwort ohne Quellen, Inhalt wirkt erfunden || RAG ist nicht an das Modell angehaengt || Wissensdatenbank am Modell und an der Chat-Sitzung anhaengen ||
 +|| BEB liefert keine sinnvollen Zitate || PDF ist bildbasiert, keine Textschicht || OCR einschalten (Schritt 3), Dokument loeschen und neu hochladen ||
 +|| SGB V-Zitate zeigen Apotheken- oder Krankenhausinhalt || 577-Seiten-Volltext ist zu breit || auf Paragraphen 55 bis 66 kuezen (Schritt 2.1), Dokument ersetzen, neu indexieren ||
 +|| Modell stellt Rueckfragen statt zu antworten || eingebautes Ask-User-Tool ist aktiv || im Schritt 6, Punkt 1 deaktivieren ||
 +|| artz sieht die Wissensdatenbank nicht || Berechtigung fehlt || Wissensdatenbank auswaehlen, Lesezugriff fuer artz setzen ||
 +|| Erste Antwort bei groesseren Dokumenten langsam || Indexierung und Vektorisierung laufen noch || auf Status "verarbeitet" warten, dann erneut fragen ||
 +|| Nach neuem Indexieren erscheinen alte Zitate || veralteter Indexeintrag || Dokument komplett aus der Wissensdatenbank entfernen, dann neu hochladen ||
ai-deployment-deutsch.1789565183.txt.gz · Last modified: by misa