Erste Schritte
Simmetric Chat ist eine lokale, air-gap-fähige KI-Chat-Plattform: sie funktioniert ohne Verbindung zu externen Cloud-Diensten, mit lokalem LLM (Ollama), lokalen Embeddings (Xenova) und lokaler Vektor-DB (LanceDB). Sie kann jedoch Cloud-Anbieter (OpenAI, …
Simmetric Chat ist eine lokale, air-gap-fähige KI-Chat-Plattform: sie funktioniert ohne Verbindung zu externen Cloud-Diensten, mit lokalem LLM (Ollama), lokalen Embeddings (Xenova) und lokaler Vektor-DB (LanceDB). Sie kann jedoch Cloud-Anbieter (OpenAI, Anthropic, OpenRouter) und eine entfernte Vektor-DB (Qdrant) nutzen, wenn diese konfiguriert sind.
Voraussetzungen
- Node.js ≥ 24 und pnpm 11.24.0 (der Monorepo-Manager; `corepack enable && corepack prepare [email protected] --activate`)
- PostgreSQL 16 (Hauptdatenbank)
- Ollama (optional, aber empfohlen für das lokale LLM) - https://ollama.com
- Docker + Docker Compose (für die containerisierte Bereitstellung, siehe 09 - Deployment)
Prüfen:
node -v && pnpm -v && psql --versionInstallation (lokale Entwicklung)
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm installDas Monorepo nutzt pnpm workspaces + Turborepo. Die Pakete liegen in packages/: shared, server, frontend, collector, widget, plus die Desktop-App src-tauri/.
Umgebungsvariablen
Alle Pakete lesen die `.env` im Repo-Root (die einzige Laufzeitkonfigurationsdatei; die alte pro-Paket-.env-Ebene wurde entfernt: Vorrang process.env > Root-.env > Code-Standard). Erstellen Sie die minimale Datei:
cp .env.example .envErforderliche Secrets (JWT_SECRET, COLLECTOR_SECRET) und der Widget-Schlüssel:
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434WIDGET_API_KEY wird vom Widget-Dienst benötigt (dessen eigenes Zod-Schema beendet den Prozess ohne sie); der Server registriert sie beim Start als API-Key des Kontos widget-service (idempotent). Optional in der Entwicklung: API_KEY_HMAC_SECRET (die sk--API-Keys bleiben unbrauchbar, bis sie gesetzt ist) und ENCRYPTION_KEY (Fallback scryptSync(JWT_SECRET); in Produktion erforderlich). Ein fehlender LICENSE_KEY bedeutet den Community-Build.
Vollständige Umgebungsvariablen-Tabelle: 03 - Configuration.
Datenbank
Erstellen Sie die PostgreSQL-Datenbank (z.B. docker compose -f docker/docker-compose.infra.yml up -d postgres), generieren Sie dann den Prisma-Client, wenden Sie die Migrationen und den Seed an:
pnpm db:generate # generiert den Prisma-Client (+ Prisma-7/pnpm-Symlink-Fix)
pnpm --filter server db:migrate # wendet die Migrationen an (interaktiv)
pnpm --filter server db:seed # Standardrollen (Admin, Superuser, User), Berechtigungen, Config, TemplatesAlternative zum manuellen Seed: bei leerer Datenbank zeigt das Frontend den Setup- Assistenten in 4 Schritten (Admin, LLM-Anbieter, Vektor-DB) - oder der Server seedet den Bootstrap-Admin automatisch (SEED_BOOTSTRAP_ADMIN=true standardmäßig, konfigurierbar via SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL, Standard admin / admin123 / [email protected] mit mustChangePassword=true). Die Selbstregistrierung ist standardmäßig geschlossen (ALLOW_REGISTRATION=false): ein Admin erstellt Benutzer über Settings oder via POST /api/auth/admin-register.
Entwicklung starten
Ein einziger Befehl startet alle Dienste über Turborepo:
pnpm devStandard-Ports:
| Service | Port | Beschreibung |
|---|---|---|
| frontend | 5173 | Vite-SPA (React 19), Proxy /api → server |
| server | 3000 | Express-API + Swagger unter /api-docs |
| collector | 3210 | Microservice für Dokumenterfassung |
| widget | 3211 | Einbettbarer Widget-Dienst (Preact) |
Öffnen Sie http://localhost:5173, melden Sie sich mit admin / admin123 an und ändern Sie das Passwort.
Wenn Ollama nicht läuft, schlagen Chats mit einem Verbindungsfehler fehl. Laden Sie ein
Modell mit ollama pull gemma4:latest && ollama serve herunter oder konfigurieren Sieeinen Cloud-Anbieter unter Settings → Providers.
Kurze UI-Tour
- Sidebar - nach Rolle gefilterte Gruppen: Overview (Dashboard), Chat (Chat, Projects, Workspaces), Knowledge (Documents, Wissensbasis, Uploads), Platform (Widgets, Marketplace, Analytics - Admin), System (Eventlog, SSO - Admin/Enterprise). Die Einträge folgen den 13 RBAC-Menüabschnitten.
- Chat - Token-für-Token-Streaming, Modellauswahl pro Chat (
Cmd+K-Palette), Side-by-Side-Vergleich (Cmd+Shift+M), RAG-Zitate,/model-Slash-Befehl. - Documents - Drag-&-Drop-Upload (PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, Bilder mit OCR), Status
pending → processing → completed → failed. - Settings - 5 Haupt-Tabs (Profil, LLM-Anbieter, Erscheinungsbild, Sicherheit, Erweitert), die die Unterabschnitte verschachteln: Providers, LLM & Embedding, Vector DB, API Keys, Roles, Users, MCP Connections, Maintenance, Backups, DLP, Widget (eigene Seite), OCR, usw.
- Maintenance - One-Click-RAG-Reindex nach einem Wechsel des Embedding-Modells.
Empfohlene erste Schritte
- Konfigurieren Sie einen Anbieter - Settings → Providers: Ollama (lokal) oder OpenAI/Anthropic hinzufügen.
- Erstellen Sie einen Workspace und ein Projekt - Dokumente und Chats sind workspace-gebunden.
- Laden Sie ein Dokument hoch - Documents → Upload; warten Sie auf den Status
completed. - Chatten Sie - öffnen Sie einen Chat im Workspace und stellen Sie Fragen zum Dokument (hybrides RAG).
- (Admin) Entdecken Sie den Marketplace - installieren Sie einen MCP-Server, um den Agenten um Tools zu erweitern.
Nächste Schritte
- Verstehen, wie es unter der Haube funktioniert: 02 - Architecture
- Alle Env-Variablen und Feature-Flags: 03 - Configuration
- Einbetten des Chats in Ihre Website: 06 - Widget Integration