RAG Support Desk — OZM Chat Hook
(RKL-OZM-Chat-Hook-v.0.0)
Ein lokales RAG-System für die Crew: Logfiles und Dokumente rein, Fragen stellen, Antworten bekommen. Kein Cloud-Overhead, kein Auth-Ballast — läuft vollständig per Docker Compose auf deinem Rechner.
Stack
| Komponente | Technologie |
|---|---|
| Backend | FastAPI (Python 3.14) |
| Vektordatenbank | PostgreSQL 17 + pgvector |
| Embeddings (lokal) | Ollama — nomic-embed-text (768-dim) |
| LLM (Reasoning) | Claude Sonnet 4.6 via Anthropic API |
| Frontend | Vanilla HTML/CSS/JS — kein Build-Schritt |
| Deployment | Docker Compose (3 Services) |
Features
- Multi-Channel-Wissen: Channels isolieren Wissensdatenbanken (
firewall,studio,generaletc.) - Log-Analyse-Modal: Logs einfügen, Claude anonymisiert automatisch (IPs →
[IP-xxx], Hosts, User) und gibt eine Security-Analyse zurück — Rohdaten werden nie gespeichert - Chat History: Alle Fragen + Antworten + Quellen werden per Channel in PostgreSQL persistiert
- IRC-Style UI: Two-Column-Layout mit Sidebar, Kanal-Switcher und Monospace-Chatfenster
- Text-Ingest: Text, Markdown oder Logs direkt ins Textfeld pasten — kein Datei-Upload nötig
- Similarity Search: IVFFlat-Index für schnelle Cosine-Distance-Suche
Schnellstart
# 1. Repo klonen und ins Verzeichnis
git clone <repo-url>
cd RKL-OZM-Chat-Hook-v.0.0
# 2. API-Key setzen
cp .env.example .env
# ANTHROPIC_API_KEY in .env eintragen
# 3. Stack starten (Ollama zieht nomic-embed-text beim ersten Start)
docker compose up --build
# 4. Browser öffnen
open http://localhost:8080
Beim ersten Start lädt Ollama automatisch das Embedding-Modell — das kann ein paar Minuten dauern.
Workflow
Logfile / Text → POST /ingest-text → Chunks + Embeddings → PostgreSQL
Frage → POST /query → Similarity Search → Claude → Antwort
Logfile → POST /analyze-log → Anonymisierung → Claude → Security-Report
API-Endpoints
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/ |
Frontend (index.html) |
GET |
/health |
DB, Ollama, Claude API Status |
GET |
/channels |
Alle Channels abrufen |
POST |
/channels |
Neuen Channel anlegen |
POST |
/ingest-text |
Text direkt ingestieren |
POST |
/ingest |
Datei ingestieren |
POST |
/query |
RAG-Anfrage stellen |
GET |
/history |
Chat-History eines Channels |
POST |
/analyze-log |
Anonymisierte Log-Analyse |
POST |
/save-analysis |
Analyse in general speichern |
POST |
/admin/reset |
Chunks löschen (channel-scoped oder global) |
Projektstruktur
api.py ← FastAPI App — Routing, Endpoints
ingest.py ← Chunken, Embedden, in pgvector schreiben
query.py ← Similarity Search + Claude-Anfrage
public/index.html ← Browser-Frontend (SPA, kein Framework)
schema.sql ← PostgreSQL-Schema mit pgvector
docker-compose.yml ← db + ollama + app
Dockerfile ← Python 3.14-slim Image
.env.example ← Konfigurationsvorlage
logs/ ← Testlogs für lokale Entwicklung
Datenbankschema
channels (id TEXT, name TEXT, category TEXT)
chunks (id, source, content, embedding vector(768), channel_id, created_at)
chat_history(id, channel_id, question, answer, sources JSONB, created_at)
Konfiguration (.env)
DATABASE_URL=postgresql://rag:rag@db:5432/supportdesk
OLLAMA_URL=http://ollama:11434
ANTHROPIC_API_KEY=sk-ant-...
POSTGRES_USER=rag
POSTGRES_PASSWORD=rag
POSTGRES_DB=supportdesk
Ports
- App: http://localhost:8080
- PostgreSQL + Ollama laufen nur Docker-intern (nicht exposed)
Developed by crew wolkenkatze 🐈⬛