Function calling em assistentes de voz: como a gestão de estado reduz as alucinações


André Martin
André Martin
28 de agosto de 2025  - 6 min de leitura
Function calling em assistentes de voz: como a gestão de estado reduz as alucinações

Resumo

Modelos de linguagem grandes podem alucinar parâmetros técnicos, como IDs de produtos ou tarifas, durante function calls, especialmente quando vários valores precisam ser enviados ao mesmo tempo. Em fluxos de pedido complexos, isso pode gerar solicitações de backend incorretas ou inválidas. Uma abordagem muito mais confiável é coletar as decisões do usuário passo a passo e armazenar cada escolha em um estado persistente antes de executar a transação final. A VoiceBooker suporta essa abordagem com gestão de estado integrada e, assim, permite criar bots de serviço robustos, altamente confiáveis e com baixa taxa de erro.

Introdução

Assistentes telefônicos complexos para centrais de suporte muitas vezes precisam buscar dados em sistemas de backend, identificar informações de clientes ou executar transações em uma conta de usuário. Assistentes de voz modernos baseados em LLM permitem uma conversa natural e podem interagir com sistemas externos por meio de function calling.

Na prática, porém, um desafio aparece rapidamente: a confiabilidade das function calls depende fortemente de como as informações são coletadas e processadas durante o diálogo.

O problema: parâmetros e IDs alucinados

Considere um exemplo típico do setor de telecomunicações. Um cliente deseja contratar um plano móvel. O fluxo de pedido consiste em várias decisões:

  1. Escolher entre pré-pago e pós-pago
  2. Se pré-pago for escolhido: selecionar um pacote de minutos
  3. Escolher um pacote de SMS

Cada uma dessas opções possui um ID técnico único no backend. Por exemplo, os produtos disponíveis podem ser modelados da seguinte forma:

Opção ID
Pré-pago 101
Pós-pago 102
100 minutos 201
500 minutos 202
100 SMS 301
500 SMS 302

Uma abordagem ingênua é deixar que o assistente de voz colete primeiro todas as informações necessárias e depois execute uma única function call:

{
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

À primeira vista, essa abordagem parece razoável. Na prática, porém, ela frequentemente cria problemas.

Modelos de linguagem grandes tendem a alucinar. Isso significa que eles podem inventar informações que não existem de fato. Isso se torna especialmente crítico quando IDs técnicos estão envolvidos. Se um modelo precisar preencher vários parâmetros ao mesmo tempo, a probabilidade de confundir valores ou até inventar um deles aumenta.

Em vez de usar o ID válido 202, por exemplo, o modelo pode de repente gerar um ID inexistente como 205. Quanto mais opções e parâmetros precisam ser processados ao mesmo tempo, maior esse risco se torna.

Por que a complexidade cresce de forma exponencial

O problema de fundo é o tamanho do espaço de busca.

Se, por exemplo, existem dois tipos de produto, cinco pacotes de minutos e quatro pacotes de SMS, isso já resulta em:

2 × 5 × 4 = 40

combinações possíveis.

Em produtos reais, centenas ou milhares de combinações válidas podem surgir rapidamente. O modelo então não precisa apenas identificar a opção correta, mas também selecionar vários IDs corretos e combiná-los de forma consistente.

Esse tipo de complexidade combinatória aumenta significativamente a probabilidade de erros.

A melhor abordagem: coleta de informações baseada em estado

Uma estratégia muito mais robusta é coletar informações passo a passo e armazená-las em um estado central.

O diálogo pode seguir assim:

Passo 1: escolher o tipo de produto

{
  "product_type_id": 101
}

O valor é armazenado no estado.

Passo 2: escolher o pacote de minutos

{
  "minutes_package_id": 202
}

O novo valor também é armazenado no estado.

Passo 3: escolher o pacote de SMS

{
  "sms_package_id": 302
}

Esse valor também fica salvo no estado.

Em cada etapa, o assistente de voz precisa tomar apenas uma única decisão. Em vez de escolher entre todas as combinações possíveis de uma vez, ele se concentra em um conjunto limitado de opções por etapa.

Somente depois que todas as informações forem coletadas é que o commit final é executado:

{
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

Como todos os IDs já foram validados e armazenados previamente, o risco de alucinações cai drasticamente.

Por que essa abordagem é mais confiável

A principal vantagem está na redução da carga cognitiva para o modelo.

Com uma única function call contendo muitos parâmetros, o LLM precisa:

  • tomar várias decisões ao mesmo tempo
  • lembrar os IDs corretos
  • formar a combinação correta
  • retornar todos os valores em uma única etapa

Com a abordagem baseada em estado, por outro lado, o modelo precisa apenas:

  • tomar uma decisão
  • selecionar um ID
  • armazená-lo no estado

Isso reduz significativamente a probabilidade de erros. Em vez de um grande problema combinatório, surgem várias tarefas pequenas e muito mais simples.

VoiceBooker e gestão de estado integrada

A VoiceBooker apoia esse paradigma por meio de uma gestão de estado integrada.

Durante toda a conversa, há disponível um objeto JSON que pode ser lido e atualizado em cada etapa do diálogo. As informações já coletadas, portanto, permanecem disponíveis de forma persistente e não precisam ser reconstruídas pelo modelo.

Um estado típico poderia ser assim:

{
  "customer_id": "12345",
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

Cada nova decisão do usuário apenas amplia o estado existente. Somente quando todas as informações necessárias estiverem disponíveis é que a transação real é acionada.

Esse padrão leva a function calls significativamente mais confiáveis e minimiza alucinações em parâmetros técnicos.

Conclusão

Function calling é uma tecnologia central para assistentes de voz e de suporte modernos. O maior desafio, porém, não é a chamada da função em si, mas a obtenção confiável dos parâmetros necessários.

Quando vários IDs e decisões são processados ao mesmo tempo, a probabilidade de alucinações e function calls incorretas aumenta significativamente. Uma abordagem baseada em estado, na qual as informações são coletadas e armazenadas passo a passo, reduz bastante a complexidade.

Com a gestão de estado integrada da VoiceBooker, exatamente esse tipo de diálogo pode ser implementado de forma eficiente. IDs e outros parâmetros técnicos são armazenados com segurança no estado durante a conversa e podem então ser usados com confiabilidade para a transação final. O resultado são bots de serviço robustos, escaláveis e de alta qualidade, capazes de modelar de forma confiável até processos de negócio complexos.

Tags
Voice AIChamadas de funçãoGestão de estadoAlucinaçõesDesign de conversaTécnico