Pedi a um LLM para corrigir nomes escritos errado. Ele renomeou o produto.
Meu clipador de IA corrige nomes próprios nas transcrições. Num vídeo, trocou o nome de um modelo desconhecido pelo de um concorrente real. Por que e como resolvi.
28 de setembro de 2026
Criado: 28 de setembro de 2026 · Atualizado: 28 de setembro de 2026
Katto é um clipador de vídeo com IA. Você joga um vídeo longo lá dentro, ele corta os melhores momentos em shorts verticais e escreve as legendas para você. Desenvolvo tudo sozinho, em público. Este texto é sobre uma funcionalidade que anuncio na página de preços e que peguei fazendo, silenciosamente, o oposto do seu trabalho.
O problema que eu queria resolver
A conversão de fala em texto é muito boa com palavras e muito ruim com nomes. O Whisper ouve uma marca que nunca viu e escreve foneticamente. "Trump" sai como "trompe". "Suárez" sai como "Suares". "ChatGPT" sai como "chatgépété". Num vídeo francês sobre futebol, já contei noventa e oito casos desses numa única transcrição.
Legendas com nomes destruídos passam descuido, e elas são a parte mais visível de um clipe. Então adicionei uma etapa de correção: depois da transcrição, o texto vai para um modelo de linguagem pequeno com uma única instrução, encontrar nomes próprios que foram escritos foneticamente e corrigir a grafia. Custa cerca de um centavo por vídeo. Corrigiu as noventa e oito.
O que de fato foi entregue
Na semana passada, um usuário recortou um vídeo em francês sobre modelos de linguagem grandes. O apresentador falava sem parar de um modelo chamado JEV. O Whisper ouviu e escreveu "Jev", que é próximo o suficiente para ninguém estranhar.
Os clipes saíram com os títulos "Por que o Jamba é superestimado" e "Jamba: revolução e superestimado ao mesmo tempo". As legendas diziam Jamba. As descrições diziam Jamba.
Jamba é um modelo de linguagem grande de verdade, feito pela AI21. Só não é o que aparece no vídeo.
Fui ver o que o pipeline tinha armazenado. A transcrição arquivada dizia "Jev" duas vezes e "Jamba" zero vez. Todas as etapas seguintes diziam "Jamba" e nunca "Jev": os candidatos pontuados, os metadados dos clipes, o pool de clipes, vinte e quatro ocorrências no total. A transcrição estava certa. A coisa que eu adicionei para protegê-la é que a quebrou.
Por que o modelo fez isso
Ele fez exatamente o que um assistente prestativo faz. O vídeo é sobre modelos de linguagem. "Jev" não é um modelo que ele conhece. "Jamba" é um modelo que ele conhece, e os dois não estão tão longe assim se você não olhar com atenção. No contexto, trocar um pelo outro parece uma correção, não uma invenção.
Esse é o modo de falha sobre o qual ninguém te avisa nesse tipo de tarefa. Um corretor ortográfico que não reconhece uma palavra deixa ela em paz. Um modelo de linguagem que não reconhece uma palavra busca a palavra mais próxima que ele reconhece, e quanto mais conhecimento de domínio ele tem, mais confiante e mais errada essa busca fica. Meu corretor era pior com nomes raros justamente porque era bom com os comuns.
A parte que doeu
Eu já tinha pensado nisso. O prompt dizia, em maiúsculas:
Corrija APENAS a grafia e o uso de maiúsculas. NUNCA substitua um nome por um nome DIFERENTE. Inventar um nome plausível mas errado é PIOR do que deixar um nome incomum sem alteração. […] NÃO tente adivinhar um nome mais conhecido a partir do contexto.
Três frases, sem ambiguidade, escritas especificamente para evitar o que aconteceu. O modelo leu e renomeou o produto de qualquer forma.
Não acho que o prompt estivesse mal escrito, e já não acho que um prompt melhor teria ajudado. Pedir a um modelo que não faça aquilo a que ele é inclinado é um pedido, não uma restrição. Funciona na maior parte das vezes, o que é pior do que nunca funcionar, porque você para de verificar.
O que fiz no lugar
A regra saiu do prompt e foi para o código. O modelo continua propondo correções; agora uma função decide se cada uma é uma correção de grafia ou uma renomeação, e descarta silenciosamente as renomeações.
O teste é deliberadamente tosco: remove maiúsculas e acentos das duas strings e mede quanto do original sobrevive na substituição. Acima de 0.6, é o mesmo nome escrito de outra forma. Abaixo, é outro nome.
- 0.90 · rousse peter → rouspéter · mantido
- 0.83 · Suares → Suárez · mantido
- 0.82 · chatgépété → ChatGPT · mantido
- 0.73 · trompe → Trump · mantido
- 0.53 · nouillène → Nguyen · descartado
- 0.31 · mistral → Gemini · descartado
- 0.25 · jev → Jamba · descartado
Todas as correções do meu conjunto de teste sobrevivem. Algumas correções legítimas não vão: a quinta linha é um caso real. Um francês falando "Nguyen" é ouvido como "nouillène", as duas strings quase não têm nada em comum depois que você tira os acentos, e a proteção agora joga essa correção no lixo. O mesmo vai acontecer com nomes japoneses romanizados e com siglas ditas letra por letra em outro idioma.
Foi o lado que escolhi. Um nome estranho deixado como está é visível, e o leitor consegue deduzir o que era. Um nome errado não é visível, e ninguém consegue. As rejeições ficam registradas com as duas strings, porque uma rejeição significa que o modelo acabou de tentar renomear algo, e vale a pena ver isso.
As lições
Uma regra que o modelo pode ignorar não é uma regra. Se uma restrição importa, o lugar dela é no código que roda depois do modelo, não num parágrafo que o modelo lê. Prompts expressam intenção. Eles não a garantem.
Olhe a direção da correção, não só a existência dela. Eu tinha métricas dessa etapa: quantas correções ela fazia por vídeo. Noventa e oito parecia um número saudável. Nada media se uma correção aproximava o texto da verdade ou o afastava dela, e uma correção ruim é indistinguível de uma boa se tudo o que você conta é o total.
Um pipeline que armazena a entrada e entrega a saída pode mentir para você duas vezes. A transcrição arquivada dizia "Jev" enquanto todos os clipes entregues diziam "Jamba". Se eu tivesse lido só o arquivo, teria concluído que o pipeline estava bem. A verificação que importa é a do que saiu pela porta.
A confiança faz parte da falha. Um corretor que deixa um nome desconhecido em paz produz uma estranheza visível e inofensiva. Um que substitui produz um texto limpo, fluente e errado que ninguém questiona, inclusive eu, até a pessoa que fez o vídeo ler as próprias legendas.
A proteção entrou em produção no mesmo dia. Se você recortar um vídeo sobre algo obscuro e o Katto deixar um nome incomum exatamente como o ouviu, agora isso é intencional.
<<>>Artigos relacionados
Pronto para transformar seus vídeos em clipes virais?
O Katto corta, legenda e reenquadra automaticamente seus vídeos longos em conteúdo de formato curto.
Experimente o Katto grátis →