Filtrage des métadonnées avec Zilliz Cloud Pipelines
Une question fréquente que j’entends est : « Ai-je besoin d’une base de données SQL classique en plus de ma base de données vectorielle ? » Cette question peut être nécessaire si vous incluez des informations supplémentaires avec les données non structurées. De plus, vous pouvez filtrer les données à des fins métier avant d’effectuer une recherche par similarité sémantique. Par exemple :
Dans un contexte juridique, vous pouvez avoir besoin de rechercher des fragments de texte uniquement dans votre base de données de contrats ou dans un contrat spécifique.
Dans le commerce de détail, vous pouvez vouloir restreindre votre recherche à une pointure particulière de chaussures pour hommes.
Dans la recherche d’images, vous pouvez souhaiter trouver des affiches de films sortis entre 2010 et 2016, avec des scores IMDB supérieurs à 7,0.
Pour revenir à la question ci-dessus, ma réponse est : « Non, vous n’avez pas à vous en soucier lorsque vous utilisez la base de données vectorielle Milvus ou Zilliz Cloud, la version Milvus entièrement gérée. » Avec Milvus, vous pouvez effectuer une recherche hybride vectorielle et scalaire pour obtenir une meilleure précision.
Dans les sections suivantes, nous aborderons le filtrage scalaire ou par métadonnées, ainsi que la manière dont vous pouvez effectuer un filtrage par métadonnées dans Zilliz Cloud. Ce blog fait suite à mon précédent blog sur la prise en main de RAG en seulement 5 minutes. Vous pouvez trouver son code dans ce notebook et faire défiler jusqu’à la cellule nº 27.
Comment comprendre le filtrage par métadonnées dans Milvus ?
La base de données vectorielle Milvus vous permet d’effectuer des recherches vectorielles en appliquant des expressions booléennes et en les limitant au moyen de conditions sur les attributs de vos données. Les attributs peuvent être n’importe quel champ, à l’exception du vecteur d’embedding des données non structurées. De plus, le filtrage par métadonnées coexiste avec la recherche vectorielle dans Milvus. Vous pouvez utiliser n’importe quel champ autre que le champ du vecteur d’embedding dans l’expression de filtre et utiliser l’index vectoriel pour rechercher dans le champ du vecteur d’embedding. Milvus gère automatiquement les deux opérations lorsque vous spécifiez une expression de filtre dans votre commande de recherche.
Comment effectuer un filtrage par métadonnées dans Zilliz Cloud ?
Pour commencer à itérer rapidement, j’utiliserai Zilliz Cloud (Free Tier), la version Milvus entièrement gérée, dans ce guide. Elle héberge votre base de données sur un serveur cloud serverless, mais vous pouvez toujours interagir avec elle localement en effectuant des appels à l’API PyMilvus. J’utiliserai également Zilliz Cloud Pipelines, une fonctionnalité intégrée, pour encoder les données non structurées en embeddings vectoriels afin de simplifier les opérations.
Les données ci-dessous proviennent des pages de notre documentation Milvus Documentation.
Étape 1 : Créer une collection (table de base de données) et des pipelines
Téléversez vos données vers S3 ou GCS.
Ouvrez une autre fenêtre de navigateur vers https://cloud.zilliz.com/ et créez un cluster « Starter ».
- Ajoutez le nom de la collection et cliquez sur « Créer une collection et un cluster ».
Remarque : Lorsque vous créez votre premier cluster Zilliz Cloud, vous créez également une nouvelle collection par défaut. Lorsque vous utilisez Zilliz Cloud Pipelines, vous créerez une autre nouvelle collection.
- Parcourez le menu de gauche jusqu’à Pipelines et suivez les étapes guidées pour téléverser vos données.
a. Commencez par « Pipeline d’ingestion ».
b. Sélectionnez le nom de votre cluster, ajoutez les noms de la collection et du pipeline, puis cliquez sur « Ajouter une fonction ».
c. Ajoutez un nom, puis cliquez sur « Add ». À cette étape du pipeline, vous ne pouvez rien modifier.
d. Facultatif : cliquez à nouveau sur « Add a Function »
e. Facultatif : nommez l’étape du champ de métadonnées, le champ de métadonnées et le type. Cliquez sur « Add ».
- Cliquez sur « Create Ingestion Pipeline ». Vous avez maintenant créé un nouveau pipeline d’ingestion et une nouvelle collection.
Cliquez sur « Create Deletion and Search Pipelines » pour créer des pipelines de suppression et de recherche.
Pour trouver le pipeline « Ingestion », cliquez sur l’icône Run > sous « Actions ».
- Pointez vers vos données. Dans AWS, le moyen le plus simple est une URL pré-signée temporaire. Sélectionnez quand vous souhaitez la partager, puis copiez l’URL pré-signée.
- Collez l’URL pré-signée et cliquez sur « Run ».
- Actualisez votre navigateur et vérifiez si la nouvelle collection et le schéma sont corrects.
Interrogez dans la console web ou à l’aide d’appels API.
Étape 2. Rechercher dans la console web
Trouvez le pipeline « Search » sous Actions > cliquez sur l’icône Run.
Dans l’interface utilisateur, saisissez votre question et cliquez sur « Run ».
Modifiez le « filter » à l’aide d’une expression booléenne. Vous devriez constater que le filtre a été appliqué aux résultats de recherche.
C’est tout ! Vous pouvez utiliser des expressions booléennes pour filtrer la recherche en utilisant n’importe quel champ autre que le vecteur d’intégration des données non structurées. Le champ du vecteur d’intégration est recherché à l’aide de l’index vectoriel AUTOINDEX dans Pipelines.
De plus, dans Pipelines, les intégrations sont normalisées afin que les métriques IP et distance cosinus fonctionnent de manière équivalente. Le modèle d’intégration par défaut utilisé dans Pipelines, pour le moment, est bge-large-en-v1.5.
Étape 3. Rechercher via API
Vous pouvez également effectuer une recherche à l’aide d’appels API (le code Python se trouve dans ce notebook ; faites défiler jusqu’à Cell#27. )
Vous aurez besoin de deux éléments.
Jeton API Zilliz
Pipeline-ID
Vous pouvez obtenir le jeton API depuis l’écran principal du cluster.
Pour obtenir le Pipeline-ID, trouvez le pipeline « Search », regardez dans la colonne « Pipeline-ID » et cliquez sur l’icône de copie. Collez le Pipeline ID dans l’URL de votre appel API.
import requests, json
url = "https://controller.api.gcp-us-west1.zillizcloud.com/v1/pipelines/pipe-xxxx/run"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {TOKEN}",
}
data = {
"data": {
"query_text": SAMPLE_QUESTION
},
"params": {
"limit": TOP_K,
"offset": 0,
# Any of these fields can be used in filter expression.
"outputFields": ["chunk_text", "chunk_id", "doc_name", "source"],
"filter": "doc_name == 'param.html'"
}
}
# Send the POST request
response = requests.post(url, headers=headers, json=data)
C’est tout ! Vous avez maintenant appris à effectuer une recherche par filtre dans Zilliz Cloud via API.
Résumé
Comme la jointure de données dans une base de données SQL vous permet d’effectuer des requêtes SQL, le filtrage des métadonnées vous permet d’effectuer des recherches hybrides vectorielles et scalaires dans Milvus ou Zilliz Cloud pour obtenir des résultats plus précis, adaptés à vos besoins spécifiques. Vous pouvez limiter votre recherche avec certaines conditions en spécifiant des expressions booléennes qui filtrent les champs scalaires ou le champ de clé primaire. Vous pouvez utiliser n’importe quel champ, à l’exception du vecteur d’intégration, dans l’expression de filtre et rechercher dans le champ du vecteur d’intégration à l’aide de l’index vectoriel. Milvus ou Zilliz Cloud gère automatiquement les deux opérations lorsque vous spécifiez une expression de filtre dans votre commande de recherche.
Le code complet de cette démo se trouve dans ce notebook ; faites défiler jusqu’à la cellule n° 27. Essayez-le.
Continuer à lire

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
Discover VDBBench 1.0, an open-source tool for benchmarking vector databases with real-world production data, streaming ingestion, and concurrent workloads.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.

DeepRAG: Thinking to Retrieval Step by Step for Large Language Models
Discover DeepRAG, an advanced retrieval-augmented generation (RAG) model that improves LLM accuracy by retrieving only essential data through step-by-step reasoning.



