Como construímos um agente de IA para recrutamento com LangGraph e Claude
Um recrutador digita "liste as vagas abertas em tecnologia com mais de 10 candidatos" e o agente entende, executa, e responde em linguagem natural. Construir isso em produção é muito mais complexo do que parece.
O cliente tinha um ATS (Applicant Tracking System) robusto mas subutilizado — os recrutadores passavam mais tempo navegando menus do que recrutando. A ideia era simples: e se eles pudessem simplesmente conversar com o sistema?
O que parece simples esconde uma série de desafios técnicos reais: latência de LLMs, operações que demoram minutos, múltiplos usuários simultâneos, isolamento entre tenants, e a necessidade de não bloquear a interface enquanto o agente "pensa".
Por que LangGraph e não LangChain puro
LangChain é ótimo para chains simples — entrada, processamento, saída. Mas agentes reais precisam de estado, de decisões condicionais, de loops e de recuperação de erros. LangGraph modela o agente como um grafo de estados, o que permite fluxos muito mais complexos e controlados.
- Cada nó do grafo é uma ação atômica: buscar vagas, avaliar candidatos, criar job description
- Edges condicionais definem qual caminho tomar com base na intenção detectada
- Estado persistido entre mensagens da mesma sessão
- Retry automático com backoff exponencial em falhas de LLM
O problema da latência: RabbitMQ como solução
LLMs são lentos. Uma operação de "avaliar 50 candidatos" pode levar 3-4 minutos. Se isso fosse síncrono, o usuário ficaria esperando com a tela travada. A solução foi desacoplar completamente: a API recebe o comando, coloca na fila do RabbitMQ com prioridade e retorna imediatamente. Um worker consome a fila e envia o progresso via callback HTTP ou WebSocket.
Sistema de prioridades
Busca de candidatos (prioridade 10), criação de vagas (9), operações de fundo (8), avaliações em lote (5). Operações urgentes nunca ficam presas atrás de jobs lentos.
Multi-LLM: fallback automático entre Claude, Gemini e GPT
Depender de um único provedor de LLM em produção é um risco operacional. Implementamos uma camada de abstração que tenta Claude primeiro (melhor raciocínio), cai para Gemini em caso de timeout ou erro de rate limit, e tem GPT como última alternativa. O recrutador nunca vê essa camada — recebe a resposta independente de qual modelo rodou.
Voice-first: Google Speech-to-Text + TTS
Uma das features mais usadas foi a entrada por voz. O recrutador fala o comando, o Twilio captura o áudio, o Google Speech-to-Text transcreve, o agente processa e responde com TTS. O ciclo completo — da fala à resposta falada — fica abaixo de 4 segundos na maioria dos casos.
Quer implementar IA conversacional no seu produto ou processo? Posso ajudar a desenhar a arquitetura certa.
Agendar diagnóstico gratuito