0Pricing
AI Agents · Leçon

Filtrage des métadonnées pour la recherche hybride

Combinez la similarité vectorielle avec des filtres structurés (date, auteur, étiquette) pour obtenir une recherche précise et contextualisée.

Filtrage des métadonnées pour la recherche hybride est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Pourquoi filtrer ?

Une recherche vectorielle pure renvoie les K fragments les plus similaires, même s’ils appartiennent au mauvais locataire, sont rédigés dans la mauvaise langue ou proviennent du mauvais document.

Les filtres de métadonnées limitent la recherche à des sous-ensembles pertinents, ce qui vous apporte à la fois précision AND rappel.

Stocker les métadonnées

Associez un dictionnaire de métadonnées à chaque fragment lors du chargement :

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'
    }
)

Filtres d’intervalle

La plupart des bases de données vectorielles prennent également en charge les filtres d’intervalle :

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)

Filtrage dans Qdrant

Qdrant dispose d’un langage de filtrage riche :

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
)

Filtrage préalable ou ultérieur

Deux stratégies :

  • Filtrage préalable — appliquez le filtre THEN effectuez la recherche (correct, mais potentiellement lent sans métadonnées indexées)
  • Filtrage ultérieur — effectuez la recherche, puis éliminez les éléments qui ne correspondent pas (rapide, mais peut ne renvoyer aucun résultat)

Les systèmes de production effectuent un filtrage préalable avec des index de métadonnées adaptés.

Recherche hybride vectorielle et par mots-clés

Combinez la recherche sémantique avec la recherche classique par mots-clés BM25. Exécutez les deux, puis combinez les scores (la fusion réciproque des rangs est la méthode standard) :

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])

Mutualisation

Dans le SaaS, chaque requête doit être filtrée par l’identifiant du locataire. Codez ce filtre en dur dans votre enveloppe de récupération afin qu’il ne puisse pas être oublié :

def search(query, tenant_id, top_k=5):
    return index.query(
        vector=embed(query),
        top_k=top_k,
        filter={'tenant_id': tenant_id}
    )

Contrôle d’accès via les métadonnées

Stockez les autorisations des utilisateurs et des rôles dans les métadonnées :

metadata = {
    'visibility': 'public',         # or 'internal', 'restricted'
    'department': 'engineering',
    'allowed_roles': ['engineer', 'manager']
}

# At query time:
filter = {'allowed_roles': {'$contains': current_user_role}}

Accentuation de la récence

Pour privilégier les documents les plus récents, récupérez davantage de candidats, puis recalculez leur score en fonction de la récence :

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]

Surveillez la cardinalité des métadonnées

Des métadonnées à forte cardinalité (des millions de valeurs uniques) produisent des index volumineux. Préagrégez lorsque c’est possible : stockez par exemple l’année et le mois au lieu de l’horodatage complet pour le filtrage temporel.

Filtre permanent

Quel filtre tout agent mutualisé doit-il ALWAYS inclure ?

Récapitulatif

Les filtres de métadonnées limitent votre recherche. Combinez-les avec une recherche hybride (vectorielle + BM25) pour obtenir les meilleurs résultats. La mutualisation et le contrôle d’accès reposent sur ce mécanisme.

Questions Fréquemment Posées

La leçon « Filtrage des métadonnées pour la recherche hybride » est-elle gratuite ?

Oui — le texte complet de « Filtrage des métadonnées pour la recherche hybride » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Filtrage des métadonnées pour la recherche hybride » ?

Combinez la similarité vectorielle avec des filtres structurés (date, auteur, étiquette) pour obtenir une recherche précise et contextualisée. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Filtrage des métadonnées pour la recherche hybride » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pinecone, Weaviate, Qdrant : comparaison
  2. Filtrage des métadonnées pour la recherche hybride
  3. Mettre à jour et supprimer des vecteurs
  4. Choisir les métriques de distance (cosinus, L2, produit scalaire)
← Retour à AI Agents