Partager via


Mosaic AI Vector Search (Recherche Vectorielle AI Mosaic)

Cet article donne une vue d’ensemble de la Recherche vectorielle d’IA de Mosaïque, y compris ce qu’elle est et comment elle fonctionne.

Mosaic AI Vector Search est une solution de recherche vectorielle intégrée à databricks Data Intelligence Platform et intégrée à ses outils de gouvernance et de productivité. La recherche vectorielle est un type de recherche optimisé pour la récupération d’incorporations. Les incorporations sont des représentations mathématiques du contenu sémantique des données, généralement du texte ou des données d’image. Les incorporations sont générées par un modèle de langage volumineux et sont un composant clé de nombreuses applications IA génératives qui dépendent de la recherche de documents ou d’images similaires les uns aux autres. Par exemple, les systèmes RAG, les systèmes de recommandation et la reconnaissance d’images et de vidéos.

Avec Mosaic AI Vector Search, vous créez un index de recherche vectorielle à partir d’une table Delta. L’index inclut des données incorporées avec des métadonnées. Vous pouvez ensuite interroger l’index à l’aide d’une API REST pour identifier les vecteurs les plus similaires et retourner les documents associés. Vous pouvez structurer l’index pour qu’il soit automatiquement synchronisé lorsque la table Delta sous-jacente est mise à jour.

La recherche vectorielle de Mosaic AI prend en charge les éléments suivants :

Comment la recherche vectorielle de Mosaic AI fonctionne-t-elle ?

La recherche vectorielle de Mosaic AI utilise l’algorithme HNSW (Hierarchical Navigable Small World) pour ses recherches de voisins approximatifs (ANN) et la métrique de distance L2 pour mesurer la similarité du vecteur d'incorporation. Si vous souhaitez utiliser la similarité cosinus, vous devez normaliser vos incorporations de points de données avant de les introduire dans la recherche vectorielle. Lorsque les points de données sont normalisés, le classement produit par la distance L2 est identique au classement produit par la similarité cosinus.

Mosaic AI Vector Search prend également en charge la recherche par similarité de mot clé hybride, qui combine la recherche incorporée basée sur des vecteurs avec des techniques de recherche traditionnelles basées sur des mots clés. Cette approche trouve des correspondances de mots exacts dans la requête tout en utilisant également une recherche par similarité basée sur des vecteurs pour capturer les relations sémantiques et le contexte de la requête.

En intégrant ces deux techniques, la recherche par similarité de mot clé hybride récupère non seulement les documents qui contiennent les mots clés exacts, mais aussi ceux qui sont conceptuellement similaires, fournissant des résultats de recherche plus complets et pertinents. Cette méthode est particulièrement utile dans les applications RAG où les données sources contiennent des mots clés uniques tels que des références SKU ou des identificateurs qui ne sont pas bien adaptés à une recherche par similarité pure.

Pour plus d’informations sur l’API, consultez la référence du Kit de développement logiciel (SDK) Python et interroger un index de recherche vectorielle.

Calcul de recherche de similarité

Le calcul de recherche de similarité utilise la formule suivante :

inverse de 1 plus la distance carrée

dist est la distance euclidienne entre la requête q et l’entrée d’index x:

Distance euclidienne, racine carrée de la somme des différences au carré

Algorithme de recherche par mot clé

Les scores de pertinence sont calculés en utilisant Okapi BM25. Toutes les colonnes de texte ou de chaîne sont recherchées, y compris le texte source incorporé et les colonnes de métadonnées au format texte ou chaîne. La fonction de tokenisation se fractionne aux limites du mot, supprime la ponctuation et convertit tout le texte en minuscules.

Combinaison de la recherche par similarité et de la recherche par mots clé

Les résultats de la recherche par similarité et de la recherche par mots clés sont combinés en utilisant la fonction de fusion de classement réciproque (RRF, Mutual Rank Fusion).

RRF rescoree d’abord chaque document de chaque méthode à l’aide des scores :

Équation RRF pour ANN

Équation RRF pour la recherche de mots clés

rrf_param contrôle l’importance relative des documents mieux classés et moins bien classés. D’après la littérature, rrf_param est réglé à 60.

Les scores sont normalisés afin que le score le plus élevé soit 1 à l’aide du facteur de normalisation suivant :

normalisation

Le score final pour chaque document est calculé comme suit :

score final

