Chatbot RAG com Banco Vetorial
POC de Retrieval-Augmented Generation para responder a partir de documentos próprios: upload, chunking, embeddings, busca vetorial e geração fundamentada.
Problema
LLMs sozinhos alucinam e não conhecem documentos internos. Era preciso responder com evidência recuperada, em tempo quase real, sem reindexar o mundo a cada pergunta — e sem travar o event loop enquanto o documento é processado.
Visão geral
Pipeline RAG completo com embeddings, índice vetorial e orquestração assíncrona. O LangChain orquestra as LLMs e a geração de embeddings via Google Gemini; os vetores ficam no PostgreSQL + pgvector e no FAISS, conforme a origem dos documentos. A indexação roda em workers Celery com Redis, então a conversa não espera o documento. O chat é em tempo real via Django Channels e WebSockets (Daphne), e o frontend consome a API por React + Axios. Tudo containerizado com Docker e Docker Compose.
Decisões técnicas
- Separar ingestão (chunk + embed + index) da inferência da conversa: indexar documento é trabalho de minutos, responder é trabalho de milissegundos.
- FAISS para experimentação local e pgvector quando a fonte da verdade já é o PostgreSQL — dois índices, um critério.
- Celery + Redis para a indexação assíncrona, para não bloquear o event loop nem o turno da conversa.
- Django Channels e WebSockets para o chat em tempo real, com a geração só acontecendo depois da busca: o prompt leva trechos recuperados, não só a pergunta.