Modo Think-Aloud
Os anotadores falam enquanto trabalham e o Potato guarda a transcrição literal como justificativa. A conversão de fala em texto roda inteiramente na máquina local com o faster-whisper, então nenhum áudio sai dali e não há API na nuvem nem LLM no caminho.
Novo na v2.7.0
Antes dos LLMs, o padrão-ouro para entender um julgamento era o protocolo de pensar em voz alta, e ele nunca sobreviveu ao contato com as ferramentas de anotação. O Modo Think-Aloud deixa os anotadores simplesmente falarem enquanto trabalham.
A transcrição literal fica guardada como justificativa, deliberadamente sem resumo, porque parafrasear um protocolo de pensar em voz alta contamina justamente o artefato que você está tentando coletar. Os rótulos podem ser confirmados por voz com frases fixas detectadas por um analisador baseado em regras, sem nenhum LLM em nenhuma parte do caminho.
A conversão de fala em texto roda inteiramente na máquina local via faster-whisper, que é tempo real em CPU no modelo tiny.en, de 39 MB. O áudio nunca sai da máquina, não há API na nuvem para chamar nem conta por token para pagar.
Observação: o Think-Aloud transcreve os seus anotadores. Se o que você quer é anotar transcrições que já tem, vindas do Whisper, de uma API de ASR na nuvem ou de legendas baixadas, isso é outro recurso: veja Formatos de transcrição. Os dois se confundem porque ambos envolvem o Whisper.

Registrando a cadeia de raciocínio humana
A ideia não é apenas coletar justificativas. O Think-Aloud captura como uma pessoa de fato raciocina até um rótulo, para você poder comparar essa cadeia de raciocínio humana com a cadeia de raciocínio de um modelo no mesmo item.
A anotação de recompensa de processo do Potato segmenta como um modelo raciocina, passo a passo. O Think-Aloud captura como uma pessoa faz isso. Ambas são superfícies de captura, e é ao colocá-las lado a lado no mesmo item que aparecem as divergências interessantes.
Como funciona
- O anotador toca em 🎤 Pensar em voz alta e fala à vontade.
- O áudio é capturado em blocos completos de seis segundos e transcrito localmente.
- Para confirmar um rótulo por voz, ele usa uma das frases aceitas:
- "I label this Polite" / "I'd call it neutral"
- "My answer is impolite"
- "Final answer: polite" / "I go with neutral"
- A detecção seleciona automaticamente a opção correspondente na interface, o fluxo normal de gravação é disparado e a pílula confirma: Ouvido: Impolite ✓. Dizer uma frase nova depois muda o rótulo, então vale a última confirmação.
- Com
require_spoken_label: true, apertar Próximo sem um rótulo confirmado dispara um lembrete único mostrando a frase esperada. Um segundo Próximo passa direto, e clicar nos rótulos sempre funciona.
Tudo o que é dito enquanto a pessoa pensa é ignorado. "This seems polite, but…" não confirma nada. Só as frases fixas confirmam, e é isso que faz um analisador baseado em regras ser suficiente. Os erros de audição são absorvidos pela correspondência aproximada de rótulos, então "in polite" resolve para Impolite.
Instalação
pip install faster-whisper # local STT; first recording downloads the model (~39 MB)O navegador precisa de permissão de microfone. localhost conta como contexto seguro.
Configuração
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| Opção | Padrão | Descrição |
|---|---|---|
stt | auto | faster_whisper (local), mock (testes e desenvolvimento) ou auto, que escolhe o faster-whisper e dá um erro explicativo se ele não estiver instalado. |
model | tiny.en | Qualquer id de modelo do faster-whisper. |
chunk_seconds | 6 | Cada bloco é um arquivo de áudio completo. |
stems | embutidos | Radicais de regex para as frases aceitas; cada um captura as palavras seguintes. |
fillers | um, uh, hmm, … | Léxico para o contador de hesitações. |
require_spoken_label | true | Lembrete único no botão Próximo quando nada foi confirmado. |
O que você obtém
- Fluxos de justificativa literais alinhados a cada par (anotador, instância), com a frase do rótulo separada. A transcrição menos a frase de confirmação é a justificativa.
- Sinais determinísticos de hesitação: contagem de blocos em silêncio e contagem de palavras de preenchimento sobre um léxico configurável, calculadas por aritmética e não por modelos.
- Uma página de revisão em
/thinkaloud/review(administrador) com a transcrição de cada sessão, o rótulo confirmado por voz, a confiança e as estatísticas de hesitação. - Anotação sem as mãos como efeito colateral, incluindo acessibilidade real e alívio de LER.
Dados e API
As transcrições ficam em {output_annotation_dir}/thinkaloud/transcripts.jsonl (somente acréscimo, um registro por bloco).
| Endpoint | Método | Autenticação | Finalidade |
|---|---|---|---|
/thinkaloud/api/chunk | POST | sessão | Bloco de áudio multipart → transcrição + detecção |
/thinkaloud/api/text | POST | sessão | Bloco de texto (caminho sem áudio) |
/thinkaloud/api/state | GET | sessão | Agregado da sessão para uma instância |
/thinkaloud/review | GET | administrador | Página de revisão das transcrições |
/thinkaloud/api/export | GET | administrador | Todas as sessões em JSON |
Notas de projeto
- O analisador roda sobre uma janela móvel dos dois últimos blocos, então frases que cruzam a fronteira entre blocos ainda são detectadas.
- A correspondência de rótulos é exata, depois por prefixo, depois
difflibcom limiar de 0.8, dando preferência às correspondências exatas. "polite" nunca colide por aproximação com "Impolite". - Adicionar um backend de STT significa criar uma subclasse de
STTBackendempotato/thinkaloud/stt.pye registrá-la emcreate_stt.
Leitura adicional
- Anotação de recompensa de processo — a superfície de cadeia de raciocínio do lado do modelo
- Rastreamento comportamental — análise de tempos
- Controle de qualidade
- Documentação de origem