Pular para o conteúdo
Nebula Code Falar com a Nebula

Insights · Tecnologia

Por dentro da Lia: como construímos uma IA conversacional para saúde

Function calling, RAG, base de conhecimento médica curada e o que aprendemos atendendo pacientes de verdade com IA.

Conteúdo do artigo

No mês passado lançamos o Avizuaí e prometemos voltar com o "behind the scenes" da Lia, nossa IA conversacional. Este post é para quem se interessa pelos detalhes técnicos: como decidimos a arquitetura, o que aprendemos atendendo pacientes reais, e por que function calling se mostrou a aposta certa para o domínio da saúde.

Não é tutorial passo-a-passo — é o relato honesto das decisões que tomamos, o que funcionou de primeira e o que precisou ser reescrito. Se você está construindo IA para um domínio sensível como saúde, talvez ajude.

O problema: por que IA em saúde é difícil

Conversar com paciente parece tarefa simples para LLM. Mas o domínio tem armadilhas que aprendemos na marra:

  • Não pode inventar informação — orientar errado preparo de exame é prejuízo real
  • Precisa contextualizar — o paciente está falando de qual agendamento? Em qual unidade?
  • Tem que escalar bem — sentir quando o caso pede humano e ceder o turno sem fricção
  • Tom certo — nem robótico demais, nem amigo íntimo. Atendente profissional.
  • Custo — secretaria municipal não pode pagar Claude Opus por cada mensagem trivial

A arquitetura: dois modos, uma Lia

Construímos a Lia em dois modos que rodam sobre a mesma persona, configuráveis por aplicação:

Modo 1: pipeline com state machine

O caminho clássico: classifica intent por keywords (custo zero), extrai entidades por regex, engine de decisão escolhe próxima ação, LLM gera a resposta com prompt especializado por tipo de ação.

  • Vantagem — previsível, barato, fácil de debugar
  • Desvantagem — precisa de muito código de cola para casos novos
  • Quando usa — fluxos bem mapeados (consultar agendamento, FAQ comum)

Modo 2: agente com function calling

O LLM recebe um catálogo de tools, decide qual chamar, executa, recebe resultado, decide o próximo passo. Loop até a resposta final.

  • Vantagem — flexível, lida com casos compostos
  • Desvantagem — mais caro, menos previsível, pede limite de iterações
  • Quando usa — conversas mais abertas onde o paciente pede coisas em sequência

Cada secretaria escolhe o modo no painel admin via flag auto-resposta-tool-use-habilitada. Comparamos os dois em produção: o modo agente entrega 15-20% mais resoluções automáticas, ao custo de aproximadamente 3x mais tokens. A escolha depende do volume e do orçamento da secretaria.

As tools que a Lia tem na mochila

São três tools principais, descobertas automaticamente pelo ToolRegistry como Spring beans. Adicionar uma nova tool é criar uma classe e fazer ela implementar a interface — o catálogo se atualiza sozinho.

// Esquema simplificado da tool de agendamentos
@Component
public class ConsultarAgendamentosTool implements Tool {

  public String name() { return "consultar_agendamentos"; }

  public ToolSchema schema() { /* params: cpf, pedido, telefone */ }

  public ToolResult execute(ToolCall call) {
    // Busca em RegistroImportado por CPF/pedido/telefone
    return patientDataService.buscar(call.params());
  }
}
  • consultar_agendamentos — busca compromissos do paciente por CPF, pedido ou telefone
  • buscar_faq — consulta a base de conhecimento via embeddings (pgvector) com fallback Jaccard
  • escalar_para_humano — coloca a sessão na fila de operadores

RAG: a base de conhecimento médica

Conhecimento de saúde tem fonte: bula, protocolo clínico, instruções do fabricante do equipamento. A Lia não inventa — ela busca na base de conhecimento curada pela própria secretaria. O caminho:

Busca semântica com fallback

Primeira camada: embeddings com pgvector. Cada item da base é vetorizado por OpenAI text-embedding-3-small ou Ollama nomic-embed-text (a unidade escolhe). Cosine similarity puxa os top-K candidatos.

  • Fallback Jaccard — se embeddings desabilitado ou indisponível, cai para busca por tokens em cache de memória
  • Catálogo de exames — biblioteca global da Avizuaí com 152 exames curados (NHS, MedlinePlus, MS Brasil)
  • Atribuição obrigatória — cada item vem com fonte (OGL v3, domínio público) para compliance

Métricas do primeiro mês em produção

~60% Resolução só pela Lia
< 2s Tempo médio de resposta
5 Iterações máx (agente)

Os 60% que a Lia resolve sozinha são o número que mudou o jogo. Antes, todas essas perguntas chegavam no celular pessoal de algum servidor — agora ficam registradas, com hash chain, no Avizuaí. E os 40% que ela escala chegam ao operador com resumo estruturado da conversa.

O que daria conselho a quem está começando

Comece pelo pipeline, não pelo agente

State machine é chata, mas previsível. Quando seu pipeline cobre 80% dos casos, aí compensa adicionar o modo agente para os 20% restantes. Começar direto com agente é receita para conversas erráticas no início.

RAG não é magia — curadoria é

Embedding bom + base ruim = respostas ruins. Investimos meses construindo o catálogo de exames com fontes oficiais antes de ligar a busca semântica. Sem a curadoria, a Lia chutaria com confiança.

Function calling pede design das tools

O LLM só usa bem a tool se você descrever bem o que ela faz, quais parâmetros aceita, e o que retorna. Treine o schema como se fosse documentação de API pública — porque, para o LLM, é exatamente isso.

Limite as iterações

Sem limite máximo, agentes entram em loop. MAX_ITERACOES = 5 é um número conservador que escolhemos — ainda nenhum caso prático precisou de mais. Se chega no limite sem resolver, escala automático para humano.

Custos não são desprezíveis

Cada mensagem do paciente consome 1-3 chamadas LLM no modo agente. Prompt caching da Anthropic reduziu ~70% do custo — vale habilitar desde o dia 1. Para classificação simples, usar regex no pipeline poupa muito.

O segredo está nos detalhes

A diferença entre uma IA "ok" e uma IA realmente útil em produção não está no modelo — está nos detalhes: contexto de conversa (últimas 6 mensagens), saudação dinâmica (bom dia/boa tarde), tratamento de áudio com Whisper, escalação proativa quando sentimento fica negativo, resumo de handoff para o operador. Nada disso é "IA". É engenharia de software com IA no meio.

Para onde vamos

Próximos passos na Lia:

  • Tool de pré-agendamento — o paciente pode marcar consulta direto na conversa
  • Detecção de urgência clínica — escalar imediatamente em sintomas críticos
  • Voz — resposta em áudio para pacientes com baixa alfabetização

Construir IA conversacional para saúde pública é desafiador porque o erro custa caro, o tom certo é frágil e o orçamento é apertado. Mas é exatamente onde a tecnologia pode liberar a equipe humana para o que realmente importa: cuidar das pessoas que mais precisam.

Quer ver a Lia funcionando?

Solicite uma demonstração do Avizuaí e converse com a Lia em ambiente de teste. Vai entender em 5 minutos por que estamos animados com o que ela já entrega.

Conhecer o Avizuaí Fale conosco

Quer conversar sobre IA em produção?

A Lia atende pacientes todos os dias. Conte o seu cenário — e o que você precisa que a IA resolva.

Falar com a Nebula