Pular para o conteúdo

Como otimizar a latência para Conversational AI?

A latência é o que diferencia boas aplicações de Conversational AI das excelentes

Diagram of a speech processing system showing data flow from user input to output speech, including components like telephone network, ASR, VAD, LLM, TTS, and latency indicators.

Na maioria das aplicações, a latência é uma preocupação leve. Mas, para Conversational AI, é ela que separa boas aplicações das ótimas.

Para começar, o objetivo da Conversational AI é bastante ambicioso: oferecer a mesma sensação, naturalidade e voz de uma conversa humana, superando o humano em inteligência. Para isso, a aplicação precisa conversar sem longas pausas em silêncio. Caso contrário, o realismo se perde.

O desafio da latência na Conversational AI é ainda maior por ser composta por várias etapas. Conversational AI é uma sequência de processos intermediários, todos de ponta em suas áreas. Cada um desses processos adiciona um pouco de latência.

Como empresa de voz generativa, passamos muito tempo estudando como reduzir a latência em Conversational AI. Hoje, queremos compartilhar o que aprendemos, na esperança de ajudar quem deseja criar aplicações de Conversational AI.

Os Quatro Componentes Principais

Toda aplicação de Conversational AI envolve pelo menos quatro etapas: speech-to-text, turn-taking, processamento de texto (ou seja, LLMs) e text-to-speech. Mesmo sendo executadas em paralelo, cada etapa ainda contribui com um pouco de latência.

Vale destacar que a equação de latência da Conversational AI é única. Muitos problemas de latência em processos podem ser reduzidos a um único gargalo. Por exemplo, quando um site faz uma requisição ao banco de dados, a latência de rede é o principal fator, com pouca influência da latência interna do backend. Já na Conversational AI, os componentes de latência não variam tanto. Eles são desiguais, mas cada um contribui de forma semelhante. Ou seja, a latência é a soma das partes.

Reconhecimento Automático de Fala

O “Ouvido” do Sistema

O reconhecimento automático de fala (ASR)—também chamado de speech-to-text (STT)—é o processo de converter áudio falado em texto escrito.

A latência do ASR não é o tempo para gerar o texto, já que o processo de speech-to-text roda em segundo plano enquanto o usuário fala. Na verdade, a latência é o tempo entre o fim da fala e o fim da geração do texto.

Flowchart showing user input speech processed by ASR system.

Por isso, intervalos curtos ou longos de fala podem ter latências semelhantes no ASR. A latência pode variar conforme a implementação do ASR (em alguns casos, não há latência de rede, pois o modelo roda no próprio navegador, como no Chrome/Chromium). O modelo open source padrão, Whisper, adiciona mais de 300ms de latência. Nossa implementação personalizada adiciona menos de 100ms.

Turn-Taking / Interrupção

O “Instinto” do Sistema

Turn-taking / Interrupção (TTI) é um processo intermediário que determina quando o usuário terminou de falar. O modelo por trás disso é chamado de Voice Activity Detector (ou VAD).

O Turn-Taking envolve um conjunto complexo de regras. Uma fala curta (por exemplo, “uh-huh”) não deve iniciar uma nova vez; caso contrário, a conversa ficaria muito cortada. O sistema precisa avaliar quando o usuário realmente quer chamar a atenção do modelo e também quando terminou de transmitir sua ideia.

Um bom VAD não sinaliza uma nova vez sempre que detecta silêncio. Há silêncio entre palavras (e frases), e o modelo precisa ter certeza de que o usuário realmente terminou de falar. Para garantir isso, ele busca um limiar de silêncio (ou mais precisamente, ausência de fala). Esse processo gera um pequeno atraso, contribuindo para a latência total percebida pelo usuário.

Flowchart showing the process of speech recognition and language modeling, with steps including input speech, ASR, VAD, and LLM.

Tecnicamente, se todos os outros componentes da Conversational AI tivessem zero de latência, a latência do TTI seria até positiva. Humanos também fazem uma pausa antes de responder. Uma máquina que faz o mesmo deixa a interação mais realista. Mas, como os outros componentes já têm latência, o ideal é que o TTI seja o mais rápido possível.

Processamento de Texto

O Cérebro do Sistema

Depois, o sistema precisa gerar uma resposta. Hoje, isso normalmente é feito com um Large Language Model (LLM), como o GPT-4 ou Gemini Flash 1.5.

A escolha do modelo de linguagem faz muita diferença. Modelos como o Gemini Flash 1.5 são muito rápidos—gerando respostas em menos de 350ms. Modelos mais robustos, que lidam com perguntas mais complexas—como variantes do GPT-4 e Claude—podem levar de 700ms a 1000ms.Escolher o modelo certo costuma ser a forma mais simples de reduzir a latência ao otimizar um processo de Conversational AI.

Porém, a latência do LLM é o tempo que ele leva para começar a gerar tokens. Esses tokens podem ser enviados imediatamente para o próximo processo de text-to-speech . Como o text-to-speech é limitado pelo ritmo natural da fala humana, o LLM sempre é mais rápido—o que importa mesmo é a latência do primeiro token (ou seja, o tempo até o primeiro byte).

