Voice Assistant Architektur¶
Stand: 2026-05-29
Kurzfazit¶
Das Projekt Julian-Ivanov/jarvis-voice-assistant ist als Inspiration brauchbar, aber nicht direkt als produktiver Serverdienst geeignet. Es ist ein lokaler Windows/Desktop-Assistent mit sichtbarem Chrome, Web Speech API, Playwright-Browserfenster, Screen Capture, PowerShell-Window-Management, Anthropic-Direktzugriff und ElevenLabs-Direktzugriff.
Für Lanstyle wird Jarvis deshalb nicht blind auf Hermes betrieben. Der sichere Zielpfad nutzt den echten Nous Hermes Agent Core hinter dem bestehenden Lanstyle Gateway:
- Lanstyle AI Gateway im VLAN70 als Auth-/RBAC-/Audit-Schicht
- Nous Hermes Agent Core als lernender Agent mit Memory, Skills und Sessions
- ein kleines Voice-Terminal oder Browser-Client als Audio-/Mikrofon-Endpunkt
- LiteLLM statt direkter Anthropic-Nutzung
- Controlled Execution statt freier Aktionen
- Vaultwarden als Source of Truth fuer Secrets
Repo Analyse¶
Quelle: https://github.com/Julian-Ivanov/jarvis-voice-assistant
| Bereich | Befund | Bewertung |
|---|---|---|
| Backend | server.py, FastAPI/WebSocket |
grundsätzlich serverfähig, aber stark an lokale Config und externe Direkt-APIs gebunden |
| Frontend | Chrome Web Speech API | muss im Browser/Client laufen, nicht im LXC |
| TTS | ElevenLabs API direkt | nicht direkt übernehmen; über Vaultwarden und Policy kapseln |
| LLM | Anthropic SDK direkt | nicht übernehmen; Lanstyle nutzt LiteLLM |
| Browser Automation | Playwright headless=False |
Desktop-/Kiosk-Feature, nicht für Hermes-Server geeignet |
| Screen Capture | PIL.ImageGrab |
benötigt Desktop-Session; im Headless-LXC ungeeignet |
| Wakeword/Clap | sounddevice, numpy |
braucht lokales Mikrofon und Audio-Hardware |
| Windows | PowerShell Launch-/Window-Snapping | Windows-spezifisch, nicht serverfähig |
| Lizenz | keine Lizenzdatei gefunden | Weiterverwendung als Codebasis unklar; nur Analyse/Architektur ableiten |
Zielarchitektur¶
flowchart LR
Device["Voice Terminal / Browser Client"]
Hermes["Lanstyle AI Gateway\n10.222.70.30:8088"]
Core["Nous Hermes Core\n127.0.0.1:8642"]
Memory["Memory / Skills / Sessions\nstate.db + MEMORY.md"]
LiteLLM["LiteLLM\nhttps://litellm.lanstyle.de"]
MCP["Remote MCP / Tools\nhttps://mcphub.lanstyle.de"]
CE["Controlled Execution Layer"]
Vault["Vaultwarden"]
Audit["Audit / RBAC / Policy"]
Device -->|"HTTPS/WebSocket später\nText/Audio Events"| Hermes
Hermes --> Audit
Hermes --> Core
Core --> Memory
Core --> LiteLLM
Hermes --> MCP
MCP --> CE
Hermes --> Vault
Variantenbewertung¶
Variante A: kleines Gerät als Voice-Terminal¶
Empfohlen für Pilot und späteren Produktivbetrieb.
- Aufwand: mittel
- Stabilität: hoch, wenn Browser/Kiosk oder Python-Client schlank bleibt
- Datenschutz: gut, Audio bleibt lokal bis zur expliziten Übertragung
- Latenz: gut im LAN/VLAN
- Wartbarkeit: gut mit goldenem Image und Provisioning
- Multi-User: gut über Device-/User-Token
- Kosten: mittel, typischerweise ca. 150-300 EUR plus Audiozubehör bei N100
Variante B: browserbasierter Voice-Client¶
Guter erster UX-Pilot.
- Aufwand: niedrig bis mittel
- Stabilität: abhängig von Browser-Audio-/Autoplay-Regeln
- Datenschutz: gut, weil Mikrofonzugriff im Browser sichtbar ist
- Wartbarkeit: gut
- Einschränkung: Wakeword nur begrenzt und browserabhängig
- Kosten: niedrig, wenn vorhandenes Gerät/Tablet genutzt wird
Variante C: Headless Audio Device¶
Langfristig interessant, aber erst nach erfolgreichem Browser-/Terminal-Pilot.
- Aufwand: hoch
- Stabilität: abhängig von ALSA/Pulse/PipeWire, Wakeword und Audio-Hardware
- Datenschutz: am sensibelsten
- Wartbarkeit: anspruchsvoller
- Kosten: niedrig bis mittel, aber höhere Betriebs-/Debug-Aufwände
Empfehlung¶
Start mit Variante A als kontrolliertes Voice-Terminal auf Intel N100 Mini-PC oder Raspberry Pi 5. Für den ersten Software-Pilot reicht Variante B mit Browser-Client gegen Hermes.
Der Lanstyle AI Gateway bleibt das Backend fuer Clients. Der Nous Hermes Core verarbeitet Dialog, Memory und Skills. Audioaufnahme, Web Speech API, Wakeword und Lautsprecher laufen auf dem Gerät oder im Browser.
Governance¶
Jarvis/Hermes Voice darf keine freien Infrastrukturaktionen ausführen.
Erlaubt:
- Statusabfragen
- Operator Summary
- read-only MCP Tools
- Preflight/Approval Preview
- Controlled-Execution-Pläne
Nicht erlaubt:
- freier Shell-Zugriff
- direkte Proxmox-/DNS-/Firewall-/NetBox-Writes
- Desktop-Screen-Capture auf Hermes
- direkte Secret-Ausgabe
- direkte Anthropic-/ElevenLabs-Keys im Code
Nous Hermes Core Status¶
Auf lanstyle-hermes-01 läuft zusätzlich zum Gateway der Nous Research Hermes Agent Core:
- Installation:
/opt/nous-hermes/source - Runtime:
/var/lib/nous-hermes - Service:
nous-hermes-core.service - interner API-Server:
127.0.0.1:8642 - Memory:
/var/lib/nous-hermes/memories/MEMORY.mdundUSER.md - Session Search: SQLite/FTS in
/var/lib/nous-hermes/state.db - Provider: LiteLLM mit
lanstyle/agent-stable
Der API-Server ist nicht public exposed. Clients sprechen weiterhin mit dem Lanstyle Gateway.
Pilotstatus¶
Auf lanstyle-hermes-01 ist ein backend-only Voice-Pilot aktiv:
GET /voice/healthPOST /voice/sessionPOST /voice/message
Der Pilot nutzt noch kein echtes Audio und keine produktive TTS/STT-Strecke. Er validiert API, Auth, Audit, Multi-User-Kontext, Governance-Grenzen und Gateway-zu-Nous-Core-Routing.
Modellstrategie Voice¶
Ziel ist gefühlte Geschwindigkeit vor maximaler Modellqualität. Hermes routet Voice-Anfragen in Stufen:
| Level | Zweck | Modell/Route | Bemerkung |
|---|---|---|---|
| 1 | einfache Gespräche, kurze Statusfragen | lanstyle/fast |
bevorzugt für Antwortbeginn < 1s |
| 2 | normale Assistentenlogik | Nous Hermes Core via lanstyle/agent-stable |
Default |
| 3 | komplexe Infrastrukturplanung/Governance | lanstyle/architect oder großes GB10-Modell |
nur bei erkennbarer Komplexität |
| 4 | Spezialfall außerhalb interner Modellfähigkeit | ChatGPT Login-Fallback | manuelle Eskalation, kein heimliches Routing |
Hermes muss bei Eskalation dokumentieren:
- warum eskaliert wurde
- welches Modell genutzt wurde
- welche Daten übertragen wurden
- ob Benutzerbestätigung erforderlich war
- Audit-Referenz
STT/TTS/Wakeword Empfehlung¶
| Baustein | Empfehlung Pilot | Empfehlung später | Einschätzung |
|---|---|---|---|
| Wakeword | Push-to-talk | openWakeWord lokal auf Device |
Wakeword nicht auf Hermes |
| STT | Browser Web Speech API | faster-whisper small/int8 oder whisper.cpp small lokal/Device |
Deutsch brauchbar, geringe Kosten |
| TTS | Browser speechSynthesis |
Piper de_DE lokal oder ElevenLabs optional |
Browser-TTS ist schnell, ElevenLabs natürlicher aber kosten-/secretpflichtig |
| Transport | HTTP JSON | WebSocket/Sentence Streaming | Streaming später für Latenz |
Latenzoptimierung¶
Priorität:
- Antwortbeginn
- Sprachqualität
- Modellqualität
Geplante Optimierungen:
- Push-to-talk statt Wakeword im ersten Pilot
- kurze Level-1-Antworten über
lanstyle/fast - sentence-level Streaming für TTS
- WebSocket Voice Sessions
- lokale STT auf Gerät, wenn Browser-STT nicht stabil genug ist
- keine Screen-/Browser-Automation in der schnellen Sprachschleife
Zielwert: Antwortbeginn unter 1 Sekunde für einfache Status-/Dialogfragen.