Technik

Spracheingabe-Architektur: Einblick in Loquas Drei-Modell-Stack

Warum wir Spracherkennung, Sprachintelligenz und Bildschirmkontext trennen — und wie wir ehrlich über die internen Zahlen denken.

TL;DR

Das ist ein Blog-Blick auf Loquas Spracheingabe-Architektur — und darauf, warum die richtige Voice-KI-Architektur fürs Diktat nicht ein großes ASR-Modell ist. Loqua ist als drei kooperierende Schichten aufgebaut: Spracherkennung, Sprachintelligenz und multimodaler Kontext. Der Grund ist einfach: Diktier-Qualität ist nicht nur Word Error Rate. Ein nützlicher Diktier-Modell-Stack muss die Wörter hören, technische Namen verstehen und die Ausgabe für die Ziel-App formen. Unsere internen Ziele sind Reaktionsfähigkeit im 200ms-Bereich, hohe Erkennung von technischem Vokabular und niedrige einstellige WER unter unterstützten Bedingungen; solange wir keine Benchmark-Seite veröffentlichen, behandle diese als interne Messungen, nicht als Drittpartei-Aussagen.

Ich bin Shuran. Ich leite ein kleines Team aus Algorithmus-Forschern, die Spracheingabe jeden Tag nutzen. Wir haben Loqua gebaut, weil die Diktier-Werkzeuge, die wir evaluiert haben — die meisten gut entwickelt, die meisten wirklich nützlich — alle gegen dieselbe Decke stießen, sobald wir sie auf Code, mehrsprachiges Mischen und app-bewusste Formatierung drängten. Diese Decke ist strukturell, kein Tuning-Problem. Das ist die Architektur, bei der wir gelandet sind, nachdem wir entschieden hatten, dass sich die Struktur ändern muss.

Das ist kein Paper. Es ist ein Walkthrough auf Blog-Ebene — die Intuition hinter jeder Schicht, die Zahlen, die dabei herauskamen, und wofür wir den Stack tatsächlich nutzen. Wenn du den tieferen akademischen Kontext willst, verweist der Abschnitt mit weiterführender Literatur am Ende auf die Papers, aus denen wir geschöpft haben.

Die Wrap-Whisper-Falle

OpenAIs Whisper hat verändert, was bei englischer Spracherkennung möglich ist. Es ist ein bemerkenswertes Modell. Das Whisper-Paper hat gezeigt, dass das Skalieren von schwach überwachtem Audio-Training robuste allgemeine ASR liefert — über Akzente, Bedingungen und 99 Sprachen hinweg — ohne domänenspezifisches Fine-Tuning. Das ist ein struktureller Gewinn für das Feld.

Aber Whisper ist ein ASR-Modell, kein Diktier-Produkt. Die Lücke zwischen „transkribiert Sprache präzise" und „erzeugt Text, den ich ohne Bearbeitung in eine E-Mail einfügen kann" ist groß. Der Wrap-Whisper-Ansatz — nimm Whispers Ausgabe und schicke sie durch eine Formatier-Schicht — schließt einen Teil dieser Lücke. Er versagt an drei Stellen, die uns wichtig waren:

  • Technisches Vokabular. Whisper hört „react query" und gibt dir „react query". Es weiß nicht, dass das in deiner Codebase @tanstack/react-query ist und du den Package-Import wolltest. NER auf technischem Vokabular braucht ein Modell, das den umgebenden Kontext sieht, nicht eines, das Phoneme hört.
  • App-bewusste Formatierung. Whisper transkribiert; es weiß nicht, ob du in Slack oder in einer Python-Datei bist. Einen Formatierer obendrauf zu schrauben braucht entweder eine Heuristik — die brüchig ist — oder einen schweren LLM-Aufruf pro Äußerung, was langsam und Cloud-abhängig ist.
  • Streaming unter knappen Latenz-Budgets. Whisper ist hervorragend für Batch-Transkription. Streamendes, latenzarmes, lokales Whisper erfordert entweder Kompromisse (kleineres Modell, geringere Genauigkeit) oder aggressives Engineering, das gegen die Struktur des Modells arbeitet.

Wir haben den Wrap-Whisper-Pfad für einen Forschungsprototyp ausprobiert. Er war gut genug, um Ideen zu testen. Er war nicht gut genug, um als unser tägliches Werkzeug zu dienen.

Die Drei-Modell-Intuition: eine andere Art von Spracherkennungs-Stack

