Partager via


Éliminer les instances vectorielles facultatives du stockage

Recherche Azure AI stocke plusieurs copies de champs vectoriels utilisés dans des charges de travail spécifiques. Si vous n’avez pas besoin de prendre en charge un comportement spécifique, comme retourner des vecteurs bruts dans une réponse de requête, vous pouvez définir des propriétés dans l’index qui omettent le stockage pour cette charge de travail.

Prérequis

  • Champs vectoriels dans un index de recherche avec une configuration vectorSearch, à l’aide des algorithmes HNSW (Hierarchical Navigable Small Worlds) ou des algorithmes K-plus proche voisin complets (KNN) et d’un nouveau profil vectoriel.

Comment sont stockés les champs vectoriels

Pour chaque champ vectoriel, il peut y avoir trois copies des vecteurs, chacune servant un objectif différent :

Instance Utilisation Contrôlé en utilisant
Des vecteurs sources qui stockent le JSON reçu lors de l’indexation des documents Utilisé pour l’actualisation incrémentielle des données avec merge ou mergeOrUpload lors de l’indexation des documents. Utilisé aussi si vous voulez des vecteurs « récupérables » retournés dans la réponse de la requête. Propriété stored sur des champs vectoriels
Vecteurs de précision complète d’origine Dans les index existants, ceux-ci sont utilisés pour les opérations d’index internes et pour la recherche KNN exhaustive. Pour les vecteurs utilisant la compression, elle est également utilisée pour le rescoring (s’il est activé) sur un ensemble de résultats candidats suréchantillonnés provenant de la recherche ANN sur des champs vectoriels en utilisant la compression de quantification scalaire ou binaire. Propriété rescoringOptions.rescoreStorageMethod dans vectorSearch.compressions. Pour des champs vectoriels non compressés sur des index créés avec des versions d’API 2024-11-01-Preview et ultérieures, ceci sera omis par défaut sans impact sur les activités de recherche ni sur la qualité.
Vecteurs dans le graphique HNSW pour la recherche approximative des voisins les plus proches (ANN) Utilisé pour l’exécution des requêtes ANN. Se compose de vecteurs de précision intégrale (quand aucune compression n’est appliquée) ou de vecteurs quantifiés (quand une compression est appliquée) S’applique seulement à HNSW. Ces structures de données sont requises pour une recherche ANN efficace.

Vous pouvez définir des propriétés qui ignorent définitivement les deux premières instances du stockage vectoriel.

La dernière instance (vecteurs et graphiques) est requise pour l’exécution de requête vectorielle ANN. Si des techniques de compression telles que la quantification scalaire ou binaire sont utilisées, elles sont appliquées à cet ensemble de données. Si vous voulez compenser la compression avec perte, vous devez conserver la deuxième instance à des fins de rescoring pour améliorer la qualité de la recherche ANN.

Définir la propriété stored

La propriété stored est une valeur booléenne sur une définition de champ vectoriel qui détermine si le stockage est alloué pour le contenu de champ vectoriel récupérable (l’instance source). La propriété stored a la valeur true par défaut. Si vous n'avez pas besoin de contenu vectoriel brut dans une réponse de requête, vous pouvez économiser jusqu'à 50 % de stockage par champ en définissant la valeur stored sur false.

Considérations pour définir stored sur la valeur false :

  • Étant donné que les vecteurs ne sont pas lisibles par l’être humain, vous pouvez les omettre des résultats envoyés aux grands modèles de langage dans des scénarios RAG et des résultats rendus sur une page de recherche. Conservez-les toutefois si vous utilisez des vecteurs dans un processus en aval qui consomme un contenu vectoriel.

  • Toutefois, si votre stratégie d’indexation inclut des mises à jour partielles de documents, telles que « merge » ou « mergeOrUpload » sur un document existant, paramétrer stored=false empêche les mises à jour de contenu sur ces champs pendant la fusion. Sur chaque opération « merge » ou « mergeOrUpload » sur un document de recherche, vous devez fournir les champs vectoriels dans leur intégralité, ainsi que les champs non-vectoriels que vous mettez à jour, sinon le vecteur est supprimé.

Important

La définition de l’attribution stored=false est irréversible. Cette propriété peut être définie seulement quand vous créez l’index et elle n’est autorisée que sur les champs vectoriels. La mise à jour d’un index existant avec de nouveaux champs vectoriels ne peut pas définir cette propriété sur false. Si vous souhaitez que le contenu vectoriel soit récupérable ultérieurement, vous devez supprimer et reconstruire l’index, ou créer et charger un nouveau champ doté de la nouvelle attribution.

