Share via


Configurer un vectoriseur dans un index de recherche

Dans Recherche Azure AI, un vectoriseur est un logiciel qui effectue une vectorisation, telle qu’un modèle d’incorporation déployé sur Azure OpenAI qui convertit du texte (ou des images) en vecteurs pendant l’exécution de la requête.

Il est défini dans un index de recherche qui s’applique aux champs vectoriels pouvant faire l’objet d’une recherche et est utilisé au moment de la requête afin de générer une incorporation pour une entrée de requête de texte ou d’image. Si vous devez plutôt vectoriser du contenu dans le cadre du processus d’indexation, reportez-vous à Vectorisation intégrée (préversion). Pour la vectorisation intégrée pendant l’indexation, vous pouvez configurer un indexeur et un ensemble de compétences qui appellent un modèle d’incorporation pour votre contenu en texte brut.

Pour ajouter un vectoriseur à l’index de recherche, vous pouvez utiliser le concepteur d’index dans le Portail Azure, ou appeler l’API REST Créer ou mettre à jour l’index 2024-05-01-preview, ou utiliser n’importe quel package du kit de développement logiciel (SDK) bêta Azure mis à jour pour fournir cette fonctionnalité.

Prérequis

Nous vous recommandons d’activer la journalisation des diagnostics sur votre service de recherche pour confirmer l’exécution des requêtes vectorielles.

Essayer un vectoriseur avec des exemples de données

L’Assistant Importation et vectorisation des données lit les fichiers à partir du stockage Blob Azure, crée un index avec des champs segmentés et vectorisés et ajoute un vectoriseur. Par conception, le vectoriseur créé par l’Assistant est défini sur le même modèle d’incorporation utilisé pour indexer le contenu de l’objet blob.

  1. Chargez des exemples de fichiers de données dans un conteneur sur Stockage Azure. Nous avons utilisé quelques petits fichiers texte du livre terrestre de la NASA pour tester ces instructions sur un service de recherche gratuit.

  2. Exécutez l’Assistant Importation et vectorisation des données, en choisissant le conteneur d’objets blob pour la source de données.

    Capture d’écran de l’onglet Connexion à vos données.

  3. Choisissez un déploiement existant de text-embedding-ada-002. Ce modèle génère des incorporations pendant l’indexation et est également utilisé pour configurer le vectoriseur utilisé pendant les requêtes.

    Capture d’écran de la page de vectorisation et d’enrichissement des données.

  4. Une fois l’Assistant terminé et que tout le traitement de l’indexeur est terminé, vous devez disposer d’un index avec un champ vectoriel pouvant faire l’objet d’une recherche. La définition JSON du champ ressemble à ceci :

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. Vous devez également avoir un profil vectoriel et un vectoriseur, comme dans l’exemple suivant :

    "profiles": [
       {
         "name": "vector-nasa-ebook-text-profile",
         "algorithm": "vector-nasa-ebook-text-algorithm",
         "vectorizer": "vector-nasa-ebook-text-vectorizer"
       }
     ],
     "vectorizers": [
       {
         "name": "vector-nasa-ebook-text-vectorizer",
         "kind": "azureOpenAI",
         "azureOpenAIParameters": {
           "resourceUri": "https://my-fake-azure-openai-resource.openai.azure.com",
           "deploymentId": "text-embedding-ada-002",
           "modelName": "text-embedding-ada-002",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. Passez à l’avance pour tester votre vectoriseur pour la conversion de texte en vecteur pendant l’exécution de la requête.

Définir un vectoriseur et un profil vectoriel

Cette section explique les modifications apportées à un schéma d’index pour définir manuellement un vectoriseur.

  1. Utilisez Créer ou mettre à jour un index (préversion) pour ajouter vectorizers à un index de recherche.

  2. Ajoutez le code JSON suivant à votre définition d’index. La section Vectorizers fournit des informations de connexion à un modèle d’incorporation déployé. Cette étape montre deux exemples de vectoriseur afin de pouvoir comparer un modèle d’incorporation Azure OpenAI et une API web personnalisée côte à côte.

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "text-embedding-ada-002",
            "modelName": "text-embedding-ada-002",
            "apiKey": "mytopsecretkey"
          }
        },
        {
          "name": "my_custom_vectorizer",
          "kind": "customWebApi",
          "customVectorizerParameters": {
            "uri": "https://my-endpoint",
            "authResourceId": " ",
            "authIdentity": " "
          }
        }
      ]
    
  3. Dans le même index, ajoutez une section de profils vectoriels qui spécifie l’un de vos vectoriseurs. Les profils vectoriels nécessitent également un algorithme de recherche vectorielle utilisé pour créer des structures de navigation.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Attribuez un profil vectoriel à un champ vectoriel. L’exemple suivant montre une collection de champs avec le champ clé requis, un champ de chaîne de titre et deux champs vectoriels avec une attribution de profil vectoriel.

    "fields": [ 
            { 
                "name": "ID", 
                "type": "Edm.String", 
                "key": true, 
                "sortable": true, 
                "analyzer": "keyword" 
            }, 
            { 
                "name": "title", 
                "type": "Edm.String"
            }, 
            { 
                "name": "vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1536, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }, 
            { 
                "name": "my-second-vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1024, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }
    ]
    

Tester un vectoriseur

Utilisez un client de recherche pour envoyer une requête via un vectoriseur. Cet exemple suppose que Visual Studio Code avec un client REST et un exemple d’index.

  1. Dans Visual Studio Code, fournissez un point de terminaison de recherche et une clé API de requête de recherche :

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Collez une demande de requête vectorielle. Veillez à utiliser une préversion de l’API REST.

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2023-10-01-preview  HTTP/1.1
         Content-Type: application/json
         api-key: {{queryApiKey}}
    
         {
             "count": true,
             "select": "title,chunk",
             "vectorQueries": [
                 {
                     "kind": "text",
                     "text": "what cloud formations exists in the troposphere",
                     "fields": "vector",
                     "k": 3,
                     "exhaustive": true
                 }
             ]
         }
    

    Les points clés de la requête sont les suivants :

    • "kind": "text" indique au moteur de recherche que l’entrée est une chaîne de texte et à utiliser le vectoriseur associé au champ de recherche.

    • "text": "what cloud formations exists in the troposphere" est la chaîne de texte à vectoriser.

    • "fields": "vector" est le nom du champ à interroger. Si vous utilisez l’exemple d’index généré par l’Assistant, le champ de vecteur généré est nommé vector.

  3. Envoyez la demande. Vous devez obtenir trois résultats k, où le premier résultat est le plus pertinent.

Remarquez qui n’existe aucune propriété vectoriseur à définir au moment de la requête. La requête lit les propriétés de vectoriseur, conformément à l’attribution de champ de profil vectoriel dans l’index.

Inspecter les journaux d’activité

Si vous avez activé la journalisation des diagnostics pour votre service de recherche, exécutez une requête Kusto pour confirmer l’exécution de la requête sur votre champ vectoriel :

OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"

Bonnes pratiques

Si vous configurez un vectoriseur Azure OpenAI, tenez compte des mêmes bonnes pratiques que celles recommandées pour la compétence d’incorporation Azure OpenAI.

Voir aussi