
Como funciona um bot RAG moderno
Um bom pipeline RAG é mais do que “colocar documentos em uma base de dados vetorial”. O fluxo básico é assim:
A etapa de re-ranking é o upgrade que torna isso muito mais útil que uma demo RAG básica. A busca vetorial é rápida e boa em encontrar chunks semanticamente similares, mas ainda pode retornar passagens adjacentes ao tópico em vez de diretamente úteis. Um cross-encoder lê a pergunta e cada chunk candidato juntos, e depois pontua o quão bem aquele chunk de fato responde à pergunta.
Instalando as dependências
Usaremos o SDK Python da OpenAI porque a Venice expõe uma API compatível com OpenAI. Também usaremos o cliente Python do Qdrant com suporte a FastEmbed:requirements.txt com os mesmos pacotes:
Escolhendo os modelos
Crie um arquivo chamadorag_bot.py e comece adicionando os imports, estruturas de dados, URL da API e nomes dos modelos:
base_url e a chave de API.
Você pode listar os modelos Venice disponíveis com:
Criando os clientes Venice e Qdrant
Crie um cliente Venice compatível com OpenAI para embeddings e chat completions:
Para um bot local privado, comece com um caminho Qdrant local em disco:
Carregando e dividindo documentos em chunks
Para este tutorial, deixaremos o bot ingerir arquivos ou pastas locais. Comece com arquivos.md, .rst e .txt:
1000 caracteres com 150 caracteres de overlap é um bom padrão para documentos mistos de Markdown e texto. Chunks menores podem melhorar a precisão. Chunks maiores podem preservar mais contexto. A configuração certa frequentemente depende dos tipos de documentos que você está armazenando.
Fazendo embedding de documentos com a Venice
Quando temos os chunks, fazemos o embedding em lotes:Armazenando vetores no Qdrant
Antes de inserir pontos, crie uma coleção Qdrant com o tamanho de vetor correto. A maneira mais fácil de saber o tamanho do vetor é fazer o embedding do primeiro batch e depois usarlen(embeddings[0]).
source, chunk_index e conteúdo. Isso torna a ingestão repetida idempotente para chunks inalterados.
Recuperando chunks candidatos
No momento da pergunta, o bot faz embedding da pergunta do usuário e pede ao Qdrant as melhores correspondências vetoriais:limit aqui é o número de candidatos. Geralmente deve ser maior que o número de chunks que você planeja enviar ao modelo, porque o próximo passo vai re-rankeá-los. Um bom padrão é recuperar 8 candidatos e enviar os 4 melhores ao modelo de chat.
Re-ranking com FastEmbed
Agora adicionamos a parte que faz a recuperação parecer muito mais inteligente.- Recuperar um conjunto maior de candidatos com busca vetorial.
- Re-rankear apenas esses candidatos localmente.
- Enviar os poucos chunks de topo ao modelo de linguagem.
candidate_k=8 e top_k=4. Aumente candidate_k se a fonte certa frequentemente está próxima mas não está chegando ao contexto final.
Respondendo com chat completions da Venice
Quando o contexto é selecionado, formate-o com números de origem:Executando o bot
Quando você montar as peças em um script, salve comorag_bot.py. Uma primeira execução simples pode usar alguns documentos de amostra integrados para que você verifique o pipeline antes de ingerir seus próprios arquivos:
Opções úteis de CLI
Exponha os principais knobs de recuperação como opções de CLI para poder ajustar o bot sem editar código:
Para desenvolvimento local repetido, um fluxo comum é:
Notas de privacidade
Para uma configuração RAG privada, pense em cada camada separadamente:
O padrão mais privado para este tutorial é Venice para inferência, Qdrant local em disco e re-ranking FastEmbed local. Isso te dá um bot RAG prático sem enviar os payloads da sua base vetorial a um vector store de terceiros.
Erros comuns para tratar de imediato
Se você mudar os modelos de embedding, recrie a coleção Qdrant. Diferentes modelos de embedding podem produzir vetores com dimensões diferentes, e coleções Qdrant esperam um tamanho de vetor fixo.
Para onde ir a seguir
Quando você tiver a baseline rodando, as melhorias de maior impacto geralmente são:- Adicionar loaders específicos para PDFs, HTML, tickets ou páginas internas de wiki.
- Armazenar metadados mais ricos como títulos, headings, datas, donos e URLs.
- Ajustar
candidate_k,top_k, tamanho de chunk e overlap em perguntas reais. - Adicionar perguntas de avaliação para medir a qualidade da recuperação antes e depois das mudanças.
- Fazer streaming do chat completion final da Venice para uma experiência interativa melhor.