Filtragem de metadados para busca híbrida
Combine a similaridade vetorial com filtros estruturados (data, autor, tag) para obter uma recuperação precisa e contextualizada.
Filtragem de metadados para busca híbrida é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Por que filtrar?
A busca puramente vetorial retorna os K fragmentos mais semelhantes — mesmo que pertençam ao locatário, idioma ou documento errado.
Os filtros de metadados restringem a busca a subconjuntos relevantes, proporcionando precisão AND revocação.
Armazenando metadados
Anexe um dicionário de metadados a cada fragmento durante a ingestão:
metadata = {
'tenant_id': 'acme',
'language': 'en',
'source': 'help-docs',
'updated_at': '2024-08-12',
'tags': ['shipping', 'returns']
}
for k, v in metadata.items():
print(f"{k}: {v}")
Filtering in Pinecone
results = index.query(
vector=query_vec,
top_k=5,
filter={
'tenant_id': 'acme',
'language': 'en'
}
)Filtros de intervalo
A maioria dos bancos de dados vetoriais também oferece filtros de intervalo:
filter = {
'updated_at': {'$gte': '2024-01-01'},
'score': {'$gt': 0.5}
}
print(filter)
In and Not-In
filter = {
'tags': {'$in': ['shipping', 'returns']},
'archived': {'$ne': True}
}
print(filter)
Filtragem no Qdrant
O Qdrant tem uma linguagem avançada de filtragem:
from qdrant_client.models import Filter, FieldCondition, MatchValue
filter = Filter(must=[
FieldCondition(key='tenant_id', match=MatchValue(value='acme')),
FieldCondition(key='language', match=MatchValue(value='en'))
])
results = client.search(
collection_name='docs',
query_vector=query_vec,
query_filter=filter,
limit=5
)Pré-filtragem versus pós-filtragem
Duas estratégias:
- Pré-filtragem — aplicar o filtro THEN pesquisar (correto, mas pode ser lento sem metadados indexados)
- Pós-filtragem — pesquisar e depois descartar o que não corresponder (rápido, mas pode retornar zero resultados)
Sistemas de produção fazem a pré-filtragem com índices de metadados apropriados.
Vetorial híbrida + palavras-chave
Combine a busca semântica com a busca clássica por palavras-chave BM25. Execute ambas e combine as pontuações (a fusão recíproca de posições é o padrão):
def rrf(vec_results, bm25_results, k=60):
scores = defaultdict(float)
for rank, doc in enumerate(vec_results):
scores[doc.id] += 1 / (k + rank)
for rank, doc in enumerate(bm25_results):
scores[doc.id] += 1 / (k + rank)
return sorted(scores.items(), key=lambda x: -x[1])Multilocação
Em SaaS, EVERY consulta deve filtrar por tenant_id. Fixe isso no código do seu invólucro de recuperação para que não possa ser esquecido:
def search(query, tenant_id, top_k=5):
return index.query(
vector=embed(query),
top_k=top_k,
filter={'tenant_id': tenant_id}
)Controle de acesso por metadados
Armazene as permissões de usuário e função nos metadados:
metadata = {
'visibility': 'public', # or 'internal', 'restricted'
'department': 'engineering',
'allowed_roles': ['engineer', 'manager']
}
# At query time:
filter = {'allowed_roles': {'$contains': current_user_role}}Aumento de recência
Para priorizar documentos mais recentes, recupere mais candidatos e depois recalcule a pontuação pela recência:
candidates = index.query(vector=query_vec, top_k=50)
scored = [
(c.score * recency_factor(c.metadata['updated_at']), c)
for c in candidates
]
scored.sort(reverse=True)
final = scored[:5]Observe a cardinalidade dos metadados
Metadados de alta cardinalidade (milhões de valores únicos) tornam os índices enormes. Faça uma agregação prévia quando possível — por exemplo, armazene ano-mês em vez do carimbo de data e hora completo para a filtragem temporal.
Filtro sempre ativo
Qual filtro todo agente multilocatário deve ALWAYS incluir?
Recapitulação
Os filtros de metadados restringem sua busca. Combine-os com uma busca híbrida (vetorial + BM25) para obter os melhores resultados. A multilocação e o controle de acesso dependem disso.
Aprenda AI Agents com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 60
- Aulas
- 239
Perguntas Frequentes
A aula “Filtragem de metadados para busca híbrida” é grátis?
Sim — o texto completo de “Filtragem de metadados para busca híbrida” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.
O que vou aprender em “Filtragem de metadados para busca híbrida”?
Combine a similaridade vetorial com filtros estruturados (data, autor, tag) para obter uma recuperação precisa e contextualizada. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AI Agents?
Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Filtragem de metadados para busca híbrida”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AI Agents?
Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Pinecone, Weaviate, Qdrant: comparação
- Filtragem de metadados para busca híbrida
- Atualizando e excluindo vetores
- Escolhendo métricas de distância (cosseno, L2, produto escalar)