Konfigurowanie wektoryzatora w indeksie wyszukiwania

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej w obszarze Dodatkowe warunki użytkowania. Interfejs API REST 2023-10-01-Preview obsługuje tę funkcję.

W usłudze Azure AI Search wektoryzator to oprogramowanie, które wykonuje wektoryzację, takie jak wdrożony model osadzania w usłudze Azure OpenAI, który konwertuje tekst na wektory podczas wykonywania zapytania.

Jest on zdefiniowany w indeksie wyszukiwania, ma zastosowanie do pól wektorów z możliwością wyszukiwania i jest używany w czasie zapytania do generowania osadzania dla danych wejściowych zapytania tekstowego. Jeśli zamiast tego musisz wektoryzować tekst w ramach procesu indeksowania, zapoznaj się ze zintegrowanym wektoryzacją (wersja zapoznawcza). W przypadku wbudowanej wektoryzacji podczas indeksowania można skonfigurować indeksator i zestaw umiejętności, który wywołuje model osadzania usługi Azure OpenAI dla nieprzetworzonej zawartości tekstowej.

Aby dodać wektoryzator do indeksu wyszukiwania, możesz użyć projektanta indeksu w witrynie Azure Portal lub wywołać interfejs API REST Create or Update Index 2023-10-01-preview lub użyć dowolnego pakietu zestawu SDK wersji beta platformy Azure, który został zaktualizowany w celu udostępnienia tej funkcji.

Wymagania wstępne

  • Indeks z polami wektorów z możliwością wyszukiwania w usłudze Azure AI Search.

  • Wdrożony model osadzania, taki jak osadzanie tekstu-ada-002 w usłudze Azure OpenAI. Służy do wektoryzacji zapytania. Musi być identyczny z modelem używanym do generowania osadzania w indeksie.

  • Uprawnienia do korzystania z modelu osadzania. Jeśli używasz usługi Azure OpenAI, obiekt wywołujący musi mieć uprawnienia użytkownika openAI usług Cognitive Services. Możesz też podać klucz interfejsu API.

  • Program Visual Studio Code z klientemREST w celu wysłania zapytania i zaakceptowania odpowiedzi.

Zalecamy włączenie rejestrowania diagnostycznego w usłudze wyszukiwania w celu potwierdzenia wykonania zapytania wektorowego.

Wypróbuj wektoryzator z przykładowymi danymi

Kreator importowania i wektoryzacji danych odczytuje pliki z usługi Azure Blob Storage, tworzy indeks z fragmentowanymi i wektoryzowanymi polami i dodaje wektoryzator. Zgodnie z projektem wektoryzator utworzony przez kreatora jest ustawiony na ten sam model osadzania używany do indeksowania zawartości obiektu blob.

  1. Przekazywanie przykładowych plików danych do kontenera w usłudze Azure Storage. Użyliśmy kilku małych plików tekstowych z książki ziemskiej NASA, aby przetestować te instrukcje w bezpłatnej usłudze wyszukiwania.

  2. Uruchom kreatora Importowanie i wektoryzowanie danych, wybierając kontener obiektów blob dla źródła danych.

    Zrzut ekranu przedstawiający stronę nawiązywania połączenia z danymi.

  3. Wybierz istniejące wdrożenie osadzania tekstu-ada-002. Ten model generuje osadzanie podczas indeksowania i służy również do konfigurowania wektoryzatora używanego podczas wykonywania zapytań.

    Zrzut ekranu przedstawiający stronę wektoryzacji i wzbogacania danych.

  4. Po zakończeniu działania kreatora i zakończeniu całego przetwarzania indeksatora należy mieć indeks z polem wektora z możliwością wyszukiwania. Definicja JSON pola wygląda następująco:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. Należy również mieć profil wektorowy i wektoryzator, podobnie jak w poniższym przykładzie:

    "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. Przejdź do przodu, aby przetestować wektoryzator konwersji tekstu na wektor podczas wykonywania zapytania.

Definiowanie wektoryzatora i profilu wektora

W tej sekcji opisano modyfikacje schematu indeksu na potrzeby ręcznego definiowania wektoryzatora.

  1. Użyj polecenia Create or Update Index (wersja zapoznawcza), aby dodać vectorizers go do indeksu wyszukiwania.

  2. Dodaj następujący kod JSON do definicji indeksu. Sekcja wektoryzatorów zawiera informacje o połączeniu z wdrożonym modelem osadzania. W tym kroku przedstawiono dwa przykłady wektoryzatora, dzięki czemu można porównać model osadzania usługi Azure OpenAI i niestandardowy internetowy interfejs API obok siebie.

      "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. W tym samym indeksie dodaj sekcję profilów wektorów, która określa jeden z wektoryzatorów. Profile wektorów wymagają również algorytmu wyszukiwania wektorowego używanego do tworzenia struktur nawigacji.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Przypisz profil wektora do pola wektorowego. Poniższy przykład przedstawia kolekcję pól z wymaganym polem klucza, polem ciągu tytułu i dwoma polami wektorów z przypisaniem profilu wektorowego.

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

Testowanie wektoryzatora

Użyj klienta wyszukiwania, aby wysłać zapytanie za pośrednictwem wektoryzatora. W tym przykładzie założono, że program Visual Studio Code z klientem REST i przykładowym indeksem.

  1. W programie Visual Studio Code podaj punkt końcowy wyszukiwania i klucz interfejsu API zapytania wyszukiwania:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Wklej żądanie zapytania wektorowego. Pamiętaj, aby użyć wersji zapoznawczej interfejsu API REST.

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

    Kluczowe kwestie dotyczące zapytania obejmują:

    • "kind": "text" informuje aparat wyszukiwania, że dane wejściowe są ciągiem tekstowym i aby użyć wektoryzatora skojarzonego z polem wyszukiwania.

    • "text": "what cloud formations exists in the troposphere" to ciąg tekstowy do wektoryzacji.

    • "fields": "vector" to nazwa pola do przesłaniania zapytania. Jeśli używasz przykładowego indeksu utworzonego przez kreatora, wygenerowane pole wektora ma nazwę vector.

  3. Wyślij żądanie. Powinny zostać wyświetlone trzy k wyniki, w których pierwszy wynik jest najbardziej odpowiedni.

Zwróć uwagę, że nie ma właściwości wektoryzatora do ustawienia w czasie zapytania. Zapytanie odczytuje właściwości wektoryzatora zgodnie z przypisaniem pola profilu wektorowego w indeksie.

Sprawdzanie dzienników

Jeśli włączono rejestrowanie diagnostyczne dla usługi wyszukiwania, uruchom zapytanie Kusto, aby potwierdzić wykonywanie zapytań w polu wektora:

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

Najlepsze rozwiązania

Jeśli konfigurujesz wektoryzator usługi Azure OpenAI, weź pod uwagę te same najlepsze rozwiązania , które zalecamy w przypadku umiejętności osadzania w usłudze Azure OpenAI.

Zobacz też