Machine Learning Mastery mostra como montar um RAG com scikit-learn, sem banco de dados vetorial
A Machine Learning Mastery publicou um guia para montar um pipeline de RAG leve, de ponta a ponta. A busca vetorial fica por conta do scikit-learn, enquanto os embeddings e o processamento de texto usam modelos abertos. Para um protótipo, não é preciso ter um banco de dados vetorial separado nem APIs na nuvem: todo o pipeline cabe em um único script Python. - A busca por similaridade usa os recursos do scikit-learn. - Os embeddings são gerados por modelos de código aberto. - Para corpora pequenos, esse stack roda em um notebook.
Processado por IA de Machine Learning Mastery; editado por Hamidun News
Em 13 de outubro de 2026, a Machine Learning Mastery publicou um guia prático para montar um pipeline de RAG de ponta a ponta com um stack mínimo. A busca vetorial fica com o scikit-learn, e os embeddings e o processamento de texto são feitos com modelos abertos. Na fase de protótipo, não são necessários servidores com banco de dados vetorial, infraestrutura separada nem APIs pagas. O material é didático, não um lançamento, mas mostra bem como é pouco o que se precisa para colocar de pé um fluxo do tipo "encontre o contexto e depois responda".
O anúncio descreve apenas os contornos gerais da solução, por isso o fluxo é analisado abaixo pelas etapas típicas de um RAG. Os parâmetros específicos do texto completo do guia não são reproduzidos aqui.
Como o pipeline é montado
Um RAG clássico tem quatro operações. Os documentos são divididos em fragmentos, os fragmentos viram vetores, a consulta recupera os mais próximos, e o texto encontrado é inserido no prompt do modelo de linguagem. Tudo isso cabe em um único arquivo.
No guia, a vetorização fica com modelos abertos de embeddings, e a busca pelos vizinhos mais próximos fica com o scikit-learn. Para esse cenário, a biblioteca já traz ferramentas prontas: a similaridade de cosseno e a classe NearestNeighbors. A matriz de vetores fica na memória, a consulta é convertida em um vetor da mesma dimensão, e depois é feita a seleção dos top-k.
Perfil aproximado desse stack:
- Busca: scikit-learn, similaridade de cosseno ou NearestNeighbors, com busca exata, sem aproximações.
- Embeddings: um modelo aberto. O popular all-MiniLM-L6-v2, por exemplo, gera vetores de 384 dimensões.
- Armazenamento: um array NumPy na memória RAM.
- Volume: 100 mil fragmentos com 384 dimensões em float32 ocupam cerca de 150 MB.
- Dependências: Python, scikit-learn e uma biblioteca para carregar o modelo de embeddings.
Os números de volume foram calculados a partir da dimensão do vetor, e não tirados do artigo. Eles servem para dar a ordem de grandeza: 384 números de 4 bytes resultam em 1,5 KB por fragmento.
Por que dispensar o banco de dados vetorial
A primeira vantagem é a transparência. Quando a busca se resume a multiplicação de matrizes e ordenação, dá para ver o que acontece em cada etapa. É possível imprimir as similaridades, conferir qual fragmento venceu e por quê, e perceber de imediato que os chunks foram mal cortados. Em sistemas especializados, parte dessa mecânica fica escondida atrás de uma API.
A segunda vantagem é o baixo custo de entrada. O protótipo não exige contas, chaves nem chamadas de rede. Para uma base de conhecimento interna de alguns milhares de páginas, ou para treinar uma equipe, isso basta. Nesses volumes, a busca exata responde em frações de segundo, então índices aproximados como o HNSW não acrescentam nada.
A terceira vantagem é a reprodutibilidade. Basta fixar as versões das bibliotecas e do modelo, e o resultado do seu colega será igual ao seu.
Onde esse esquema chega ao limite
A busca exata escala de forma linear. Quando o corpus chegar a milhões de fragmentos, o tempo de resposta e o consumo de memória vão atrapalhar, e será preciso migrar para FAISS, pgvector, Qdrant ou similares. Requisitos adicionais também recaem sobre o desenvolvedor: filtros por metadados, controle de acesso, atualização incremental do índice. No scikit-learn, tudo isso precisa ser implementado manualmente.
A qualidade da resposta, porém, não depende da biblioteca de busca, mas de três fatores: como o texto é dividido, qual modelo de embeddings foi escolhido e como o prompt é estruturado. Trocar o armazenamento por um mais robusto não resolve esses problemas.
Como usar na prática
Comece com um corpus pequeno, como a sua documentação ou um FAQ, e monte o pipeline em um único script. Crie de 20 a 30 perguntas de controle com respostas conhecidas e calcule a proporção de casos em que o fragmento correto aparece entre os top-3. Essa métrica, a hit rate, mostra a qualidade da busca antes mesmo de você conectar a geração.
Depois, altere uma variável por vez: o tamanho do chunk, o modelo de embeddings, o valor de k. Se a métrica sobe, o esquema funciona. Quando o corpus ou a carga ultrapassarem o limite de memória de uma única máquina, troque o bloco de busca por um banco de dados vetorial de nível industrial. O restante do código permanece o mesmo, porque a interface "vetor da consulta na entrada, lista de fragmentos na saída" é idêntica nos dois casos.
Access Frontier LLMs & Multimodal AI in One Workspace
Discover NomadNet AI (nomadnet.ai) — unified access to frontier language models, research synthesis, and multimodal workflows.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.