Die Intuition ist, dass Spracheingabe drei Aufgaben sind — und dasselbe Modell ist in allen dreien schlecht. Die drei Aufgaben:

  1. Die Wörter hören. Akustik zu Token. Darin ist ASR gut.
  2. Die Absicht verstehen. Füllwörter und Fehlstarts bereinigen, mitten im Satz korrigieren. Technische Entitäten erkennen. Entscheiden, was der Nutzer tatsächlich tippen wollte.
  3. Es korrekt platzieren. Die Ausgabe für die Ziel-App formatieren. Dieselbe Absicht als Code in VS Code, als Slack-Nachricht in Slack, als strukturierten Prompt in Cursor erscheinen lassen.

Ein einzelnes End-to-End-Modell, das versucht, alle drei zu erledigen, hat ein hartes strukturelles Problem: Die Loss-Oberfläche für „Phoneme transkribieren" und die Loss-Oberfläche für „für Slack formatieren" zeigen in verschiedene Richtungen. Gemeinsames Training kompromittiert beide. Wir können das mit unseren eigenen Ablationen bestätigen — wir haben versucht, die Schichten 2 und 3 in einem Transformer zu vereinen, der auf Multi-Task-Daten trainiert wurde, und die Genauigkeit fiel bei beiden.

Die Aufteilung in drei lässt jedes Modell eine Aufgabe gut erledigen. Der Preis ist ein geringer Latenzaufwand für die Übergabe zwischen den Schichten, den wir wettmachen, indem wir alles in einer einzigen Pipeline auf der Neural Engine laufen lassen. Das ist der Kern von Loquas Spracheingabe-Architektur: kein monolithischer Transkriptor, sondern ein kleiner Diktier-Modell-Stack, in dem jede Schicht zweckgerichtet für ihren Teil des Problems trainiert ist.

Schicht 1: Spracherkennung

Akustische Eingabe → Token-Sequenz. Das ist ein aufgabenspezifischer Spracherkenner statt eines direkten Whisper-Wrappers. Die Architektur-Entscheidungen wurden von drei Einschränkungen getrieben, bei denen wir keine Kompromisse machen wollten:

  • Streaming-first. Die Ausgabe beginnt, bevor der Sprecher die Äußerung beendet. Das schließt non-kausale Aufmerksamkeit über die gesamte Audio-Sequenz als Standard aus — wir verwenden eine streamingfreundliche Variante.
  • Kompatibilität mit der Neural Engine on-device. Modellgröße und Operator-Auswahl sind durch das eingeschränkt, was effizient auf Apples Core ML über die Neural Engine läuft. Das ist eine echte Einschränkung — Operatoren, die in einem Paper gut aussehen, können vom Neural-Engine-Pfad fallen und CPU-gebunden werden.
  • Robustheit bei niedriger Lautstärke. Unsere Trainingsdaten enthalten bewusst flüsterlaute Eingaben (Leute, die leise in Cafés diktieren, spät nachts). Die meisten allgemeinen ASR-Trainingsdaten sind in normaler Lautstärke; Flüsterlautstärke erfordert explizite Abdeckung.

Die Ausgabe dieser Schicht ist eine Token-Sequenz mit Timing und Konfidenzwerten. Es ist nicht dein finaler Text — es ist die Roh-Erkennung, die die nächste Schicht bereinigt.

Schicht 2: Sprachintelligenz

Token-Sequenz → bereinigter, absichtsaufgelöster Text. Hier investieren wir am meisten in die Forschung, weil hier der größte Teil der nutzersichtbaren Qualität entsteht.

Aufgabe dieser Schicht: nimm, was das Sprachmodell gehört hat, und erzeuge, was der Nutzer gemeint hat. Drei Dinge passieren parallel:

  • Entfernung von Füllwörtern und Fehlstarts. „Ähm, also, im Grunde, wir sollten — eigentlich warte, lass mich von vorn anfangen — wir sollten das cachen" wird zu „Wir sollten das cachen". Die Korrektur mitten im Satz wird respektiert; das Räuspern ist weg.
  • NER für technisches Vokabular. Die Schicht lernt die Namen gängiger Libraries, Frameworks, Modellfamilien, Dateiendungen, Terminal-Befehle und idiomatischer API-Oberflächen. „React query" wird zu @tanstack/react-query, wenn der umgebende Kontext eine JavaScript-Datei ist. Unser internes Ziel ist eine Erkennung im hohen 90er-Bereich für kuratiertes domänenspezifisches technisches Vokabular, sodass Bezeichner korrekt herauskommen, ohne für jeden gängigen Begriff ein persönliches Wörterbuch zu erzwingen.
  • Strukturelle Formung. Ob die Ausgabe ein Satz, eine Aufzählung, eine Markdown-Tabelle oder ein Code-Kommentar ist, wird hier entschieden — basierend darauf, was die nächste Schicht (multimodaler Kontext) über das Ziel sagt.

Diese Schicht ist nach Parameterzahl das kleinste Modell im Stack, aber das mit der größten Wirkung auf die Nutzererfahrung. Wir haben hier mehr Team-Stunden investiert als in die anderen beiden zusammen.

