Configurare un vettore in un indice di ricerca

Importante

Questa funzionalità è disponibile in anteprima pubblica in Condizioni supplementari per l'utilizzo. L'API REST 2023-10-01-Preview supporta questa funzionalità.

In Ricerca di intelligenza artificiale di Azure un vettore è un software che esegue la vettorizzazione, ad esempio un modello di incorporamento distribuito in Azure OpenAI, che converte il testo in vettori durante l'esecuzione della query.

Viene definito in un indice di ricerca, si applica ai campi vettoriali ricercabili e viene usato in fase di query per generare un incorporamento per un input di query di testo. Se invece è necessario vettorizzare il testo come parte del processo di indicizzazione, fare riferimento a Vectorizzazione integrata (anteprima).If instead you need to vectorize text as part of the indexing process, refer to Integrated Vectorization (Preview). Per la vettorizzazione predefinita durante l'indicizzazione, è possibile configurare un indicizzatore e un set di competenze che chiama un modello di incorporamento OpenAI di Azure per il contenuto di testo non elaborato.

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

Prerequisiti

  • Indice con campi vettoriali ricercabili in Ricerca di intelligenza artificiale di Azure.

  • Modello di incorporamento distribuito, ad esempio text-embedding-ada-002 in Azure OpenAI. Viene usato per vettorizzare una query. Deve essere identico al modello usato per generare gli incorporamenti nell'indice.

  • Autorizzazioni per l'uso del modello di incorporamento. Se si usa Azure OpenAI, il chiamante deve disporre delle autorizzazioni utente OpenAI di Servizi cognitivi. In alternativa, è possibile fornire una chiave API.

  • Visual Studio Code con un client REST per inviare la query e accettare una risposta.

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

Provare un vettore con dati di esempio

La procedura guidata Importa e vettorizza dati legge i file dall'archivio BLOB di Azure, crea un indice con campi in blocchi e vettorializzati e aggiunge un vettore. Per impostazione predefinita, il vettore 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. Abbiamo usato alcuni piccoli file di testo del libro terrestre della NASA per testare queste istruzioni su un servizio di ricerca gratuito.

  2. Eseguire la procedura guidata Importa e vettorizzare i dati, scegliendo il contenitore BLOB per l'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 vettore usato durante le query.

    Screenshot della pagina dei dati vettoriali e arricchiti.

  4. Al termine della procedura guidata e al termine dell'elaborazione dell'indicizzatore, è necessario disporre di un indice con un campo vettore 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 vettore, simile 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",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. Andare avanti per testare il vettore per la conversione da testo a vettore durante l'esecuzione della query.

Definire un vettore e un profilo vettoriale

Questa sezione illustra le modifiche apportate a uno schema di indice per la definizione manuale di 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 vectorizers fornisce informazioni di connessione a un modello di incorporamento distribuito. Questo passaggio mostra due esempi di vettorizzatore in modo da poter confrontare un modello di incorporamento di Azure OpenAI e un'API Web personalizzata affiancata.

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "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 dei profili vettoriali che specifica uno dei vettori. I profili vettoriali richiedono anche un algoritmo di ricerca vettoriale usato per creare strutture di navigazione.

    "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 del titolo e due campi vettoriali con un'assegnazione di profilo vettoriale.

    "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 vettore

Usare un client di ricerca per inviare una query tramite un vettore. In questo esempio si presuppone che 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 chiave relativi alla query includono:

    • "kind": "text" indica al motore di ricerca che l'input è una stringa di testo e di usare il vettore 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 su cui eseguire una query. Se si usa l'indice di esempio prodotto dalla procedura guidata, il campo vettore generato è denominato vector.

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

Si noti che non esistono proprietà vettoriali da impostare in fase di query. La query legge le proprietà del vettore, in base all'assegnazione del campo del profilo vettoriale 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