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, general etc.)
  • 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 🐈‍⬛