Schicht 3: Multimodaler Kontext

App-Zustand + Bildschirm + Cursor → Format-Direktive. Das ist die omni-modale Schicht — und der Grund, warum wir das nicht einfach „eine Diktier-App" nennen. Loquas Aufgabe ist nicht zu transkribieren; sie ist, das zu schreiben, was du gemeint hast, dort, wo du es gemeint hast.

Die Kontext-Schicht liest die aktive App über die macOS Accessibility API, den ausgewählten Text (falls vorhanden), den sichtbaren angrenzenden Text und die strukturellen Hinweise des Ziels (Gmail-Compose vs. Slack-Thread vs. VS Code Python-Datei vs. Cursor-Chat-Panel). Sie gibt eine Format-Direktive aus, die die Sprachschicht nutzt, um den finalen Text zu formen.

Die tiefere Intuition — warum omni-modale Architekturen Spracheingabe verändern, nicht nur verbessern — ist ein eigenes Stück. Siehe Voice trifft Vision: wie omni-modale Modelle kontextbewusstes Diktat ermöglichen, wenn du diesem Faden folgen willst.

Die Zahlen, die wir verfolgen

MetrikAktuelles internes ZielWarum es zählt
End-to-End-Latenz200ms-Klasse auf Apple SiliconUnter dem Punkt, an dem sich Diktat wie Warten anfühlt
Time-to-first-token (TTFT)Unter 200ms in gängigen Streaming-FällenErste Wörter erscheinen, während längere Äußerungen noch gesprochen werden
NER-GenauigkeitHohe 90er bei kuratiertem domänenspezifischem technischem VokabularBezeichner, Libraries und Modellnamen müssen korrekt herauskommen
Mehrsprachige WERNiedrige einstellige Werte in unterstützten TestbedingungenGemischtes Englisch / Chinesisch und akzentuiertes Englisch müssen in echten Workflows funktionieren

Das sind interne Benchmark- und Dogfooding-Zahlen, keine Drittpartei-Benchmark-Suite. Die Testsets umfassen unser eigenes technisches Vokabular, Code-Switching-Beispiele, Samples mit akzentuiertem Englisch und laute Alltagsumgebungen. Der nächste inhaltliche Schritt sollte eine öffentliche Methodik-Seite sein, damit diese Zahlen ohne Handwedeln zitiert werden können.

Wofür wir es selbst nutzen

Das Wichtigste, was ich über diesen Stack sagen kann, ist, dass wir ihn geschrieben haben, weil wir ihn nutzen. Jedes Teammitglied diktiert täglich — für Commits, PRs, internes Slack, längeres technisches Schreiben und (in meinem Fall) den Großteil der Prosa für Blogposts wie diesen. Die Entscheidungen, die die Architektur geprägt haben, kamen aus echter Nutzung, nicht aus einer Produktspezifikation.

Drei Stellen, an denen die Unterscheidung Architektur vs. Feature im täglichen Gebrauch sichtbar wird:

  • Code-Diktat. Die NER-Qualität ist der Unterschied zwischen Stimme als realistischer Schnittstelle für Code und Stimme als Spielzeug. Siehe den Leitfaden zum Code-Diktat dafür, was das ermöglicht.
  • Mehrsprachiges Code-Switching. Die Hälfte unseres internen Slack ist gemischtes Mandarin und Englisch. Die Sprachschicht ist auf Code-Switching-Daten trainiert, nicht um sie herum; Wechsel mitten im Satz funktionieren ohne Modus-Umschalter.
  • App-bewusste Formatierung. Dieselbe Sprachphrase, die in VS Code zu einem Code-Kommentar und auf GitHub zu einer strukturierten PR-Beschreibung wird, ist der Unterschied zwischen Spracheingabe und einem nützlichen Produkt.

Wir sind ein kleines Team. Die ehrliche Version dieser Geschichte ist, dass wir nicht die Ressourcen haben, ein Wrapped-Whisper-Produkt UND einen Drei-Modell-Forschungs-Stack zu pflegen. Wir haben auf den strukturellen Pfad gesetzt, weil wir die Qualität für uns selbst brauchten — und wir bringen lieber etwas Schmaleres mit Qualität raus als etwas Breiteres ohne.

Wie jede Schicht 2026 neu gebaut wurde

Schicht 1 — Spracherkennung. Der Erkenner wurde rund um Streaming, leise Sprache und technisches Vokabular verfeinert; der tiefere Walkthrough steht in Einblick in unseren omni-modalen Voice-Stack und die Post-Training-Details in RL in unserem Voice-Stack.

