Konfigurera en vektoriserare i ett sökindex

I Azure AI Search är en vektoriserare programvara som utför vektorisering, till exempel en distribuerad inbäddningsmodell i Azure OpenAI, som konverterar text (eller bilder) till vektorer under frågekörningen.

Det definieras i ett sökindex, det gäller sökbara vektorfält och används vid frågetillfället för att generera en inbäddning för en text- eller bildfrågasinmatning. Om du i stället behöver vektorisera innehåll som en del av indexeringsprocessen kan du läsa Integrerad vektorisering (förhandsversion). För inbyggd vektorisering under indexering kan du konfigurera en indexerare och kompetensuppsättning som anropar en inbäddningsmodell för ditt råtextinnehåll.

Om du vill lägga till en vektoriserare för att söka efter index kan du använda indexdesignern i Azure-portalen, anropa REST-API:et för skapa eller uppdatera index eller använda ett Azure SDK-paket som har uppdaterats för att tillhandahålla den här funktionen.

Vektoriserare är nu allmänt tillgängliga så länge du använder ett allmänt tillgängligt skill-vectorizer-par. AzureOpenAIEmbedding vectorizer och AzureOpenAIEmbedding-kunskaper är allmänt tillgängliga. Den anpassade webb-API-vektoriseraren är också allmänt tillgänglig.

Azure AI Vision-vektoriserare, Katalogvektoriserare för Azure AI Studio-modell och motsvarande kunskaper finns fortfarande i förhandsversion. Din kompetensuppsättning måste ange REST API för förhandsversion 2024-05-01 för att kunna använda förhandsversionskunskaper och vektoriserare.

Förutsättningar

Vi rekommenderar att du aktiverar diagnostikloggning på söktjänsten för att bekräfta körningen av vektorfrågor.

Prova en vektoriserare med exempeldata

Guiden Importera och vektorisera data läser filer från Azure Blob Storage, skapar ett index med segmenterade och vektoriserade fält och lägger till en vektoriserare. Vektoriseraren som skapas av guiden är avsiktligt inställd på samma inbäddningsmodell som används för att indexera blobinnehållet.

  1. Ladda upp exempeldatafiler till en container i Azure Storage. Vi använde några små textfiler från NASA:s jordbok för att testa dessa instruktioner på en kostnadsfri söktjänst.

  2. Kör guiden Importera och vektorisera data och välj blobcontainern för datakällan.

    Skärmbild av sidan Anslut till data.

  3. Välj en befintlig distribution av text-embedding-ada-002. Den här modellen genererar inbäddningar under indexering och används även för att konfigurera den vektoriserare som används under frågor.

    Skärmbild av sidan med vektorisera och berika data.

  4. När guiden är klar och all indexeringsbearbetning är klar bör du ha ett index med ett sökbart vektorfält. Fältets JSON-definition ser ut så här:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. Du bör också ha en vektorprofil och en vektoriserare, ungefär som i följande exempel:

    "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. Hoppa framåt för att testa vektoriseraren för text-till-vektorkonvertering under frågekörningen.

Definiera en vektoriserare och vektorprofil

I det här avsnittet beskrivs ändringarna i ett indexschema för att definiera en vektoriserare manuellt.

  1. Använd Skapa eller uppdatera index för att lägga vectorizers till i ett sökindex.

  2. Lägg till följande JSON i indexdefinitionen. Avsnittet vectorizers innehåller anslutningsinformation till en distribuerad inbäddningsmodell. Det här steget visar två vektoriserarexempel så att du kan jämföra en Inbäddningsmodell för Azure OpenAI och ett anpassat webb-API sida vid sida.

      "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. I samma index lägger du till ett avsnitt med vektorprofiler som anger en av dina vektoriserare. Vektorprofiler kräver också en algoritm för vektorsökning som används för att skapa navigeringsstrukturer.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Tilldela en vektorprofil till ett vektorfält. I följande exempel visas en fältsamling med det nyckelfält som krävs, ett rubriksträngfält och två vektorfält med en tilldelning av vektorprofiler.

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

Testa en vektoriserare

Använd en sökklient för att skicka en fråga via en vektoriserare. I det här exemplet förutsätts Visual Studio Code med en REST-klient och ett exempelindex.

  1. I Visual Studio Code anger du en sökslutpunkt och en API-nyckel för sökfrågor:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Klistra in en vektorfrågebegäran.

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2024-07-01 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
                 }
             ]
         }
    

    Viktiga punkter om frågan är:

    • "kind": "text" talar om för sökmotorn att indata är en textsträng och att använda vektoriseraren som är associerad med sökfältet.

    • "text": "what cloud formations exists in the troposphere" är textsträngen som ska vektoriseras.

    • "fields": "vector" är namnet på det fält som du vill fråga efter. Om du använder exempelindexet som skapas av guiden får det genererade vektorfältet namnet vector.

  3. Skicka begäran. Du bör få tre k resultat, där det första resultatet är det mest relevanta.

Observera att det inte finns några vektoriseraregenskaper att ange vid frågetillfället. Frågan läser vektoriseraregenskaperna enligt tilldelningen av vektorprofilfältet i indexet.

Kontrollera loggar

Om du har aktiverat diagnostikloggning för söktjänsten kör du en Kusto-fråga för att bekräfta frågekörningen i vektorfältet:

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

Bästa praxis

Om du konfigurerar en Azure OpenAI-vektoriserare bör du överväga samma metodtips som vi rekommenderar för inbäddningsfärdigheten i Azure OpenAI.

Se även