ADR 001: Migração de Arquitetura Zero-Shot para RAG (Busca Vetorial)
| Campo | Valor |
|---|---|
| Data | 21/04/2026 |
| Status | ✅ Aceito (Implementado na Sprint 05) |
| Participantes | @henriquemendeselias, @jot4-ge, @luizhtmoreira, @G2SBiell, @lucasaraujoszz, @matheus0346 |
1. Contexto e Problema
O ContraDito iniciou com uma arquitetura onde o Llama 3 8B atuava em formato One-Shot/Zero-Shot: recebia o texto bruto do discurso e deveria classificar o tema, inferir a postura e gerar um resumo em uma única requisição.
Ao escalar para os 513 deputados federais (Sprint 04), foram identificadas falhas críticas:
- Sobrecarga Cognitiva: O LLM não conseguia processar com precisão textos políticos altamente subjetivos, eufemísticos e longos.
- Inconsistência de Dados: Quebras frequentes no formato de saída (JSON corrompido) e alucinações na correlação de contextos, gerando falsos positivos no Score de Coerência.
2. Decisão Arquitetural
Decidimos abandonar a classificação direta via LLM e pivotar para uma arquitetura baseada em Retrieval-Augmented Generation (RAG) com busca vetorial no banco de dados.
As mudanças técnicas acordadas:
- Modelo de Embeddings (SBERT): Adoção do
paraphrase-multilingual-mpnet-base-v2para transformar leis e discursos em vetores de 768 dimensões. - Banco Vetorial: Ativação da extensão
pgvectorno Supabase com índices HNSW. - Filtro de Similaridade: O cruzamento ("Dito" vs "Feito") passa a ser calculado via Similaridade de Cosseno diretamente no banco.
- Redução do Escopo do LLM: O Llama 3 deixa de ser motor de busca. Recebe apenas o par filtrado (Ementa da Lei + Discurso relevante) e dedica 100% do processamento para justificar textualmente a postura (A Favor, Contra, Neutro).
3. Consequências
Pontos Positivos
- Alta Precisão e Rastreabilidade: Eliminação de alucinações no cruzamento de dados. O Score passa a ser baseado em métricas matemáticas auditáveis.
- Performance: A busca vetorial via índice HNSW é executada em milissegundos no banco, aliviando a latência da API.
Trade-offs
!!! warning "Custo Adicional"
Complexidade de Infraestrutura: Exigiu reestruturação do docker-compose para isolar dependências pesadas de IA (PyTorch e Sentence-Transformers) em um contêiner separado (Worker ETL), além de adaptações no script de seeding (Upsert de texto limpo + vetor numérico).