Hybrid search/reranking
Depois de preservar documentos e trechos, precisamos recuperar a evidência certa para perguntas diferentes. Busca semântica, lexical e híbrida oferecem sinais complementares. Técnicas adicionais podem ajudar, mas cada uma acrescenta custo e uma hipótese que precisa ser testada.
O caso é uma base de políticas com um código exato de produto e perguntas em linguagem informal. Uma busca pode encontrar paráfrases e perder o código; outra pode encontrar o código e perder o sentido. Você construirá uma comparação incremental em vez de ligar todas as técnicas de uma vez.
JavaScriptRAGAo terminar esta aula
- Sinais lexicais e semânticos são complementares.
- Técnicas avançadas exigem hipóteses e avaliação.
- Cobertura, ordem e geração são falhas distintas.
Antes de continuar: Laboratório: RAG ingestion/chunking
Semantic, keyword e hybrid search
RAGBusca semântica compara representações vetoriais para encontrar conteúdo relacionado, mesmo sem palavras idênticas. Keyword search utiliza sinais lexicais, úteis para nomes, códigos e termos exatos. Cada abordagem tem falhas: proximidade temática pode recuperar política de produto errado; correspondência lexical pode perder uma paráfrase. Hybrid search combina sinais segundo o sistema escolhido. Isso não garante ganho universal, mas oferece uma hipótese plausível quando a coleção contém ambos os tipos de consulta.
O contrato da consulta inclui filtros e corpus, não apenas a função de score. Preserve escopo e vigência em todos os caminhos. Uma busca híbrida que mistura resultados autorizados de um lado com resultados globais do outro viola o desenho. Registre como sinais são combinados e compare consultas por grupo. Weaviate documenta busca híbrida; PostgreSQL e pgvector podem combinar recursos relacionais e vetoriais conforme sua implementação. As interfaces diferem, portanto não transfira parâmetros por nome sem conferir o comportamento real.
Top-k e reranking
RAGTop-k de retrieval é a quantidade de candidatos selecionados, diferente de top-k na amostragem de geração. Um k pequeno pode perder evidência; um k grande pode aumentar ruído e custo. Escolha a quantidade com perguntas rotuladas e orçamento de contexto. Se os primeiros resultados são duplicatas, aumentar k não resolve necessariamente diversidade. A seleção precisa preservar evidência suficiente, incluindo exceções relacionadas.
Reranking reordena candidatos com outro sinal, frequentemente um modelo que avalia consulta e documento juntos. Pode melhorar a posição de trechos relevantes, mas só trabalha sobre o conjunto fornecido. Se a evidência não foi recuperada, o reranker não a inventa. Registre quantidade de candidatos antes e depois, latência adicional e modelo utilizado. Compare ganho de relevância com custo por tarefa aceita. Não trate a segunda classificação como verdade factual; ela ajuda a ordenar evidências cuja origem e vigência continuam sendo verificadas.
Query rewriting e multi-query
FundamentosQuery rewriting reformula a pergunta para ajudar recuperação. Pode expandir abreviação ou remover ruído, mas também alterar intenção e apagar um código crucial. Preserve consulta original e a transformação para diagnóstico. Para “não abre o PX-7 após pagamento”, uma reescrita pode esclarecer ativação, porém deve manter PX-7. Avalie perguntas com negação e condições para detectar mudança semântica.
Multi-query gera várias formulações e reúne candidatos. A diversidade pode cobrir interpretações, mas aumenta chamadas, processamento e necessidade de deduplicação. O conjunto resultante não representa evidência independente multiplicada: três paráfrases que recuperam o mesmo trecho continuam oferecendo uma fonte. Filtros de autorização precisam acompanhar todas as consultas. A implementação deve ter limite de variantes e critérios de união. Antes de adotar, compare com busca básica e verifique se o ganho aparece em casos reservados, não apenas nas perguntas usadas para desenhar o procedimento.
HyDE e contextual retrieval
FundamentosHyDE gera um documento hipotético que poderia responder à pergunta e usa sua representação para recuperar documentos reais. O texto hipotético é um instrumento de busca, não uma fonte citável. Ele pode conter informações inventadas por construção. Se o gerador final receber esse texto como evidência, a aplicação confunde uma pista de recuperação com uma afirmação sustentada. O resultado precisa ser vinculado aos documentos efetivamente encontrados.
↗ Precise Zero-Shot Dense Retrieval without Relevance Labels↗ Introducing Contextual Retrieval
Contextual retrieval acrescenta contexto explicativo aos trechos antes da indexação para reduzir a perda de informação causada por segmentação. Uma unidade curta como “prazo de sete dias” pode ganhar referência ao produto e à política. Esse enriquecimento também pode introduzir erros se gerar detalhes sem base. Preserve texto original, contexto acrescentado e origem separadamente. O relato da Anthropic oferece uma estratégia de engenharia e resultados em seus testes; não é garantia para outro corpus. Avalie melhoria, custo de ingestão e risco de contexto incorreto.
↗ Precise Zero-Shot Dense Retrieval without Relevance Labels↗ Introducing Contextual Retrieval
Experimento incremental e diagnóstico
FundamentosComece com baseline simples e coleção versionada. Rotule documentos relevantes para perguntas de termo exato, paráfrase, ambiguidade e ausência de resposta. Acrescente uma técnica por rodada quando quiser entender sua contribuição. Observe quais candidatos apareceram, como foram ordenados e o que chegou ao gerador. A qualidade final pode mudar por recuperação, montagem de contexto ou geração; não atribua todo ganho ao índice.
↗ OpenAI Retrieval↗ Introducing Contextual Retrieval↗ pgvector README
Registre custo e latência da reescrita, variantes, reranking e contexto adicional. Uma técnica que melhora recuperação em poucos casos pode ser inadequada para uma carga de baixo orçamento. Compare também falhas novas, como perda de código, expansão fora do escopo ou texto hipotético tratado como fonte. O pipeline deve poder explicar a origem de cada evidência. A decisão de arquitetura é uma composição de compromissos medidos, não uma coleção de nomes avançados adicionada por aparência de sofisticação.
↗ OpenAI Retrieval↗ Introducing Contextual Retrieval↗ pgvector README
Exemplo comentado e limites
FundamentosA fusão ilustrativa usa posição, não soma scores de escalas diferentes. O valor 60 é um parâmetro didático, não uma escolha ótima comprovada. O programa recebe rankings fictícios e não realiza busca lexical ou embeddings. Ele permite inspecionar como um candidato presente nos dois caminhos ganha posição.
const lexical=["d1","d3","d2"];
const semantico=["d2","d1","d4"];
const soma=new Map();
for(const ranking of [lexical,semantico]) {
ranking.forEach((id,i)=>soma.set(id,(soma.get(id)||0)+1/(60+i+1)));
}
console.log([...soma].sort((a,b)=>b[1]-a[1]));Uma fusão real exige deduplicação, filtros e avaliação. Se d1 pertence a outra conta, sua posição alta não o torna elegível. Se um candidato correto não está em nenhum ranking, a fusão não consegue recuperá-lo. Essa observação também explica o limite do reranking.
Exercício aplicado
Compare rankings lexical e semântico para código exato e paráfrase sem tratar scores como escalas equivalentes.
- Tente explicar baseline e rotule relevância.
- Execute fusão e varie top-k.
- Teste uma técnica para uma falha concreta.
- Compare ganhos, falhas novas e orçamento.
Abrir resolução comentada
A solução compara baseline semântico, lexical e combinação no mesmo conjunto autorizado. Preserva perguntas e relevância esperada. Depois testa reescrita, multi-query ou reranking conforme a falha identificada. Não ativa técnicas sem um caso que justifique a hipótese.
HyDE pode produzir texto hipotético para busca, mas a resposta cita documentos reais recuperados. Contexto acrescentado à ingestão é mantido separado do trecho original e verificado. O relatório registra benefício e custo por grupo de perguntas, além das falhas introduzidas.
A resolução mantém rastreabilidade entre pergunta e evidência. Uma técnica é adotada quando melhora casos relevantes com custo aceitável, não porque seu nome sugere avanço.
A solução implementa fusão com filtro em todos os rankings, varia top-k e compara cobertura sobre relevância rotulada. Reescrita preserva código e negação. O texto hipotético fica apenas no objeto de busca e é proibido no contexto de evidência por assert. As duas consultas e rankings são fixtures; o ganho mostrado demonstra o runner e não um benchmark de modelos. Custo e latência externos ficam nulos, exigindo medição real antes de uma decisão operacional.
import assert from "node:assert/strict";
const docs=new Map([["d1",{tenant:"A",texto:"PX-7: ativação após confirmação"}],
["d2",{tenant:"A",texto:"PX-7: exceção exige análise manual"}],
["d3",{tenant:"B",texto:"Outro cliente"}], ["d4",{tenant:"A",texto:"Contato"}]]);
const pergunta="PX-7 não foi ativado apesar do pagamento";
const lexical=["d1","d3","d4"],semantico=["d2","d3","d1"];
function fusao(rankings,ctx,k){const scores=new Map();
for(const ranking of rankings){ranking.filter(id=>docs.get(id)?.tenant===ctx.tenant).forEach((id,i)=>
scores.set(id,(scores.get(id)||0)+1/(60+i+1)));}
return [...scores].sort((a,b)=>b[1]-a[1]).slice(0,k).map(([id,score])=>({id,score}));}
const relevantes=new Set(["d1","d2"]);
const medirRecall=itens=>itens.filter(x=>relevantes.has(x.id)).length/relevantes.size;
const k1=fusao([lexical,semantico],{tenant:"A"},1),k2=fusao([lexical,semantico],{tenant:"A"},2);
assert.equal(medirRecall(k1),0.5);assert.equal(medirRecall(k2),1);
assert.ok(k2.every(x=>docs.get(x.id).tenant==="A"));
const reescrita="PX-7 não ativado após pagamento: consultar condição e exceção";
assert.ok(reescrita.includes("PX-7")&&reescrita.includes("não"));
const consultas=[pergunta,reescrita];
const textoHipotetico="HIPOTESE_FICTICIA: o prazo talvez seja 999 dias";
// HyDE entra como pista de busca. O contexto final usa somente documentos reais da fixture.
const busca={consultas,pistaHyDE:textoHipotetico,candidatos:k2};
const contexto=busca.candidatos.map(c=>({id:c.id,texto:docs.get(c.id).texto,origem:"corpus-fixture"}));
assert.equal(JSON.stringify(contexto).includes("999 dias"),false);
const baseline={nome:"lexical-fixture",itens:fusao([lexical],{tenant:"A"},2)};
const intervencao={nome:"hibrido-fixture",itens:k2};
const comparacao=[baseline,intervencao].map(x=>({nome:x.nome,recall:medirRecall(x.itens),
chamadas:x.nome.startsWith("lexical")?1:2,latenciaMs:null,custo:null}));
assert.ok(comparacao[1].recall>comparacao[0].recall);
console.log({status:"aprovado",busca,contexto,comparacao,
kDeRetrieval:2,kDeSampling:"não utilizado",execucao:"rankings e consultas fictícios"});Como conferir seu resultado
- Top-k de retrieval está distinguido de sampling.
- Texto hipotético não entra como fonte.
- Filtros acompanham todos os caminhos de busca.
Aplique em um problema novo
Primeiro resolva sem consultar a resposta. Explique suas decisões e guarde a evidência. A conclusão de leitura é independente desta autoavaliação.
Confira seus pré-requisitos
- Ler rankings e relevância rotulada.
- Calcular fusão por posições.
Lexical A, B e semântico B, C: RRF k60. Calcule ordem e hipótese para código exato perdido.
Conferir raciocínio e critérios de domínio
B=1/62+1/61≈0,03252; A≈0,01639; C≈0,01613; ordem B, A, C.
Híbrido/lexical atende hipótese de termo exato; testar mesmo corpus.
HyDE é hipótese de busca, nunca fonte factual da resposta.
Evidências para autoavaliação ou revisão por pares
- Fusão: B=1/62+1/61≈0,03252; A≈0,01639; C≈0,01613; ordem B, A, C.
- Hipótese: Híbrido/lexical atende hipótese de termo exato; testar mesmo corpus.
- Fonte: HyDE é hipótese de busca, nunca fonte factual da resposta.
Um erro frequente
Mais técnicas garantem melhor RAG.
Técnicas precisam demonstrar ganho com custo e limites.
Teste sua compreensão
Responda com suas palavras antes de abrir o comentário. Saber explicar uma decisão é parte do domínio.
1. Top-k de retrieval é o mesmo de sampling?
2. Reranker encontra documento ausente dos candidatos?
3. Texto HyDE pode ser citado como evidência?
Não.
É hipotético e serve à busca; evidência vem dos documentos reais.
↗ Precise Zero-Shot Dense Retrieval without Relevance Labels
Seu progresso fica salvo neste navegador. Concluir a leitura não substitui demonstrar o domínio nos exercícios.
Referências e aprofundamento
Documentação oficial e trabalhos originais. As referências registram o escopo e as limitações para você conferir o que sustentam.
- pgvector README
pgvector contributors • consulta: 2026-10-06
PostgreSQLPostgreSQL com vetores, distâncias cosine/L2, índices HNSW/IVFFlat, filtragem e busca híbrida.
Limites: README atual mostra versão 0.8.7; performance, recall e ordem de filtros exigem benchmark no dataset.
- Weaviate Hybrid search
Weaviate • consulta: 2026-10-06
RAGCombinação de busca keyword/BM25 e vetorial; filtros e parâmetros de ranking.
Limites: Documentação dinâmica; fixar a versão usada no laboratório e conferir compatibilidade antes de executar.
- Introducing Contextual Retrieval
Anthropic • consulta: 2026-10-06
FundamentosEnriquecimento de chunks com contexto, BM25 + embeddings e reranking.
Limites: Resultados publicados são dos datasets do fornecedor; melhorias precisam ser reavaliadas no corpus do aluno.
- Pinecone Semantic search
Pinecone • consulta: 2026-10-06
FundamentosBusca semântica, top-k e resultados em índices vetoriais.
Limites: Serviço e pricing próprios; comparar com alternativas usando dataset e custos medidos.
- OpenAI Retrieval
OpenAI • consulta: 2026-10-06
OpenAIIngestion, chunking/overlap, metadata/filtros, ranking e reescrita de consultas em vector stores.
Limites: Implementação gerenciada OpenAI; defaults não são melhores escolhas universais para pgvector.
- LangChain MultiQueryRetriever
LangChain • consulta: 2026-10-06
FundamentosGeração de múltiplas consultas e união dos documentos recuperados.
Limites: Referência do pacote langchain-classic; consulta web recusou content-type, página foi obtida por HTTP 200 e conteúdo examinado via Invoke-WebRequest.
- Precise Zero-Shot Dense Retrieval without Relevance Labels
Gao et al. / arXiv • consulta: 2026-10-06
FundamentosHyDE: gerar documento hipotético e usar seu embedding para retrieval.
Limites: Documento hipotético pode conter informações falsas; é representação para busca, não fonte da resposta.