Projetos
IA Generativa · Tool Calling · RAG · FAISS

UCBvet — Copiloto de Vendas com IA

Assistente conversacional para equipes de inseminação bovina: o LLM decide autonomamente qual ferramenta usar — banco de dados, base de conhecimento técnica ou scoring de fazenda — e encadeia múltiplas consultas em um único turno, respondendo em linguagem natural com streaming em tempo real.

Ano 2025 Papel Desenvolvimento de IA Status Concluído
Contexto

O problema

Numa empresa de protocolos de inseminação artificial, vendedores e técnicos precisam de respostas rápidas: histórico de visitas, vacas com bom escore corporal, touros com maior taxa de prenhez, protocolos mais vendidos por região. Esses dados ficam espalhados entre planilhas, PDFs técnicos e um banco de dados — consultá-los manualmente, no meio de uma visita a campo, é lento e atrapalha a venda.

O objetivo foi dar a essa equipe um copiloto que responda em linguagem natural, cruze dados estruturados e documentos técnicos, calcule o potencial de cada cliente e ainda transcreva voz — tudo sem abrir planilha nenhuma.

Solução

Como resolvi

Construí um assistente com Tool Calling estruturado via Groq Function Calling API. Em vez de detectar intenções com regex (frágil e limitado), o próprio LLM declara qual ferramenta precisa, com argumentos validados por JSON Schema — e pode encadear até 5 ferramentas em sequência no mesmo turno.

Ferramenta 1 — query_database: o LLM gera SQL SQLite válido e consulta as 8 tabelas da operação (fazendas, vacas, vendas, visitas, resultados de inseminação). A resposta vem tabulada e o LLM transforma em linguagem natural com análise.

Ferramenta 2 — search_knowledge_base: busca semântica em documentos técnicos indexados com FAISS e embeddings all-MiniLM-L6-v2 (384 dimensões, similaridade coseno). O vendedor arrasta um PDF de protocolo IATF direto na interface — o documento fica disponível para consultas imediatamente, com chunking semântico (400 palavras, 60 de overlap).

Ferramenta 3 — get_farm_potential: calcula dois scores 0–100: Potencial de Venda (tamanho estratégico: rebanho, receita histórica, frequência de visitas, taxa de conversão) e Propensão de Compra (probabilidade de fechar agora: recência, taxa de prenhez, ECC médio, volume de IATFs). Gauges SVG animados + análise narrativa do LLM com recomendação de ação.

Voz e CRM: transcrição de áudio via Groq Whisper (whisper-large-v3-turbo); extração de dados estruturados da conversa (fazenda, protocolo, valor, taxa de prenhez) com adapter pattern pronto para qualquer CRM.

Gestão de contexto: conversas longas (mais de 16 mensagens) são comprimidas automaticamente pelo LLM em 4 frases, mantendo as 8 mais recentes intactas — latência estável independente do tamanho da conversa.

Como funciona

Arquitetura

Funcionalidades

O que o assistente faz

Chat com banco de dados: "Qual fazenda tem maior receita?", "Quais vacas com ECC acima de 3.5 estão ciclando?", "Touros com melhor taxa de prenhez?" — o LLM gera o SQL, executa no banco e responde em linguagem natural.

Base de conhecimento técnica: arraste um PDF de protocolo IATF ou manual veterinário. O sistema faz chunking semântico, gera embeddings e indexa no FAISS. Perguntas técnicas buscam automaticamente nos documentos: "Qual a dose de GnRH neste protocolo?", "Critérios para usar eCG?".

Scoring de clientes: dois gauges circulares — Potencial (tamanho estratégico) e Propensão (probabilidade de fechar agora) — mais análise narrativa com recomendação de próxima ação por fazenda.

Voz: microfone integrado no chat, transcrição automática. O vendedor fala, o texto aparece no campo de mensagem pronto para enviar.

Exportar e CRM: exporta conversa em Markdown; extrai campos estruturados para envio ao CRM via adapter pattern configurável.

Ferramentas

Stack & decisões

Python Groq — Tool Calling API FAISS (RAG local) Flask · SSE llama-3.3-70b-versatile llama-3.1-8b-instant whisper-large-v3-turbo all-MiniLM-L6-v2 SQLAlchemy · SQLite sentence-transformers Flask-Login · bcrypt jQuery · marked.js
Por que assim

Decisões de arquitetura

Tool Calling vs. regex SQL: a versão anterior detectava intenção de banco via regex no texto gerado pelo LLM — frágil, sem suporte a múltiplas fontes. Com a Groq Function Calling API, o modelo declara qual ferramenta chamar com argumentos tipados por JSON Schema. Mais robusto e permite encadear banco + RAG no mesmo turno.

FAISS local vs. Pinecone/Weaviate: índice roda inteiramente em CPU sem servidor externo. Persistido em disco e recarregado on-demand. all-MiniLM-L6-v2 processa queries em ~20ms em CPU — suficiente para o volume da operação, sem custo de API externa.

Sumarização de histórico: em vez de truncar e perder contexto (ou explodir o orçamento de tokens), o próprio LLM comprime as mensagens antigas em 4 frases preservando nomes, valores e decisões. As 8 mais recentes ficam intactas.

Dois modelos para tool calling: llama-3.1-8b-instant executa o loop de ferramentas (500k tokens/dia no Groq free tier), enquanto llama-3.3-70b-versatile é reservado para respostas diretas de maior qualidade. Equilibra cota e qualidade.