Hybrid search/reranking
O laboratório cria uma comparação de recuperação em camadas. Você tentará explicar os rankings antes de executar a fusão e depois escolherá uma técnica adicional para uma falha específica. O objetivo é aprender diagnóstico, não montar o pipeline mais complexo.
Use corpus fictício com códigos, paráfrases e exceções. Rankings manuais permitem testar união e ordenação sem acesso externo. Busca real, reescrita por modelo e reranking precisam de execução e documentação próprias; mantenha essas etapas separadas no relatório.
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: Leitura: Hybrid search/reranking
Preparar perguntas e baseline
FundamentosCrie quatro grupos: código exato, paráfrase, condição ambígua e pergunta sem resposta. Rotule documentos relevantes antes de construir rankings. Retome a semana de ingestão e confirme que a evidência existe nos trechos. Se o parser perdeu a exceção, nenhuma técnica de busca a recupera. Monte rankings lexical e semântico manuais com pelo menos um erro plausível em cada grupo. Explique a falha esperada. Esse controle permite inspecionar a fusão e evita apresentar dados artificiais como benchmark real de banco.
Executar fusão e controlar top-k
FundamentosRode o código e calcule a contribuição de d1 em cada ranking. Teste um candidato duplicado e implemente deduplicação por trecho ou documento conforme a tarefa. Aplique filtros antes da seleção final. Varie k e observe perda de evidência e redundância. Não some scores numéricos de sistemas diferentes sem normalização e justificativa. A fusão por posições é uma opção didática; avalie sua adequação no corpus real. Guarde também os rankings originais para explicar por que um item ganhou posição.
Testar uma hipótese avançada
FundamentosEscolha uma falha e uma técnica: reescrita para abreviação, multi-query para interpretações, reranking para ordem ruim ou contextual retrieval para trecho sem referência. Escreva expectativa antes da execução. Para HyDE, marque o texto como hipótese de busca e impeça uso como fonte. Registre custo, tempo e número de candidatos. Se várias técnicas mudam juntas, você avalia o sistema completo, mas perde atribuição individual. Preserve consultas originais e transformadas para detectar perda de negação ou código.
↗ Precise Zero-Shot Dense Retrieval without Relevance Labels↗ LangChain MultiQueryRetriever↗ Introducing Contextual Retrieval
Comparar tradeoffs e avaliar
FundamentosMonte uma tabela por pergunta com relevantes esperados, candidatos, evidência enviada e resultado. Verifique se o ganho ocorre em casos reservados e se surgiram falhas novas. Uma melhoria de recall pode aumentar ruído; reranking pode adicionar latência; multi-query pode multiplicar consultas. Escolha o compromisso conforme orçamento e risco. A rubrica exige origem verificável e filtros preservados em todos os caminhos. Feche com uma ADR que inclua baseline, intervenção, efeito observado e a próxima hipótese ainda não testada.
Completar o assistente RAG
RAGUna ingestão da semana anterior, busca híbrida, reranking e montagem de contexto em uma interface simples de pergunta e resposta. O contrato de resposta inclui texto e referências aos trechos usados. A geração externa só é executada quando houver acesso autorizado; um adaptador local pode testar o fluxo e as citações sem fingir produzir inferência real. Registre candidatos antes e depois do reranking para explicar perda de evidência. Se nenhum trecho sustenta a pergunta, devolva ausência de informação conforme a rubrica. Preserve custo de todas as etapas, incluindo reescrita quando usada. O projeto completo usa as técnicas exigidas da fase, mas a análise incremental mostra se cada uma justifica sua presença. Sofisticação de pipeline não substitui a avaliação que será aprofundada na semana seguinte.
Caso adicional para diagnóstico e decisão
FundamentosUse uma pergunta com negação: “o produto PX-7 não foi ativado apesar do pagamento”. Uma reescrita que vira “ativar PX-7 após pagamento” pode perder a discrepância que orienta a resposta. Escreva a intenção original e compare cada variante gerada antes de unir candidatos. Acrescente uma pergunta sobre um código quase igual, PX-17, para verificar que similaridade temática não substitui identidade exata. A rubrica adicional exige preservação de código, negação e condição. Compare multi-query com um único rewrite controlado: várias interpretações podem ampliar cobertura, mas também aumentar ruído e custo. O reranker precisa receber candidatos elegíveis e não pode corrigir uma consulta que excluiu a intenção crucial. Mantenha a pergunta original disponível no gerador e no relatório para que a transformação possa ser auditada.
Execução, inspeção e diagnóstico
FundamentosExecute a fusão e remova d1 de um ranking para observar a mudança. Acrescente um documento relevante ausente de ambos; o algoritmo não o inventará. Esse caso diferencia problema de cobertura de problema de ordenação e orienta a escolha da intervençã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]));Se o documento nunca entra, investigue query, representação ou índice. Se entra e fica abaixo, investigue ordenação. Se chega e a resposta falha, examine contexto e geração. Não use reranking como solução universal para todas as camadas.
Exercício aplicado
Entregue comparação incremental com rankings, filtros, técnica justificada e custos registrados.
- 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.
Quatro casos reservados: código Z8 tem relevante D1; paráfrase tem D2; exceção tem D3; quarta não tem resposta. Baseline recupera D2, D3; híbrido também recupera D1; reranker depois descarta D3. Qual desenho adotar nesta amostra?
Conferir raciocínio e critérios de domínio
Baseline falha no código; híbrido recupera os três relevantes e melhora cobertura sem fonte para a quarta pergunta.
O reranker perde D3, portanto não deve ser adotado apenas por ordenar melhor D1. A quarta pergunta continua sem evidência e exige abstinência.
A decisão provisória é híbrido, condicionada ao mesmo escopo e custo aceitável. Os dados não fornecem custo real nem desempenho fora destes casos; ambos ficam explicitamente não medidos.
Evidências para autoavaliação ou revisão por pares
- Cobertura da recuperação: Baseline falha no código; híbrido recupera os três relevantes e melhora cobertura sem fonte para a quarta pergunta.
- Regressão do reranker: O reranker perde D3, portanto não deve ser adotado apenas por ordenar melhor D1. A quarta pergunta continua sem evidência e exige abstinência.
- Decisão e lacunas: A decisão provisória é híbrido, condicionada ao mesmo escopo e custo aceitável. Os dados não fornecem custo real nem desempenho fora destes casos; ambos ficam explicitamente não medidos.
Um erro frequente
HyDE pode ser citado como política.
HyDE produz hipótese para busca; fontes factuais são documentos reais.
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.