Flowchart of speech processing system showing input speech, ASR, VAD, LLM, and TTS components with data flow and latency indicated.

Outros fatores também afetam a latência do LLM além da escolha do modelo. Isso inclui o tamanho do prompt e da base de conhecimento. Quanto maior qualquer um deles, maior a latência. Em resumo: quanto mais o LLM precisa considerar, mais tempo leva. Por isso, é importante equilibrar a quantidade de contexto sem sobrecarregar o modelo.

Text to Speech

A “Boca” do Sistema

O último componente da Conversational AI é o text-to-speech (TTS). A latência do text-to-speech é o tempo para começar a falar após receber os tokens do processamento de texto. Só isso—como os tokens seguintes chegam mais rápido que a fala humana, a latência do text-to-speech é basicamente o tempo até o primeiro byte.

Diagram of a speech processing system showing input speech, ASR, VAD, LLM, TTS, and output speech with data flow and latency indicators.

Antes, o text-to-speech era bem mais lento, levando até 2-3s para gerar a fala. Mas, modelos de ponta como nosso motor Turbo conseguem gerar fala com apenas 300ms de latência e o novo motor Flash TTS é ainda mais rápido. O Flash tem tempo de modelo de 75ms e pode alcançar 135ms de latência de áudio até o primeiro byte, o melhor resultado do mercado (precisamos nos orgulhar um pouco!).

Outros Fatores

Além dos quatro componentes, há outros fatores que também contribuem para a latência total da Conversational AI.

Latência de Rede

Sempre haverá alguma latência ao enviar dados de um lugar para outro. Para algumas aplicações de Conversational AI, os processos de ASR, TTI, LLM e TTS devem, idealmente, estar no mesmo local, assim a única fonte relevante de latência de rede é o caminho entre o usuário e o sistema.Isso nos dá uma vantagem em latência, já que economizamos duas chamadas de servidor por termos nosso próprio TTS e uma solução interna de transcrição.

Diagram of a speech processing system showing input speech, ASR, VAD, LLM, TTS, and output speech with latency and network latency indicators.

Chamada de Funções

Muitas aplicações de Conversational AI existem para acionar funções (ou seja, interagir com ferramentas e serviços). Por exemplo, posso pedir verbalmente para a IA checar o clima. Isso exige chamadas adicionais de API feitas na camada de processamento de texto, o que pode aumentar bastante a latência dependendo da necessidade.

Por exemplo, se eu quiser pedir uma pizza por voz, pode ser necessário fazer várias chamadas de API, algumas com atrasos maiores (como processar um cartão de crédito).

Diagram of a speech processing system showing input speech, ASR, VAD, LLM/function calling, TTS, and output speech with data flow and latency indicated.

Mas um sistema de Conversational AI pode contornar esses atrasos pedindo para o LLM responder ao usuário antes de terminar a chamada de função (por exemplo: “Vou conferir o clima para você”). Isso simula uma conversa real e mantém o usuário engajado.

Flowchart of a speech synthesis system showing user input, system processing, and output speech, with components like ASR, VAD, TTS, and LLM.

Esses padrões assíncronos normalmente usam webhooks para evitar requisições demoradas.

Telefonia

Outro recurso comum em plataformas de Conversational AI é permitir que o usuário ligue por telefone (ou, em alguns casos, que o sistema faça ligações em nome do usuário). A telefonia adiciona mais latência—e essa latência pode variar bastante conforme a localização.

Diagram of a speech processing system showing data flow and latency between components.

Como base, a telefonia adiciona cerca de 200ms de latência se for na mesma região. Para ligações globais (por exemplo, Ásia → EUA), o tempo de viagem pode aumentar bastante, chegando a ~500ms. Isso pode ser comum se os usuários tiverem números de telefone fora da região onde estão, forçando uma conexão com as redes telefônicas do país de origem.

Considerações Finais

Esperamos que esse panorama sobre agentes de IA conversacional tenha sido interessante. Em resumo, as aplicações devem buscar latência abaixo de um segundo. Isso normalmente é possível escolhendo o LLM certo para a tarefa. Também é importante interagir com o usuário sempre que processos mais complexos estiverem rodando em segundo plano, para evitar longas pausas.

No fim das contas, o objetivo é criar realismo. O usuário precisa sentir a facilidade de conversar com um humano, aproveitando os benefícios de um programa de computador. Ao otimizar cada etapa, isso já é possível.

Na ElevenLabs, estamos otimizando cada parte do sistema de agentes de voz IA conversacionais com nossos modelos de STT e TTS de última geração. Ao trabalhar em cada etapa do processo, conseguimos criar conversas mais naturais. Essa visão integrada permite reduzir ainda mais a latência—até mesmo 1ms—em cada ponto do fluxo.

Explore artigos da equipe ElevenLabs

ElevenLabs

Crie com o áudio IA da mais alta qualidade