Condividi tramite


Configurare un vettorizzatore in un indice di ricerca

In Azure AI Search un vettorizzatore è un software che esegue la vettorizzazione, ad esempio un modello di incorporamento distribuito in Azure OpenAI, che converte testo (o immagini) in vettori durante l'esecuzione di query.

Viene definito in un indice di ricerca, si applica ai campi vettoriali ricercabili e viene usato durante l’esecuzione di query per generare un incorporamento per un input di una query di testo o immagine. Se invece è necessario vettorizzare il contenuto come parte del processo di indicizzazione, fare riferimento a Vettorizzazione integrata (anteprima). Per usare la vettorizzazione predefinita durante l'indicizzazione, è possibile configurare un indicizzatore e un set di competenze che chiama un modello di incorporamento per il contenuto di testo non elaborato.

Per aggiungere un vettore all'indice di ricerca, è possibile usare la progettazione indici nel portale di Azure oppure chiamare l'API REST Create or Update Index 2024-05-01-preview oppure usare qualsiasi pacchetto SDK beta di Azure aggiornato per fornire questa funzionalità.

Prerequisiti

È consigliabile abilitare la registrazione diagnostica nel servizio di ricerca per confermare l'esecuzione di query vettoriali.

Provare un vettorizzatore con dati di esempio

La procedura guidata di importazione e vettorizzazione legge i titoli dall'archivio BLOB di Azure, crea un indice con campi in blocchi e vettorializzati e aggiunge un vettorizzatore. Per impostazione predefinita, il vettorizzatore creato dalla procedura guidata viene impostato sullo stesso modello di incorporamento usato per indicizzare il contenuto del BLOB.

  1. Caricare file di dati di esempio in un contenitore in Archiviazione di Azure. Sono stati usati alcuni piccoli file di testo del libro della terra della NASA per testare queste istruzioni in un servizio di ricerca gratuito.

  2. Eseguire la procedura guidata di importazione e vettorizzazione scegliendo il contenitore BLOB come origine dati.

    Screenshot della pagina di connessione ai dati.

  3. Scegliere una distribuzione esistente di text-embedding-ada-002. Questo modello genera incorporamenti durante l'indicizzazione e viene usato anche per configurare il vettorizzatore usato durante l’esecuzione di query.

    Screenshot della pagina dei dati vettoriali e arricchiti.

  4. Al termine della procedura guidata e dell'elaborazione dell'indicizzatore, si dovrebbe ottenere un indice con un campo vettoriale ricercabile. La definizione JSON del campo è simile alla seguente:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. È anche necessario avere un profilo vettoriale e un vettorizzatore, simili all'esempio seguente:

    "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. Continuare con i passaggi successivi per testare il vettorizzatore per la conversione da testo a vettore durante l'esecuzione di query.

Definire un vettorizzatore e un profilo vettoriale

Questa sezione illustra le modifiche che è necessario apportate a uno schema dell’indice per definire manualmente un vettore.

  1. Usare Crea o Aggiorna indice (anteprima) per aggiungere vectorizers a un indice di ricerca.

  2. Aggiungere il codice JSON seguente alla definizione dell'indice. La sezione dei vettorizzatori fornisce informazioni per la connessione a un modello di incorporamento distribuito. Questo passaggio mostra due esempi di vettorizzatore affiancati per consentire il confronto tra un modello di incorporamento di Azure OpenAI e un'API Web personalizzata.

      "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. Nello stesso indice aggiungere una sezione per i profili vettoriali che specifichi uno dei vettori. Per creare strutture di navigazione, è necessario specificare anche un algoritmo di ricerca vettoriale per i profili vettoriali.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Assegnare un profilo vettoriale a un campo vettoriale. Nell'esempio seguente viene illustrata una raccolta di campi con il campo chiave obbligatorio, un campo stringa per il titolo e due campi vettoriali con profili vettoriali assegnati.

    "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
            }
    ]
    

Testare un vettorizzatore

Usare un client di ricerca per inviare una query tramite un vettorizzatore. In questo esempio si presuppone che siano disponibili Visual Studio Code con un client REST e un indice di esempio.

  1. In Visual Studio Code specificare un endpoint di ricerca e una chiave API di query di ricerca:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Incollare una richiesta di query vettoriale. Assicurarsi di usare una versione dell'API REST di anteprima.

     ### 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
                 }
             ]
         }
    

    I punti principali relativi alla query includono:

    • "kind": "text" indica al motore di ricerca che l'input è una stringa di testo e di usare il vettorizzatore associato al campo di ricerca.

    • "text": "what cloud formations exists in the troposphere" è la stringa di testo da vettorizzare.

    • "fields": "vector" è il nome del campo in cui eseguire la query. Se si usa l'indice di esempio prodotto dalla procedura guidata, il campo vettoriale generato è denominato vector.

  3. Inviare la richiesta. Si dovrebbero ottenere tre risultati k, dove il primo risultato è il più rilevante.

Si noti che non esistono proprietà vettorializzate da impostare al momento dell’esecuzione di query. La query legge le proprietà del vettorizzatore, in base al campo del profilo vettoriale assegnato nell'indice.

Controllare i log

Se è stata abilitata la registrazione diagnostica per il servizio di ricerca, eseguire una query Kusto per confermare l'esecuzione della query nel campo vettoriale:

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

Procedure consigliate

Se si configura un vettore OpenAI di Azure, prendere in considerazione le stesse procedure consigliate per la competenza di incorporamento di Azure OpenAI.

Vedi anche