Sprachnotizen mit KI: So wandelt BillableMe Audio mit Whisper in Text um

Als Freelancer hat man die besten Ideen im Auto oder auf der Baustelle, genau dann, wenn Tippen nicht geht. Deshalb hat BillableMe Sprachnotizen bekommen: Man spricht ein To-do, eine Erinnerung oder eine Notiz ein, und eine halbe Minute später steht der Text dabei, durchsuchbar. So bin ich vorgegangen.

Die Anforderungen

  • Audio bleibt auf meinem eigenen Server, ohne externen Transkriptionsdienst.
  • Niederländisch und Englisch, mit automatischer Spracherkennung.
  • Keine GPU: Es muss auf dem bestehenden Docker Swarm laufen.
  • Der Nutzer wartet nie auf die Transkription.

Schritt 1: Aufnehmen in Flutter

Die App nimmt mit dem record-Package in AAC (m4a) auf, fragt die Mikrofonberechtigung an und lässt sofort eine Kategorie, eine Markierung und einen Titel wählen. Die Datei geht als Multipart-Upload an die NestJS-API. Ab diesem Moment steht die Notiz in der Liste, mit dem Status „wird verarbeitet“.

Schritt 2: Eine Warteschlange statt Warten

Die API speichert die Audiodatei auf einem gemeinsamen Volume, legt einen Datensatz in PostgreSQL an und stellt einen Job in eine Bull-Warteschlange in Redis. Der HTTP-Aufruf ist damit im Bruchteil einer Sekunde erledigt. Ein Worker übernimmt den Job, ruft den Transkriptionsdienst auf und versucht es bei einem Fehler bis zu drei Mal erneut, mit steigender Wartezeit. Der Status wechselt von pending über processing zu completed oder failed.

Schritt 3: Ein eigener Whisper-Dienst in Python

Die Transkription selbst erfolgt in einem kleinen FastAPI-Service mit OpenAI Whisper. Ich habe das base-Modell gewählt: 74 MB, etwa 30 Sekunden pro Minute Audio auf einer CPU und völlig ausreichend für gesprochene Notizen auf Niederländisch und Englisch. Die Modellgröße ist eine Umgebungsvariable, sodass ich auf small oder medium hochskalieren kann, wenn die Hardware es zulässt. ffmpeg ist im Container enthalten, um m4a zu dekodieren.

Schritt 4: Zurück in der App

Sobald der Text in der Datenbank steht, zeigt die App ihn unter der Notiz an. Die Aufnahme lässt sich mit 0,75- bis 1,5-facher Geschwindigkeit abspielen, die Notiz bearbeiten, nach Kategorie oder Zeitraum filtern und in den Transkriptionen suchen.

Was ich daraus gelernt habe

  • Das kleinste Modell wählen, das gut genug ist. Das small-Modell ist auf der CPU dreimal langsamer als base; für kurze gesprochene Notizen war base völlig ausreichend.
  • Asynchron ist kein Luxus. Dreißig Sekunden Warten in einer mobilen App fühlen sich wie eine Ewigkeit an. Eine Warteschlange mit sichtbarem Status macht es selbstverständlich.
  • Das Audio lokal halten. Ein gemeinsames Volume zwischen der API und dem Whisper-Service genügt. Die Aufnahmen verlassen den Server nie.

Möchten Sie eine ähnliche KI-Funktion in Ihrer eigenen App? Nehmen Sie Kontakt auf.