Schicht 2 — Sprachintelligenz. Die Sprachschicht behandelt Bereinigung, Entitätserhalt und app-bewusste Struktur jetzt als einen Diktier-Modell-Stack statt als separate Post-Processoren. Genau hier hilft Reinforcement Learning am meisten: die Ausgabe zu wählen, die Nutzer am wenigsten bearbeiten.

Schicht 3 — multimodaler Kontext. Die Kontext-Schicht wurde rund um lokale Bildschirmevidenz neu gebaut: aktive App, ausgewählter Text, sichtbare Bezeichner und Cursor-Umgebung. Siehe einen Listener bauen, der sieht, was du siehst für die Architektur.

Die nächste Front sind nicht-wörtliche Audios: AED und Audio-Captioning als optionaler, lokal-zuerst-Kontext. Wir beschreiben diese Arbeit im Prototyp-Stadium in Geräusche mit Bedeutung.

Weiterführende Literatur

Wenn du tiefer einsteigen willst als in diese Blog-Behandlung:

Wenn du Fragen zur Architektur hast oder eine dieser Schichten tiefer ausleuchten willst, schreib uns. Wir sind ein kleines Team und lesen jede E-Mail.

Häufig gestellte Fragen

Warum drei Modelle statt einem großen LLM?
Ein einzelnes End-to-End-Modell hat ein strukturelles Problem: Die Loss-Oberfläche für „Phoneme korrekt transkribieren" zeigt in eine andere Richtung als die Loss-Oberfläche für „Ausgabe für Slack formatieren". Wir haben versucht, die Schichten 2 und 3 in einen Transformer zu vereinen, der auf Multi-Task-Daten trainiert wurde, und die Genauigkeit fiel bei beiden Aufgaben. Drei zweckgerichtet trainierte Modelle, von denen jedes eine Aufgabe gut erledigt, schlagen ein Modell, das alle drei zu erledigen versucht.
Warum nicht einfach Whisper umhüllen?
Whisper ist ein gutes ASR-Modell, aber kein Diktier-Produkt. Der Wrap-Whisper-Ansatz scheitert bei technischem Vokabular (keine kontextuelle NER), App-bewusster Formatierung (erfordert einen schweren Post-Processor) und on-device Streaming (Whisper ist auf Batch-Verarbeitung optimiert). Wir brauchten alle drei für unseren eigenen täglichen Gebrauch.
Habt ihr die Modelle von Grund auf trainiert?
Ja, für die Schichten Spracherkennung und Sprachintelligenz. Die multimodale Kontext-Schicht baut auf omni-modalen Forschungsmustern auf (siehe den Omni-Modal-Blogpost für die Herkunft), mit eigenen Trainingsdaten und aufgabenspezifischem Fine-Tuning fürs Diktat.
Wie groß ist jedes Modell?
Wir veröffentlichen keine exakten Parameterzahlen — sie sind so abgestimmt, dass sie ins Budget der Neural Engine passen und gleichzeitig unsere Latenz- und Genauigkeitsziele erreichen. Alle drei Schichten zusammen laufen innerhalb des lokalen Teils des Stacks. Die Cloud bleibt bestimmten Fällen vorbehalten (längere Umschreibungen, bestimmte Übersetzungen) und ist nutzerseitig abschaltbar.
Wie bewertet ihr die Genauigkeit?
Mit internen Benchmark-Suiten für jede Schicht plus täglichem Team-Dogfooding. Spracherkennung wird mit WER-artigen Protokollen unter unterstützten Bedingungen gemessen. NER wird an kuratiertem technischem Vokabular gemessen. Wir sollten eine Methodik veröffentlichen, bevor wir eine Zahl als externen Benchmark-Anspruch behandeln.
Werdet ihr etwas davon Open Source machen?
Für den Produktions-Stack derzeit nicht geplant — das Team ist klein und der Aufwand, eine saubere öffentliche Veröffentlichung neben dem Produkt zu pflegen, würde uns ausbremsen. Wir veröffentlichen Notizen wie diese, wenn es etwas zu sagen gibt. Wenn du in der Forschung zusammenarbeiten möchtest, schick uns eine E-Mail.

Probiere Loqua heute aus

Kostenlos starten. Mac-nativ. Gebaut von Algorithmus-Forschern, die es täglich nutzen.

Für Mac laden

Verwandte Artikel

technik
Omni-modale Spracheingabe: multimodales Verständnis, MoE und Streaming-Textausgabe
technik
Reinforcement Learning für Spracheingabe: GRPO, DPO und On-Policy-Distillation in unserem Voice-Stack
technik
Multimodale Spracherkennung: einen Zuhörer bauen, der sieht, was du siehst
produktivität
Voice-Produktivitäts-Stack: 9 Werkzeuge, die wir wirklich zum Schreiben, Versenden und Denken nutzen
anleitung
Mac-Meeting-Notizen per Stimme: vom Sprechen zum Erledigen mit Notizen und Action Items