Local Voice Agent

Aktiv

Ein lokaler Sprachassistent in Python. Ich verbinde Spracherkennung, LLM und Sprachausgabe und arbeite an Streaming, natürlichen Unterbrechungen und ersten Tool-Aufrufen.

Aktualisiert
2026-09-18
pythonollamafaster-whisperqwen3-ttslinuxaudio

Die Idee

Ich möchte mit einem Sprachassistenten auf meiner eigenen Hardware sprechen können. Mich interessiert dabei, wie aus einzelnen lokalen Modellen ein System wird, das zuhört, antwortet und sich im Gespräch sinnvoll unterbrechen lässt.

Der Voice Agent ist ein persönliches Projekt in aktiver Entwicklung. Das Repository ist privat, eine öffentliche Demo gibt es derzeit nicht.

Eine modulare Sprachpipeline

Die Anwendung verbindet Mikrofonaufnahme, Spracherkennung, Gesprächsverwaltung, Sprachmodell und Audioausgabe. Die Komponenten sind durch eigene Schnittstellen getrennt, damit ich Backends austauschen und einzeln testen kann.

  • Spracherkennung mit Faster-Whisper sowie WebRTC VAD zur Erkennung von Sprachaktivität.
  • Antwortgenerierung mit einem lokalen Qwen3-Modell über Ollama.
  • Sprachausgabe mit Qwen3-TTS und einem separaten TTS-Backend.
  • Audiowiedergabe mit Streaming und begrenzten Warteschlangen.
  • Gesprächsverwaltung mit Verlauf sowie einem ersten Planner- und Tool-Layer.

Mein Schwerpunkt liegt auf der Integration und dem Laufzeitverhalten dieser Komponenten. Die zugrunde liegenden Sprachmodelle trainiere ich nicht selbst.

Unterbrechen gehört zum Gespräch

Ein Sprachassistent sollte nicht einfach weiterreden, wenn ich eine neue Frage stelle. Deshalb arbeite ich mit Barge-in, also dem Unterbrechen einer laufenden Antwort durch die eigene Stimme.

Dafür müssen Modellantwort, Sprachsynthese und Audiowiedergabe gemeinsam abgebrochen werden. Bereits gepufferte Audiostücke dürfen anschließend nicht weiterlaufen. Mit akustischer Echounterdrückung über PipeWire lässt sich außerdem verhindern, dass der Assistent seine eigene Lautsprecherausgabe als neue Eingabe auffasst.

Auch der Gesprächsverlauf muss dazu passen. Eine unterbrochene Antwort wird nicht so gespeichert, als hätte ich sie vollständig gehört.

Messen statt raten

Ich erfasse Laufzeiten entlang der Pipeline, etwa vom Ende einer Äußerung bis zum Transkript, zum ersten LLM-Token und zur Audioausgabe. Smoke-Tests helfen, Streaming, Abbruch und das Verhalten bei Backend-Ausfällen getrennt zu untersuchen.

Der aktuelle Stand umfasst die lokale Sprachpipeline, Streaming, Gesprächsverlauf, Barge-in und erste Tool-Aufrufe. Weitere Agentenfunktionen und ein breiterer Einsatz bleiben Entwicklungsziele.