Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

RAG de Produção na AWS/Busca híbrida e reranking
Módulo 2 · Recuperação· Aula 05/12

Busca híbrida e reranking

Combinar busca semântica com keyword e reordenar com um reranker para acertar mais.

6 min de leitura

Escolha como aprender

combine como quiser

Dica: o vídeo é um resumo visual rápido; o áudio e o texto trazem a aula completa. Terminar o áudio ou o vídeo, ou passar no quiz, já conta a aula como concluída.

Assista a esta aula
Narrado por Fernando AzevedoMP4PDF
Ouça esta aula
0:0011:35
Velocidade
Baixar

Busca vetorial é poderosa, mas falha em algo básico: termos exatos. Se o usuário digita "CVE-2024-1234" ou "API v3.2", o embedding não vai salvar você, ele vai te entregar chunks semanticamente próximos, mas provavelmente errados. A solução não é trocar de abordagem; é combinar as duas e depois reordenar o resultado com um modelo que realmente entende a pergunta.

O limite da busca só-vetorial

Na aula 02 vimos que embeddings capturam significado. Isso é ótimo para perguntas como "como faço para cancelar minha assinatura?", onde variações de linguagem existem. Mas considere estes casos:

  • Um desenvolvedor busca por NullPointerException em logs de erro.
  • Um analista de segurança pesquisa pelo código CVE-2024-1234.
  • Um usuário digita o nome exato de um produto: XR-7000 Pro.

O modelo de embedding vai vetorizar esses termos e buscar vizinhos no espaço semântico. O problema é que CVE-2024-1234 e CVE-2024-5678 ficam muito próximos vetorialmente, afinal, são estruturalmente similares. O sistema vai recuperar o chunk errado com alta confiança.

Busca lexical (BM25, o algoritmo clássico de ranking por frequência de termos) não tem esse problema. Ela trata CVE-2024-1234 como uma string literal e só retorna documentos que contêm exatamente aquele token. É determinística, rápida e não precisa de GPU.

A fraqueza do BM25 é o inverso: sem sinônimos, sem tolerância a variações. "Cancelar assinatura" não encontra "encerrar contrato". Para linguagem natural, ele perde feio para embeddings.

Nenhuma das duas abordagens é superior em todos os cenários. A resposta certa é executar ambas em paralelo e fundir os resultados, isso é busca híbrida.

Busca híbrida: combinando os dois mundos

A mecânica é simples: você dispara duas buscas em paralelo, uma vetorial, uma lexical, e cada uma retorna uma lista ranqueada de chunks. O desafio é fundir essas listas em uma só, já que os scores são incomparáveis (cosine similarity vs. BM25 score).

A técnica mais usada na prática é Reciprocal Rank Fusion (RRF). A ideia é elegante: em vez de normalizar scores (o que é frágil), você usa apenas a posição de cada documento nas listas.

A fórmula é:

RRF(doc) = Σ 1 / (k + rank_i(doc))

Onde k é uma constante (tipicamente 60) e rank_i é a posição do documento na lista i. Um documento que aparece em 3º lugar na busca vetorial e em 5º no BM25 vai ter um score RRF alto. Um documento que só aparece em uma das listas vai ter score menor.

O OpenSearch Serverless e o OpenSearch Service suportam busca híbrida com RRF nativamente, você configura o hybrid query type e define os pesos de cada sub-query. O Amazon Bedrock Knowledge Bases também expõe essa opção no console e via API.

Um parâmetro importante é o peso relativo entre busca vetorial e lexical. Não existe valor universal: depende do seu domínio. Para documentação técnica com muitos códigos e siglas, eu dou mais peso ao BM25. Para FAQ em linguagem natural, mais peso ao vetorial. Comece 50/50 e ajuste com base nos resultados de avaliação (aula 08).

Fluxo: busca híbrida + reranking

Pipeline completo desde a query do usuário até os chunks finais enviados ao LLM. As duas buscas rodam em paralelo; RRF funde os rankings; o reranker seleciona os melhores candidatos.

🔍 Retrieval: Busca paralela
  • Busca Vetorial · ANN / cosine
  • Busca Lexical · BM25 / keyword
🔀 Fusão: RRF
  • Reciprocal Rank · Fusion (RRF)
  • Top-N candidatos · (ex: 20-50 chunks)
🎯 Reranking: Cross-encoder
  • Reranker · Cohere Rerank / Bedrock
  • Top-K finais · (ex: 3-5 chunks)
🤖 Geração: LLM
  • LLM (Claude / Titan) · Prompt + contexto

Reranking: o segundo filtro que muda o jogo

Busca híbrida melhora o recall, você recupera mais chunks relevantes. Mas o ranking ainda é imperfeito. O RRF não sabe por que a pergunta foi feita; ele só sabe que um chunk apareceu bem em duas listas.

O reranker resolve isso. Ele é um cross-encoder: recebe a query e cada chunk juntos como entrada e produz um score de relevância real. Diferente do embedding (que vetoriza query e documento separadamente), o cross-encoder lê os dois ao mesmo tempo e pode capturar dependências sutis, por exemplo, que a resposta à pergunta está na terceira frase do chunk, não na primeira.

O padrão de uso é: recupere muitos candidatos (20, 50, até 100 chunks) com busca híbrida, depois passe tudo pelo reranker e fique com os top-3 ou top-5. Isso funciona porque rerankers são caros por chamada mas você os usa uma vez por query, sobre um conjunto pequeno.

Na AWS, o caminho mais direto é o Cohere Rerank disponível via Amazon Bedrock. Você passa a query e a lista de chunks, recebe de volta os índices reordenados com scores. A integração com o Knowledge Bases ainda é manual neste fluxo, você chama o reranker depois do retrieve e antes de montar o prompt.