Les documents avec les scores finaux les plus élevés sont retournés.

Options de fourniture des incorporations vectorielles

Pour créer un index de recherche vectorielle dans Databricks, vous devez d’abord décider comment fournir des incorporations vectorielles. Databricks prend en charge trois options.

Option 1 : Index delta sync avec incorporations calculées par Databricks

Avec cette option, vous fournissez une table Delta source qui contient des données au format texte. Databricks calcule les incorporations à l’aide d’un modèle que vous spécifiez et enregistre éventuellement les incorporations dans une table du catalogue Unity. À mesure que la table Delta est mise à jour, l’index reste synchronisé avec la table Delta.

Le diagramme suivant illustre ce processus :

  1. Calculer les incorporations de requêtes. La requête peut inclure des filtres de métadonnées.
  2. Effectuer une recherche de similarités pour identifier les documents les plus pertinents.
  3. Retourner les documents les plus pertinents et les ajouter à la requête.

index de recherche vectorielle, Databricks calcule les incorporations

Option 2 : Delta Sync Index avec des incorporations autogéées

Avec cette option, vous fournissez une table Delta source qui contient des incorporations précalculées. À mesure que la table Delta est mise à jour, l’index reste synchronisé avec la table Delta.

Note

Il n’est pas possible de convertir un index incorporé auto-managé en index managé Databricks. Si vous décidez ultérieurement d’utiliser des incorporations managées, vous devez créer un index et recompiler des incorporations.

Le diagramme suivant illustre ce processus :

  1. La requête se compose d’incorporations et peut inclure des filtres de métadonnées.
  2. Effectuer une recherche de similarités pour identifier les documents les plus pertinents. Retourner les documents les plus pertinents et les ajouter à la requête.

index de recherche vectorielle, incorporations précalculées

Option 3 : Index d’accès vectoriel direct

Avec cette option, vous devez mettre à jour manuellement l’index à l’aide de l’API REST lorsque la table incorporée change.

Le diagramme suivant illustre ce processus :

index de recherche vectorielle, incorporations précalculées sans synchronisation automatique

Options de point de terminaison

Mosaïque AI Vector Search fournit les options suivantes pour vous permettre de sélectionner la configuration du point de terminaison qui répond aux besoins de votre application.

Note

Les points de terminaison optimisés pour le stockage sont en préversion publique.

  • Les points de terminaison standard ont une capacité de 320 millions de vecteurs à la dimension 768.
  • Les points de terminaison optimisés pour le stockage disposent d’une plus grande capacité (plus d’un milliard de vecteurs à la dimension 768) et fournissent une indexation 10-20 fois plus rapide. Les requêtes sur les points de terminaison optimisés pour le stockage ont une latence légèrement accrue d’environ 250 msec. La tarification de cette option est optimisée pour le plus grand nombre de vecteurs. Pour plus d’informations sur la tarification, consultez la page de tarification de la recherche vectorielle. Pour plus d’informations sur la gestion des coûts de recherche vectorielle, consultez le guide de recherche vectorielle de mosaïque IA : Cost management guide.

Vous spécifiez le type de point de terminaison lorsque vous créez le point de terminaison.

Consultez également les limitations des points de terminaison optimisés pour le stockage.

Pour utiliser Mosaic AI Vector Search, vous devez créer les éléments suivants :

  • Un point de terminaison de recherche vectorielle. Ce point de terminaison sert l’index de recherche vectorielle. Vous pouvez interroger et mettre à jour le point de terminaison à l’aide de l’API REST ou du kit de développement logiciel (SDK). Consultez Créer un point de terminaison de recherche vectorielle pour obtenir des instructions.

    Les points d'accès s'adaptent automatiquement pour prendre en charge la taille de l’index ou le nombre de requêtes simultanées. Les points de terminaison optimisés pour le stockage sont réduits automatiquement lorsqu’un index est supprimé. Les points de terminaison standard ne se réduisent pas automatiquement en échelle.

  • Index de recherche vectorielle. L’index de recherche vectorielle est créé à partir d’une table Delta et est optimisé pour fournir des recherches approximatives des plus proches voisins (ANN) en temps réel. L’objectif de la recherche est d’identifier les documents similaires à la requête. Les index de recherche vectorielle s’affichent dans le catalogue Unity où ils sont aussi régis. Consultez Créer un index de recherche vectorielle pour obtenir des instructions.

