- Transcrever uma gravação com
/audio/transcriptions - Pedir marcações de tempo, que nem todo modelo entrega
- Extrair decisões e itens de ação contra um schema
- Lidar com o fato de a transcrição nunca dizer quem está falando
- Dividir uma gravação longa sem perder o relógio
Configuração
Você precisa do Python 3.9 ou superior, do pacoterequests e de uma chave da API Venice. Veja Gerando uma Chave de API caso ainda não tenha uma. Traga qualquer gravação de uma conversa, em wav, mp3, m4a, flac, aac, mp4, ogg ou webm.
1. Transcreva a gravação
/audio/transcriptions é compatível com OpenAI e aceita um upload multipart. O arquivo tem que ser uma parte de arquivo de verdade, já que base64 não é aceito nesse endpoint.
Chame
GET /models?type=asr para a lista atual, em vez de fixar esses valores, já que o catálogo muda.
2. Peça marcações de tempo
Timestamps são o que torna as notas verificáveis, então essa é a escolha que mais importa, e o padrão não vai te dar isso:timestamps é um objeto em vez de uma lista, e a chave dentro dele depende do modelo. O Whisper agrupa por frase, o Scribe por palavra:
3. Extraia as notas
Descreva as notas que você quer como um schema, para que o resultado seja um registro em vez de prosa que você tem que parsear:disable_thinking está aí pela mesma razão que cabe em qualquer passo de extração. O schema já decide o formato da resposta, então pagar um modelo de raciocínio para deliberar sobre isso não compra nada e faz com que o custo de cada execução seja diferente do anterior. Extraindo Dados Estruturados de Documentos mede essa diferença.
Rode em uma daily de cinquenta e três segundos e as notas voltam com o relógio anexado:
spoken_at é real. Pule para 19,6 segundos e você ouve a frase que criou a tarefa.
Dê ao modelo linhas sem tempos e todo
spoken_at volta como 0. O campo é obrigatório, o modelo não tem nada para colocar nele, e um campo obrigatório é uma instrução para produzir algo, não um convite para dizer que não sabe. Vale lembrar disso sempre que um schema parecer estar funcionando: o formato estar certo não é a mesma coisa que os valores estarem certos.4. Ninguém está identificado
Duas coisas nessa saída estão erradas, e ambas vêm do mesmo lugar. A dona do rollout éMay. O nome dela é Mei. Reconhecimento de fala é menos confiável em substantivos próprios, e nomes são exatamente o que a atribuição precisa, então essa é a falha que você deve esperar em vez da azarada.
O último item ficou como unassigned, embora alguém claramente tenha assumido. A linha foi “I’ll ask legal today and report back tomorrow”, e a transcrição registra as palavras sem registrar quem as disse.
Esse segundo caso não é um bug que você consiga consertar. Nenhum modelo de transcrição da Venice faz diarização, então não existe um campo speaker para consultar em qualquer um deles. A transcrição é um fluxo de texto sem voz, e tarefas só podem ser atribuídas quando um nome é dito em voz alta, como em “Tomas, can you put the deprecation notice in the changelog”.
O primeiro caso você pode consertar, contando ao modelo quem estava na sala:
May resolve para Mei Lin porque o modelo agora tem uma lista curta para casar, e os responsáveis têm nomes completos que seu tracker de tarefas pode buscar. O terceiro item continua sem responsável, corretamente. Uma lista de participantes corrige uma escuta errada, e nada recupera informação que a gravação nunca carregou.
5. Maior do que uma requisição
Uploads são limitados a 25 MB, o que chega mais rápido do que você imagina para áudio não comprimido, e uma reunião longa vale a pena dividir de qualquer forma, para que uma falha não custe a transcrição inteira. Para arquivos WAV a biblioteca padrão basta, sem precisar de ffmpeg:offset em timed_lines:
awesome. para preencher a lacuna no fim do chunk, e transformou uma linha em três.
As marcações ainda estão corretas, e o passo de notas ainda encontra a tarefa. O que ele perde é o nome, que é aquilo de que a atribuição depende.
Formatos comprimidos não podem ser fatiados assim, já que você não consegue cortar um MP3 em uma fronteira de frame com a biblioteca padrão. Use ffmpeg para esses:
Juntando tudo
Próximos passos
- Publique os itens de ação no seu tracker, usando os nomes dos responsáveis que a lista de participantes resolveu.
- Leia o resumo em voz alta com Text to Speech para quem perdeu a call.
- Faça busca em reuniões passadas armazenando transcrições com Embeddings.
- Deixe um agente decidir quando transcrever e quando responder a partir das notas que já tem, com Construindo um Agente que Usa Ferramentas com Function Calling.
Speech-to-Text
Referência para o endpoint de transcrições.
Extraindo Dados Estruturados de Documentos
A mesma extração orientada a schema, aplicada a arquivos.
Respostas Estruturadas
Como o json_schema restringe uma completion.
Clonagem de Voz
Dê ao resumo uma voz própria.