Construindo o LLM-BRAIP: Uma Jornada de IA Local
Desenvolver um sistema de Inteligência Artificial que rode 100% localmente, sem depender das gigantes do mercado como OpenAI ou Anthropic, é um desafio de engenharia fascinante. No projeto LLM-BRAIP, nosso objetivo era claro: criar uma plataforma de tutores educacionais especializados, capazes de atender 500 usuários simultâneos, rodando em hardware acessível (como uma RTX 4060) e com custo operacional mínimo.
Neste post, vou compartilhar os aprendizados técnicos, as decisões de arquitetura e explicar como conectamos as peças desse quebra-cabeça.
🧠 A Selva dos Modelos: Text Gen, Vision e Image Gen
Uma das primeiras barreiras para quem entra nesse mundo é a sopa de letrinhas dos modelos. Durante o desenvolvimento, precisamos entender exatamente o que usar:
- Text Generation (LLMs): É o cérebro do nosso sistema (ex: GPT, Llama, Qwen). Eles preveem a próxima palavra em uma sequência. Para um sistema de tutores, esse é o coração — precisamos de raciocínio, lógica e capacidade de explicação.
- Vision Models (VLM): Modelos que "enxergam". Eles recebem imagens e texto como entrada. Embora úteis para analisar gráficos ou deveres de casa manuscritos, exigem muito mais VRAM. Deixamos isso para uma fase futura (multimodalidade).
- Image Generation (Diffusion): Criam imagens a partir de texto (ex: Stable Diffusion). Para educação, pode ser útil para ilustrar conceitos, mas não é o foco principal de um tutor de conversa.
A Escolha Difícil: Por que Qwen?
Testamos exaustivamente os modelos disponíveis. O desafio era encontrar o equilíbrio entre capacidade de raciocínio, suporte ao Português (PT-BR) e consumo de memória.
- Llama 3 (Meta): Incrível em inglês, mas o suporte nativo ao PT-BR às vezes falha em nuances culturais ou complexas.
- Mistral: Muito eficiente, mas os modelos menores (7B) às vezes alucinam em instruções complexas em português.
- Qwen 2.5 (Alibaba): Foi a nossa escolha vencedora.
- PT-BR Nativo: Ele entende e gera português com uma naturalidade impressionante.
- Eficiência: O modelo de 32B parâmetros (usando quantização 4-bit) roda em hardware consumidor high-end (24GB VRAM) com performance próxima ao GPT-4.
- Para GPUs menores (RTX 4060 8GB): O modelo 7B do Qwen provou ser incrivelmente capaz, permitindo rodar o sistema com baixo custo.
🏗️ Arquitetura do Sistema
Não basta só ter o modelo; precisamos de um sistema robusto ao redor dele. Nossa stack foi desenhada para performance e independência:
- Serving:
vLLM+FastAPI. O vLLM é fundamental para otimizar o uso da GPU, permitindo batching de requisições e "Pagination Attention", que economiza memória. - Vector Database:
Qdrant. A memória de longo prazo do sistema (mais sobre isso abaixo). - Orquestração:
LangGraph. Para gerenciar fluxos de conversa complexos onde o agente precisa "pensar" antes de responder. - Frontend: HTML5 + Vanilla JS. Simplicidade para garantir velocidade máxima.
🔍 O Coração da Memória: Qdrant e Vetores
Um LLM tradicional tem uma "janela de contexto" limitada. Ele não lembra de tudo que você já conversou meses atrás, nem conhece todos os documentos específicos da sua escola. É aqui que entra o RAG (Retrieval-Augmented Generation) e o Qdrant.
Como funciona o Banco de Vetores (Vector DB)?
Imagine que cada frase ou parágrafo de texto seja transformado em uma lista de números (um vetor) que representa o significado semântico daquilo.
- A frase "O professor de matemática explicou integrais" terá números parecidos com "Cálculo avançado foi o tema da aula".
- Mas terá números muito diferentes de "A receita de bolo de cenoura".
O Qdrant armazena esses vetores. Quando o aluno faz uma pergunta, transformamos a pergunta em números e o Qdrant busca matematicamente (usando cálculo de similaridade de cosseno) quais pedaços de informação no banco são mais "próximos" da dúvida do aluno.
A Geração de Contexto
O "pulo do gato" não está apenas em achar a informação, mas em como a entregamos ao Qwen. O processo que criamos é:
- Recuperação: O aluno pergunta. O sistema busca no Qdrant os trechos de apostilas ou conversas passadas mais relevantes.
- Montagem do Prompt: Criamos um "System Prompt" dinâmico.
Você é o Professor João, especialista em Matemática. Use o seguinte contexto para responder ao aluno: [Informação recuperada do Qdrant aqui] Pergunta do aluno: [Pergunta original] - Geração: O Qwen recebe esse pacote completo. Para ele, parece que ele "já sabia" daquilo, mas nós acabamos de "soprar" a resposta no ouvido dele.
🔄 O Fluxo: Treinamento vs Contexto (RAG)
Muitas vezes há confusão entre o que o modelo "aprendeu" (Treinamento) e o que ele "lê" no momento (Contexto). O diagrama abaixo ilustra como combinamos a inteligência pré-treinada do Qwen com o conhecimento específico do BraipHub armazenado no Qdrant.
Nota sobre o Diagrama: A parte "Rosa" representa o que vem de fábrica no modelo (não mudamos isso). A parte "Azul" é o nosso diferencial: o conhecimento vivo que atualizamos no Qdrant a qualquer momento.
🎓 Tutores Dinâmicos
Uma das maiores inovações do BraipHub foi tornar os tutores configuráveis via banco de dados (PostgreSQL). Não precisamos recriar o código para criar um novo "Professor de História". Apenas inserimos um novo registro com a "personalidade" (System Prompt) e a base de conhecimento específica.
Isso permite que um único sistema rode centenas de especialistas diferentes, apenas trocando o contexto e a "máscara" que o modelo usa a cada requisição.
A jornada de construir IA local é sobre fazer mais com menos. Com a escolha certa de ferramentas (Qwen + Qdrant) e otimização de hardware, conseguimos criar um sistema educacional de ponta, soberano e economicamente viável.

Comentarios (0)