Delen via


Een vectorizer configureren in een zoekindex

In Azure AI Search is een vectorizer een onderdeel dat vectorisatie uitvoert met behulp van een geïmplementeerd insluitingsmodel in Azure OpenAI of Azure AI Vision. Tijdens het uitvoeren van query's wordt tekst (of afbeeldingen) geconverteerd naar vectoren.

Deze is gedefinieerd in een zoekindex, is van toepassing op doorzoekbare vectorvelden en wordt tijdens de query gebruikt om een insluiting te genereren voor een tekst- of afbeeldingsquery-invoer. Als u in plaats daarvan inhoud moet vectoriseren als onderdeel van het indexeringsproces, raadpleegt u geïntegreerde vectorisatie. Voor ingebouwde vectorisatie tijdens het indexeren kunt u een indexeerfunctie en vaardighedenset configureren die een insluitmodel aanroept voor uw onbewerkte tekst- of afbeeldingsinhoud.

Als u een vectorizer wilt toevoegen aan een zoekindex, kunt u de indexontwerper in Azure Portal gebruiken of de REST API voor maken of bijwerken aanroepen, of een Azure SDK-pakket gebruiken dat is bijgewerkt om deze functie te bieden.

Vectorizers zijn nu algemeen beschikbaar zolang u een algemeen beschikbaar skill-vectorizer-paar gebruikt. AzureOpenAIEmbedding vectorizer en AzureOpenAIEmbedding vaardigheid zijn algemeen beschikbaar. De aangepaste web-API-vectorizer is ook algemeen beschikbaar.

Azure AI Vision vectorizer, Azure AI Foundry model catalog vectorizer en hun equivalente vaardigheden zijn nog steeds in preview. Uw vaardighedenset moet 2024-05-01-preview REST API opgeven om preview-vaardigheden en vectorizers te gebruiken.

Vereisten

  • Een index met doorzoekbare vectorvelden in Azure AI Search.

  • Een geïmplementeerd insluitmodel (zie de volgende sectie).

  • Machtigingen voor het gebruik van het insluitmodel. In Azure OpenAI moet de aanroeper Over Cognitive Services OpenAI-gebruikersmachtigingen beschikken. U kunt ook een API-sleutel opgeven.

  • Visual Studio Code met een REST-client om de query te verzenden en een antwoord te accepteren.

U wordt aangeraden diagnostische logboekregistratie in te schakelen voor uw zoekservice om de uitvoering van vectorquery's te bevestigen.

Ondersteunde insluitingsmodellen

De volgende tabel bevat de insluitmodellen die kunnen worden gebruikt met een vectorizer. Omdat u hetzelfde insluitingsmodel moet gebruiken voor het indexeren en uitvoeren van query's, worden vectorizers gekoppeld aan vaardigheden die insluitingen genereren tijdens het indexeren. De tabel bevat de vaardigheid die is gekoppeld aan een bepaalde vectorizer.

Vectorizer soort Modelnamen Modelprovider Gekoppelde vaardigheid
azureOpenAI text-embedding-ada-002, text-embedding-3 Azure OpenAI Vaardigheid AzureOpenAIEmbedding
aml Facebook-DinoV2-Image-Embeddings, Cohere-embed-v3 Azure AI Foundry-modelcatalogus AML-vaardigheid
aiServicesVision Multimodale insluitingen 4.0 API Azure AI Vision (via een Azure AI-account voor meerdere services) Vaardigheid voor multimodale insluitingen in Azure AI Vision
customWebApi Elk insluitmodel Extern gehost Vaardigheid voor aangepaste web-API

Een vectorizer proberen met voorbeeldgegevens