Pour les nouveaux champs vectoriels dans un index de recherche, définissez stored sur false pour supprimer définitivement le stockage récupérable pour le champ vectoriel. L’exemple suivant montre une définition de champ vectoriel avec la propriété stored.

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
  Content-Type: application/json  
  api-key: [admin key]  

    { 
      "name": "demo-index", 
      "fields": [ 
        { 
          "name": "vectorContent", 
          "type": "Collection(Edm.Single)", 
          "retrievable": false, 
          "stored": false, 
          "dimensions": 1536, 
          "vectorSearchProfile": "vectorProfile" 
        } 
      ] 
    } 

Résumé des points clés

  • S’applique aux champs ayant un type de données vectorielle.

  • Affecte le stockage sur disque, pas la mémoire, et n'a aucun effet sur les requêtes. L’exécution de requête utilise un index vectoriel distinct qui n’est pas affecté par la propriété stored, car cette copie du vecteur est toujours stockée.

  • La propriété stored est définie lors de la création de l'index sur les champs vectoriels et est irréversible. Si vous souhaitez que le contenu soit récupérable ultérieurement, vous devez supprimer et reconstruire l'index, ou créer et charger un nouveau champ doté de la nouvelle attribution.

  • Les valeurs par défaut sont stored définies sur true et retrievable sur false. Dans une configuration par défaut, une copie récupérable est stockée, mais elle n'est pas automatiquement renvoyée dans les résultats. Lorsque stored c'est vrai, vous pouvez basculer retrievable entre vrai et faux à tout moment sans avoir à reconstruire un index. Quand stored est faux, retrievable doit être faux et ne peut pas être modifié.

Définir la propriété rescoreStorageMethod

Remarque

Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

La propriété rescoreStorageMethod contrôle le stockage de vecteurs de précision intégrale quand la compression est utilisée.

Pour des champs vectoriels non compressés sur des index créés avec des versions d’API 2024-11-01-Preview et ultérieures, ceci sera omis par défaut sans impact sur les activités de recherche ni sur la qualité. Pour les champs vectoriels existants créés avant cette version de l’API, il n’existe aucune possibilité de supprimer cette copie des données sur place.

Sur une compression vectorielle, la propriété rescoreStorageMethod est définie par défaut sur preserveOriginals, qui conserve les vecteurs de précision intégrale pour les fonctionnalités de suréchantillonnage et de rescoring afin de réduire l’effet de la compression avec perte sur le graphe HNSW. Si vous n’utilisez pas ces fonctionnalités, vous pouvez réduire le stockage vectoriel en définissant rescoreStorageMethod sur discardOriginals.

Important

La définition de la propriété rescoreStorageMethod est irréversible et va entraîner différents niveaux de perte de qualité de la recherche en fonction de la méthode de compression. Ceci peut être défini sur les index créés avec la version 2024-11-01-Preview ou ultérieure, lors de la création de l’index ou de l’ajout de nouveaux champs vectoriels.

Si vous prévoyez d’utiliser une quantification scalaire ou binaire, nous vous recommandons de conserver rescoreStorageMethod défini sur preserveOriginals pour maximiser la qualité de la recherche.

Pour définir cette propriété :

  1. Utilisez les API REST Créer un index ou Créer ou mettre à jour l’index 2024-11-01-preview, ou une version bêta du Kit de développement logiciel (SDK) Azure fournissant la fonctionnalité.

  2. Ajoutez une section vectorSearch à votre index avec des profils, des algorithmes et des compressions.

  3. Sous compressions, ajoutez rescoringOptions avec enableRescoring défini sur true, defaultOversampling défini sur un entier positif et rescoreStorageMethod défini sur preserveOriginals .

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-11-01-preview
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                }
            ],
            "algorithms": [
              {
                "name": "myHnsw",
                "kind": "hnsw",
                "hnswParameters": {
                  "metric": "cosine",
                  "m": 4,
                  "efConstruction": 400,
                  "efSearch": 500
                },
                "exhaustiveKnnParameters": null
              }
            ],
            "compressions": [
                {
                    "name": "myScalarQuantization",
                    "kind": "scalarQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "preserveOriginals"
                    },
                    "scalarQuantizationParameters": {
                        "quantizedDataType": "int8"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }