Think-Aloud-Modus
Annotatoren sprechen, während sie arbeiten, und Potato speichert das wortgetreue Transkript als Begründung. Die Spracherkennung läuft mit faster-whisper vollständig lokal, es verlässt also kein Audio den Rechner, und in der Pipeline steckt weder eine Cloud-API noch ein LLM.
Neu in v2.7.0
Vor den LLMs war das Lautes-Denken-Protokoll der Goldstandard, um Urteilsbildung zu verstehen, und es hat den Sprung in die Annotationswerkzeuge nie geschafft. Im Think-Aloud-Modus sprechen Annotatoren einfach, während sie arbeiten.
Das wortgetreue Transkript wird als Begründung gespeichert, bewusst ohne Zusammenfassung, denn wer ein Lautes-Denken-Protokoll paraphrasiert, verfälscht genau das Artefakt, das er sammeln will. Labels lassen sich per Stimme festlegen, über feste Formulierungen, die ein regelbasierter Parser erkennt, ohne LLM an irgendeiner Stelle der Pipeline.
Die Spracherkennung läuft vollständig lokal über faster-whisper, das mit dem 39 MB großen Modell tiny.en auf der CPU echtzeitfähig ist. Das Audio verlässt den Rechner nie, es gibt keine Cloud-API aufzurufen und keine Rechnung pro Token.
Hinweis: Think-Aloud transkribiert die Annotatoren. Wer bereits vorhandene Transkripte annotieren möchte, aus Whisper, einer Cloud-ASR-API oder heruntergeladenen Untertiteln, braucht eine andere Funktion: siehe Transkriptformate. Die beiden werden verwechselt, weil in beiden Whisper vorkommt.

Die Gedankenkette des Menschen aufzeichnen
Es geht nicht nur darum, Begründungen zu sammeln. Think-Aloud hält fest, wie eine Person tatsächlich zu einem Label kommt, sodass sich diese menschliche Gedankenkette der Gedankenkette eines Modells beim selben Element gegenüberstellen lässt.
Potatos Prozessbelohnungsannotation zerlegt Schritt für Schritt, wie ein Modell schlussfolgert. Think-Aloud hält fest, wie ein Mensch es tut. Beides sind Aufzeichnungsflächen, und nebeneinandergelegt beim selben Element zeigen sich die interessanten Abweichungen.
Funktionsweise
- Der Annotator tippt auf 🎤 Laut denken und spricht frei.
- Das Audio wird in vollständigen Sechs-Sekunden-Chunks aufgenommen und lokal transkribiert.
- Um ein Label per Stimme festzulegen, verwendet er eine der akzeptierten Formulierungen:
- "I label this Polite" / "I'd call it neutral"
- "My answer is impolite"
- "Final answer: polite" / "I go with neutral"
- Die Erkennung wählt die passende Option in der Oberfläche automatisch aus, die übliche Speicherkette läuft an, und die Plakette bestätigt: Gehört: Impolite ✓. Eine spätere neue Formulierung ändert das Label, es gilt also die letzte Festlegung.
- Mit
require_spoken_label: truelöst ein Druck auf Weiter ohne festgelegtes Label einen einmaligen Hinweis mit der erwarteten Formulierung aus. Ein zweites Weiter geht durch, und Labels anzuklicken funktioniert ohnehin immer.
Alles, was beim Nachdenken fällt, wird ignoriert. „This seems polite, but…" legt nichts fest. Nur die festen Formulierungen legen fest, und genau deshalb reicht ein regelbasierter Parser. Verhörer fängt der unscharfe Labelabgleich ab, „in polite" wird also zu Impolite aufgelöst.
Einrichtung
pip install faster-whisper # local STT; first recording downloads the model (~39 MB)Der Browser braucht die Berechtigung für das Mikrofon. localhost gilt als sicherer Kontext.
Konfiguration
thinkaloud:
enabled: true
schema: politeness # scheme whose labels can be spoken (default: first radio)
stt: auto # faster_whisper | mock | auto
model: tiny.en # tiny.en is CPU real-time; base.en is sturdier
chunk_seconds: 6 # recording chunk length
require_spoken_label: true # nudge on Next without a committed label
# stems: # override accepted phrasing regexes (advanced)
# fillers: [um, uh, hmm, i guess, maybe]
# language: en| Option | Standard | Beschreibung |
|---|---|---|
stt | auto | faster_whisper (lokal), mock (Tests und Entwicklung) oder auto, was faster-whisper wählt und mit einer hilfreichen Meldung abbricht, wenn es fehlt. |
model | tiny.en | Beliebige faster-whisper-Modell-ID. |
chunk_seconds | 6 | Jeder Chunk ist eine vollständige Audiodatei. |
stems | eingebaut | Regex-Stämme für die akzeptierten Formulierungen; jeder erfasst die folgenden Wörter. |
fillers | um, uh, hmm, … | Lexikon für den Zögerzähler. |
require_spoken_label | true | Einmaliger Hinweis am Weiter-Knopf, wenn nichts festgelegt wurde. |
Was man bekommt
- Wortgetreue Begründungsströme, ausgerichtet auf jedes Paar aus (Annotator, Instanz), mit separat ausgewiesener Labelphrase. Das Transkript ohne die Festlegungsphrase ist die Begründung.
- Deterministische Zögersignale: Zahl der stillen Chunks und Zahl der Füllwörter über ein konfigurierbares Lexikon, mit Arithmetik statt Modellen berechnet.
- Eine Review-Seite unter
/thinkaloud/review(Admin) mit dem Transkript, dem per Stimme festgelegten Label, der Konfidenz und den Zögerstatistiken jeder Sitzung. - Freihändiges Annotieren als Nebeneffekt, samt echtem Gewinn an Barrierefreiheit und Entlastung bei RSI-Beschwerden.
Daten und API
Transkripte werden nach {output_annotation_dir}/thinkaloud/transcripts.jsonl geschrieben (nur anhängend, ein Datensatz pro Chunk).
| Endpunkt | Methode | Auth | Zweck |
|---|---|---|---|
/thinkaloud/api/chunk | POST | Sitzung | Multipart-Audiochunk → Transkript + Erkennung |
/thinkaloud/api/text | POST | Sitzung | Textchunk (Weg ohne Audio) |
/thinkaloud/api/state | GET | Sitzung | Sitzungsaggregat für eine Instanz |
/thinkaloud/review | GET | Admin | Seite zur Transkriptdurchsicht |
/thinkaloud/api/export | GET | Admin | Alle Sitzungen als JSON |
Designhinweise
- Der Parser läuft über ein gleitendes Fenster der letzten beiden Chunks, sodass auch Formulierungen erkannt werden, die über eine Chunkgrenze hinweggehen.
- Der Labelabgleich läuft zuerst exakt, dann über Präfixe, dann über
difflibmit Schwelle 0,8, wobei exakte Treffer bevorzugt werden. "polite" kollidiert nie unscharf mit "Impolite". - Ein weiteres STT-Backend ergänzt man, indem man
STTBackendinpotato/thinkaloud/stt.pyableitet und es increate_sttregistriert.
Weiterführende Informationen
- Prozessbelohnungsannotation — die Gedankenketten-Fläche auf der Modellseite
- Verhaltens-Tracking — Zeitanalysen
- Qualitätskontrolle
- Quelldokumentation