De plus, si vous choisissez Databricks pour calculer les incorporations, vous pouvez utiliser un point de terminaison d’API Foundation Model préconfiguré ou créer un point de terminaison de service de modèles pour servir le modèle d’incorporation de votre choix. Pour obtenir des instructions, consultez API Foundation Model de paiement par jeton ou Créer des points de terminaison de service de modèles de base.

Pour interroger le point de terminaison de service du modèle, vous devez utiliser l’API REST ou le kit de développement logiciel (SDK) Python. Votre requête peut définir des filtres en fonction de n’importe quelle colonne de la table Delta. Pour plus d’informations, consultez Utiliser des filtres sur les requêtes, la référence de l’API ou la référence du kit de développement logiciel (SDK) Python.

Spécifications

L’autorisation de créer et de gérer des points de terminaison de recherche vectorielle est configurée à l’aide de listes de contrôle d’accès. Consultez les Listes ACL de point de terminaison de recherche vectorielle.

la protection et l’authentification des données

Databricks implémente les contrôles de sécurité suivants pour protéger vos données :

  • Chaque requête d’un client adressée à Mosaic AI Vector Search est logiquement isolée, authentifiée et autorisée.
  • Mosaic AI Vector Search chiffre toutes les données au repos (AES-256) et en transit (TLS 1.2+).

Mosaic AI Vector Search prend en charge deux modes d’authentification, de principaux de service et de jetons d’accès personnels (PAT). Pour les applications de production, Databricks recommande d’utiliser des principaux de service, qui peuvent avoir des performances par requête jusqu’à 100 msec plus rapides par rapport aux jetons d’accès personnels.

  • Jeton du principal de service. Un administrateur peut générer un jeton de principal de service et le transmettre au Kit de développement logiciel (SDK) ou à l’API. Consultez Utiliser des principaux de service. Pour les cas d’utilisation en production, Databricks recommande d’utiliser un jeton de principal de service.

    # Pass in a service principal
    vsc = VectorSearchClient(workspace_url="...",
            service_principal_client_id="...",
            service_principal_client_secret="..."
            )
    
  • Jeton d’accès personnel. Vous pouvez utiliser un jeton d’accès personnel pour vous authentifier auprès de la recherche vectorielle d’IA de Mosaic. Consultez jeton d’authentification d’accès personnel. Si vous utilisez le Kit de développement logiciel (SDK) dans un environnement de notebook, le SDK génère automatiquement un jeton PAT pour l’authentification.

    # Pass in the PAT token
    client = VectorSearchClient(workspace_url="...", personal_access_token="...")
    

Les clés gérées par le client (CMK) sont prises en charge sur les points de terminaison créés à partir du 8 mai 2024.

Surveiller l’utilisation et les coûts

Le tableau du système d'utilisation facturable vous permet de surveiller l'utilisation et les coûts associés aux index de recherche vectorielle et aux points de terminaison. Voici un exemple de requête :

