Een vectorizer configureren in een zoekindex

Belangrijk

Deze functie is beschikbaar als openbare preview onder aanvullende gebruiksvoorwaarden. De REST API 2023-10-01-Preview ondersteunt deze functie.

In Azure AI Search is een vectorizer software die vectorisatie uitvoert, zoals een geïmplementeerd insluitmodel in Azure OpenAI, waarmee tekst tijdens het uitvoeren van query's naar vectoren wordt geconverteerd.

Deze is gedefinieerd in een zoekindex, is van toepassing op doorzoekbare vectorvelden en wordt tijdens de query gebruikt om een insluiting voor een tekstquery-invoer te genereren. Als u in plaats daarvan tekst wilt vectoriseren als onderdeel van het indexeringsproces, raadpleegt u Integrated Vectorization (preview). Voor ingebouwde vectorisatie tijdens het indexeren kunt u een indexeerfunctie en vaardighedenset configureren die een Azure OpenAI-insluitingsmodel aanroept voor de inhoud van onbewerkte tekst.

Als u een vectorizer wilt toevoegen om te zoeken in indexen, kunt u de indexontwerper in Azure Portal gebruiken of de REST API voor maken of bijwerken van index 2023-10-01-preview aanroepen of een Azure beta SDK-pakket gebruiken dat is bijgewerkt om deze functie te bieden.

Vereisten

  • Een index met doorzoekbare vectorvelden in Azure AI Search.

  • Een geïmplementeerd insluitmodel, zoals text-embedding-ada-002 op Azure OpenAI. Deze wordt gebruikt om een query te vectoriseren. Het moet identiek zijn aan het model dat wordt gebruikt voor het genereren van de insluitingen in uw index.

  • Machtigingen voor het gebruik van het insluitmodel. Als u Azure OpenAI gebruikt, moet de aanroeper over De gebruikersmachtigingen voor Cognitive Services OpenAI 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.

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",
           "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 (preview) 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",
            "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. Zorg ervoor dat u een preview-REST API-versie gebruikt.

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

    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, moet u dezelfde aanbevolen procedures overwegen als voor de vaardigheid azure OpenAI-insluiting.

Zie ook