Executando verificação de segurança...
1

Implementando um RAG

Motivação

Este projeto tem como objetivo construir um sistema de RAG (Retrieval-Augmented Generation) com foco em baixo custo, levando em consideração principalmente os gastos com infraestrutura. Por isso, a prioridade foi o uso de CPU em vez de GPU, tornando a solução acessível para qualquer pessoa.

A ideia central foi desenvolver o melhor RAG possível utilizando técnicas adequadas, e não necessariamente as ferramentas mais caras ou robustas do mercado. O lema do projeto é: “Fazer muito com pouco”, utilizando modelos menores, porém eficientes, que entreguem bons resultados sem elevar os custos.

Linguagem e Framework

A linguagem escolhida foi Python, principalmente por sua forte aderência a bibliotecas de NLP e modelos de embeddings. Trata-se de uma linguagem madura e amplamente utilizada para esse tipo de aplicação.

Além disso, foi utilizado o FastAPI como framework web, responsável por fornecer uma API com endpoints que permitem ao usuário realizar buscas na base de dados de forma simples e eficiente.

Banco de Dados Vetorial

Para o banco de dados, a escolha foi o Qdrant, um banco vetorial sólido e amplamente utilizado em aplicações de RAG. Ele possui boa documentação, é estável e já está bem consolidado no mercado.

Estrutura e Fluxo de Dados

A partir dessas escolhas, o fluxo do sistema se torna simples e direto. Na pasta data existem três arquivos que são processados para gerar os embeddings, os quais são posteriormente persistidos no banco de dados vetorial. Cada embedding possui 384 dimensões.

Explicando o Fluxo do Processo

Pré-processamento e Split de Texto

Os documentos (por exemplo, textos sobre Ariano Suassuna, História do Brasil e Ayrton Senna) são carregados e processados.

Para facilitar a recuperação da informação sem perda de contexto, os textos são divididos em trechos menores, com até 80 palavras cada. Esse processo de divisão é realizado utilizando técnicas de NLP, garantindo que cada trecho mantenha sentido e coesão semântica.

Geração de Embeddings

Cada trecho de texto é transformado em um vetor numérico de 384 dimensões.

Esses vetores representam semanticamente o conteúdo dos textos, permitindo que as buscas sejam realizadas com base em similaridade semântica, e não apenas por palavras-chave.

O modelo de embeddings utilizado é pré-treinado e multilíngue, com suporte ao português, garantindo boa qualidade semântica para diferentes tipos de documentos.

Indexação no Banco Vetorial

Os embeddings gerados são enviados para o banco de dados vetorial (Qdrant).

Cada chunk de texto é armazenado juntamente com metadados, como o título do documento original. A indexação utiliza métricas de similaridade, como distância cosseno, possibilitando buscas rápidas e precisas.

Resumo

O pipeline implementado garante que:

Cada documento seja fragmentado de forma coerente.

Os embeddings capturem corretamente o significado semântico dos trechos.

A indexação eficiente permita uma recuperação rápida das informações.

As respostas geradas estejam sempre ancoradas na base de conhecimento indexada.

Tecnologias Utilizadas

Linguagem: Python / FastAPI

Banco de Dados: Qdrant

Modelo de Embeddings: paraphrase-multilingual-MiniLM-L12-v2

Modelo de Linguagem Natural (NLP): pt_core_news_sm

Carregando publicação patrocinada...