Um detalhe importante: rerankers têm um limite de tokens por documento. Chunks muito longos (da aula 03) vão ser truncados. Se você usa chunking de 1024 tokens, verifique o limite do modelo de reranking, geralmente 512 tokens por passagem é o máximo seguro.

FA
Na prática: quando vale o custo extra?
Arquiteto de TI Especialista

Na prática, eu não ativo reranking em todo RAG que construo. Para casos simples: FAQ curto, base pequena, queries previsíveis, a busca híbrida já resolve bem e o reranker só adiciona latência e custo. Ativo reranking quando: (1) a base tem mais de 10k documentos e a densidade de informação é alta; (2) os usuários fazem perguntas complexas ou ambíguas; (3) os testes de avaliação mostram que os top-3 chunks ainda erram com frequência. O ganho de precisão é real, mas mensure antes de colocar em produção, use as métricas da aula 08 para justificar a decisão.

Ordenar

Ordene o fluxo híbrido + rerank

Da pergunta aos poucos trechos finais.

  1. 1Buscar candidatos por vetor E por keyword
  2. 2Reranquear os candidatos por relevância
  3. 3Manter apenas os top-N melhores para o contexto
  4. 4Fundir as duas listas (ex.: RRF)

Comparando as abordagens de busca

CritérioSó vetorialSó lexical (BM25)Híbrida + Rerank
Termos exatos / siglas❌ Fraco✅ Forte✅ Forte
Linguagem natural / sinônimos✅ Forte❌ Fraco✅ Forte
LatênciaBaixaMuito baixaMédia-alta
Custo por queryBaixoMuito baixoMaior (reranker)
Precisão no top-KMédiaMédiaAlta

Implementando busca híbrida + rerank na AWS

  1. 1

    Configure o índice no OpenSearch com campos vetorial e texto

    Crie um índice com knn_vector para embeddings e um campo text padrão para BM25. O OpenSearch indexa os dois automaticamente. No Bedrock Knowledge Bases, o índice híbrido é configurado via console ou CloudFormation.

  2. 2

    Dispare as duas buscas em paralelo

    Use a hybrid query do OpenSearch ou dispare duas queries assíncronas (uma knn, uma match) e funda manualmente com RRF. Recupere N candidatos, comece com 20.

  3. 3

    Aplique RRF para fundir os rankings

    Se usar a hybrid query nativa do OpenSearch, o RRF já está embutido. Se fundir manualmente, implemente a fórmula 1/(k+rank) com k=60 e some os scores de cada lista para cada documento.

  4. 4

    Chame o Cohere Rerank via Bedrock

    Passe a query original e os N chunks fundidos. Use bedrock-runtime com invoke_model e o model ID do Cohere Rerank. Receba os índices reordenados e selecione os top-K (3 a 5 é o padrão razoável).

  5. 5

    Monte o prompt com os top-K chunks e envie ao LLM

    Só agora você monta o contexto final. Menos chunks, mais precisos, o LLM vai errar menos e o custo de tokens de entrada cai. Guarde os scores do reranker para observabilidade (aula 12).

Dúvidas frequentes

Preciso de reranking se já uso busca híbrida?

Não necessariamente. Busca híbrida já melhora bastante o recall. Reranking melhora a precisão do top-K. Se seus testes de avaliação mostram que os chunks recuperados já são bons o suficiente, economize a latência e o custo do reranker.

Qual o impacto de latência do reranker?

Depende do número de candidatos e do tamanho dos chunks. Em geral, espere 200-600ms adicionais para 20-50 chunks com o Cohere Rerank via Bedrock. Isso é aceitável para a maioria dos casos de uso, mas pode ser crítico para aplicações de tempo real.

Posso usar um reranker open-source em vez do Cohere?

Sim. Modelos como cross-encoder/ms-marco-MiniLM-L-6-v2 (HuggingFace) funcionam bem e podem ser hospedados em SageMaker. O trade-off é operação de endpoint vs. custo por chamada do Cohere. Para volumes altos, o modelo próprio pode ser mais barato; para volumes baixos, o Cohere gerenciado é mais simples.

O Bedrock Knowledge Bases faz reranking automaticamente?

Não de forma nativa integrada ao fluxo gerenciado. Você usa o retrieve API para obter os chunks e depois chama o reranker separadamente antes de passar para o LLM. A aula 09 detalha o que o Knowledge Bases gerencia e o que fica na sua responsabilidade.

O que levar desta aula

Busca vetorial falha em termos exatos (siglas, códigos, IDs). BM25 falha em linguagem natural. Use os dois.
RRF é a forma mais robusta de fundir rankings heterogêneos, ela usa posição, não score absoluto.
O padrão é: recupere muitos (N=20-50) → reranqueie → fique com poucos (K=3-5). Recall alto, precisão alta.
Rerankers são cross-encoders: leem query e chunk juntos, capturam dependências que embeddings não capturam.
Reranking tem custo e latência. Só ative quando os testes de avaliação justificarem, não é padrão obrigatório.
Chunks longos são truncados pelo reranker. Alinhe o tamanho de chunk (aula 03) com o limite do modelo de reranking.
Quiz

Checagem rápida

1. O que um reranker faz?

Referências

Amazon Bedrock: Hybrid search in Knowledge BasesOpenSearch: Hybrid search with RRFCohere Rerank on Amazon BedrockReciprocal Rank Fusion (Cormack et al., 2009)AWS Blog: Amazon Bedrock Knowledge Bases now supports hybrid search
Concluir e ir para a próxima Aula anterior