De wizard Gegevens importeren en vectoriseren leest bestanden uit Azure Blob Storage, maakt een index met gesegmenteerde en gevectoriseerde velden en voegt een vectorizer toe. De vectorizer die door de wizard is gemaakt, is standaard ingesteld op hetzelfde insluitingsmodel dat wordt gebruikt om de blobinhoud te indexeren.

  1. Voorbeeldgegevensbestanden uploaden naar een container in Azure Storage. We hebben enkele kleine tekstbestanden uit NASA's aardeboek gebruikt om deze instructies te testen op een gratis zoekservice.

  2. Voer de wizard Gegevens importeren en vectoriseren uit en kies de blobcontainer voor de gegevensbron.

    Schermopname van de verbinding met uw gegevenspagina.

  3. Kies een bestaande implementatie van tekst-embedding-ada-002. Dit model genereert insluitingen tijdens het indexeren en wordt ook gebruikt om de vectorizer te configureren die tijdens query's wordt gebruikt.

    Schermopname van de pagina gegevens vectoriseren en verrijken.

  4. Nadat de wizard is voltooid en alle verwerking van de indexeerfunctie is voltooid, moet u een index hebben met een doorzoekbaar vectorveld. De JSON-definitie van het veld ziet er als volgt uit:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. U moet ook een vectorprofiel en een vectorizer hebben, vergelijkbaar met het volgende voorbeeld:

    "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. Ga verder om uw vectorizer te testen voor conversie van tekst-naar-vector tijdens het uitvoeren van query's.

Een vectorizer en vectorprofiel definiëren

In deze sectie worden de wijzigingen in een indexschema uitgelegd voor het handmatig definiëren van een vectorizer.

  1. Gebruik Index maken of bijwerken om toe te voegen vectorizers aan een zoekindex.

  2. Voeg de volgende JSON toe aan uw indexdefinitie. De sectie vectorizers biedt verbindingsgegevens met een geïmplementeerd insluitmodel. In deze stap ziet u twee vectorizervoorbeelden, zodat u een Azure OpenAI-insluitingsmodel en een aangepaste web-API naast elkaar kunt vergelijken.

      "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. Voeg in dezelfde index een sectie vectorprofielen toe waarmee een van uw vectorizers wordt opgegeven. Vectorprofielen vereisen ook een algoritme voor vectorzoekopdrachten dat wordt gebruikt om navigatiestructuren te maken.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Wijs een vectorprofiel toe aan een vectorveld. In het volgende voorbeeld ziet u een verzameling velden met het vereiste sleutelveld, een titeltekenreeksveld en twee vectorvelden met een vectorprofieltoewijzing.

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

Een vectorizer testen

Gebruik een zoekclient om een query via een vectorizer te verzenden. In dit voorbeeld wordt ervan uitgegaan dat Visual Studio Code een REST-client en een voorbeeldindex bevat.

  1. Geef in Visual Studio Code een zoekeindpunt en zoekquery-API-sleutel op:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Plak een vectorqueryaanvraag.

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

    Belangrijke punten over de query zijn:

    • "kind": "text" geeft aan dat de invoer een tekenreeks is en dat de vectorizer moet worden gebruikt die is gekoppeld aan het zoekveld.

    • "text": "what cloud formations exists in the troposphere" is de tekenreeks die moet worden gevectoraliseerd.

    • "fields": "vector" is de naam van het veld waarvoor een query moet worden uitgevoerd. Als u de voorbeeldindex gebruikt die door de wizard wordt geproduceerd, krijgt het gegenereerde vectorveld de naam vector.

  3. Verzend de aanvraag. U krijgt drie k resultaten, waarbij het eerste resultaat het meest relevant is.

U ziet dat er geen vectorizer-eigenschappen zijn die tijdens de query moeten worden ingesteld. De query leest de vectorizer-eigenschappen op basis van de veldtoewijzing van het vectorprofiel in de index.

Logboeken controleren

Als u diagnostische logboekregistratie voor uw zoekservice hebt ingeschakeld, voert u een Kusto-query uit om de uitvoering van de query op het vectorveld te bevestigen:

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

Aanbevolen procedures

Als u een Azure OpenAI-vectorizer instelt, kunt u dezelfde aanbevolen procedures overwegen als voor de azure OpenAI-insluitingsvaardigheden.

Zie ook