WITH all_vector_search_usage (
  SELECT *,
         CASE WHEN usage_metadata.endpoint_name IS NULL THEN 'ingest'
              WHEN usage_type = "STORAGE_SPACE" THEN 'storage'
              ELSE 'serving'
        END as workload_type
    FROM system.billing.usage
   WHERE billing_origin_product = 'VECTOR_SEARCH'
),
daily_dbus AS (
  SELECT workspace_id,
       cloud,
       usage_date,
       workload_type,
       usage_metadata.endpoint_name as vector_search_endpoint,
       CASE WHEN workload_type = 'serving' THEN SUM(usage_quantity)
            WHEN workload_type = 'ingest' THEN SUM(usage_quantity)
            ELSE null
            END as dbus,
       CASE WHEN workload_type = 'storage' THEN SUM(usage_quantity)
            ELSE null
            END as dsus
 FROM all_vector_search_usage
 GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus

Vous pouvez également interroger l’utilisation par stratégie budgétaire. Consultez Mosaic AI Vector Search : Politiques budgétaires.

Pour plus d’informations sur le contenu de la table d’utilisation de facturation, consultez les informations de référence sur la table système d’utilisation facturable. Des requêtes supplémentaires se trouvent dans l’exemple de notebook suivant.

Notebook de requêtes de tables système de recherche vectorielle

Obtenir un ordinateur portable

Limites de taille des ressources et des données

Le tableau suivant récapitule les limites de taille des ressources et des données pour les points de terminaison et les index de recherche vectorielle :

Resource Granularité Limit
Points de terminaison de recherche vectorielle Par espace de travail 100
Intégrations (index de synchronisation Delta) Par point de terminaison standard ~ 320 000 000 à 768 dimensions d’intégration
~ 160 000 000 à 1536 dimensions d’intégration
~ 80 000 000 à 3072 dimensions d’intégration
(mise à l’échelle approximativement linéairement)
Incorporations (index d’accès vectoriel direct) Par point de terminaison standard ~ 2 000 000 à 768 dimensions d’intégration
Embeddings (point de terminaison optimisé pour le stockage) Par point de terminaison optimisé pour le stockage ~ 1 000 000 000 à 768 dimensions d’intégration
Dimension d’incorporation Par index 4096
Indexes Par point de terminaison 50
Columns Par index 50
Columns Types pris en charge : Octets, short, integer, long, float, double, boolean, string, timestamp, date, array
Champs de métadonnées Par index 50
Nom d’index Par index 128 caractères

Les limites suivantes s’appliquent à la création et à la mise à jour des index de recherche vectorielle :

Resource Granularité Limit
Taille de ligne pour l’index Delta Sync Par index 100 Ko
Intégration de la taille de la colonne source dans l’index Delta Sync Par index 32764 octets
Limite de taille de requête upsert en bloc pour l’index Direct Vector Par index 10 Mo
Limite de taille des requêtes de suppression en bloc pour l’index Direct Vector Par index 10 Mo

Les limites suivantes s’appliquent à l’API de requête.

Resource Granularité Limit
Longueur du texte de requête Par requête 32764 caractères
Jetons dans le cadre de l’utilisation de la recherche hybride Par requête 1024 mots ou 2 octets
Conditions de filtre Par clause de filtre 1024 éléments
Nombre maximal de résultats retournés (recherche approximative du voisin le plus proche) Par requête 10 000
Nombre maximal de résultats retournés (recherche de similarité de mot clé hybride) Par requête 200

Limites

  • Le nom de colonne _id est réservé. Si votre table source a une colonne nommée _id, renommez-la avant de créer un index de recherche vectorielle.
  • Les autorisations au niveau de la ligne et de la colonne ne sont pas prises en charge. Vous pouvez toutefois implémenter vos propres listes de contrôle (ACL) au niveau de l’application à l’aide de l’API de filtre.
  • Vous ne pouvez pas cloner un index dans un autre espace de travail. Vous pouvez effectuer des requêtes inter-espaces de travail à l’aide du Kit de développement logiciel (SDK) Databricks ou de l’API REST.

Limitations des points de terminaison optimisés pour le stockage

Les limitations de cette section s’appliquent uniquement aux points de terminaison optimisés pour le stockage. Les points de terminaison optimisés pour le stockage sont en préversion publique.

  • Le mode de synchronisation continue n’est pas pris en charge.
  • La synchronisation des colonnes n'est pas prise en charge.
  • La dimension d’incorporation doit être divisible par 16.
  • La mise à jour incrémentielle est partiellement prise en charge. Chaque synchronisation doit reconstruire des parties de l’index de recherche vectorielle.
    • Pour les index managés, les incorporations précédemment calculées sont réutilisées si la ligne source n’a pas changé.
    • Vous devriez anticiper une réduction significative du temps nécessaire pour une synchronisation, de bout en bout, par rapport aux points de terminaison habituels. Les jeux de données avec 1 milliard d’incorporations doivent effectuer une synchronisation en moins de 8 heures. Les jeux de données plus petits prennent moins de temps pour la synchronisation.
  • Les espaces de travail conformes à FedRAMP ne sont pas pris en charge.
  • Les clés gérées par le client (CMK) ne sont pas prises en charge.
  • Pour utiliser un modèle d’incorporation personnalisé pour un index Delta Sync managé, la requête AI pour les modèles personnalisés et la préversion des modèles externes doivent être activées. Consultez Gérer les préversions d’Azure Databricks pour découvrir comment activer les préversions.
  • Les points de terminaison optimisés pour le stockage prennent en charge jusqu’à 1 milliard d’incorporations de vecteurs de 768 dimensions. Si vous avez un cas d’utilisation à grande échelle, contactez votre équipe de compte.

Ressources supplémentaires