Konfigurieren einer Vektorisierung in einem Suchindex

Wichtig

Dieses Feature befindet sich in der Public Preview-Phase und unterliegt zusätzlichen Nutzungsbedingungen. Die 2023-10-01-Preview REST API unterstützt diese Funktion.

In der Azure KI-Suche ist eine Vektorisierung eine Software, die eine Vektorisierung durchführt, wie z. B. ein bereitgestelltes Einbettungsmodell auf Azure OpenAI, das Text während der Ausführung der Abfrage in Vektoren umwandelt.

Sie ist in einem Suchindex festgelegt, gilt für durchsuchbare Vektorfelder und wird zur Abfragezeit verwendet, um eine Einbettung für eine Textabfrage zu erzeugen. Wenn Sie stattdessen Text als Teil des Indizierungsprozesses vektorisieren müssen, lesen Sie den Abschnitt Integrierte Vektorisierung (Vorschau). Für die integrierte Vektorisierung während der Indizierung können Sie einen Indexer und ein Skillset konfigurieren, das ein Azure OpenAI-Einbettungsmodell für Ihren Rohtextinhalt aufruft.

Um dem Suchindex eine Vektorisierung hinzuzufügen, können Sie den Indexdesigner im Azure-Portal verwenden, die REST-API " Erstellen oder Aktualisieren von Indizes 2023-10-01-preview aufrufen oder ein beliebiges Azure Beta-SDK-Paket verwenden, das aktualisiert wurde, um diese Funktion bereitzustellen.

Voraussetzungen

  • Ein Index mit durchsuchbaren Vektorfeldern in Azure KI-Suche.

  • Ein bereitgestelltes Einbettungsmodell, z. B. text-embedding-ada-002 in Azure OpenAI. Es wird verwendet, um eine Abfrage zu vektorisieren. Es muss mit dem Modell identisch sein, das zum Generieren der Einbettungen in Ihrem Index verwendet wird.

  • Berechtigungen für die Verwendung des Einbettungsmodells. Wenn Sie Azure OpenAI verwenden, muss die aufrufende Funktion über Berechtigungen vom Typ Cognitive Services OpenAI-Benutzer verfügen- Sie können auch einen API-Schlüssel bereitstellen.

  • Visual Studio Code mit einem REST-Client, um die Abfrage zu senden und eine Antwort zu akzeptieren.

Es wird empfohlen, die Diagnoseprotokollierung für Ihren Suchdienst zu aktivieren, um die Ausführung von Vektorabfragen zu bestätigen.

Testen einer Vektorisierung mit Beispieldaten

Der Assistent zum Importieren und Vektorisieren von Daten liest Dateien aus Azure Blob Storage, erstellt einen Index mit geblockten und vektorisierten Feldern und fügt eine Vektorisierung hinzu. Standardmäßig wird die vom Assistenten erstellte Vektorisierung auf dasselbe Einbettungsmodell festgelegt, das zum Indizieren des BLOB-Inhalts verwendet wird.

  1. Laden Sie Beispieldatendateien in einen Container in Azure Storage hoch. Wir haben einige kleine Textdateien aus dem Erdbuch der NASA verwendet, um diese Anweisungen auf einem kostenlosen Suchdienst zu testen.

  2. Führen Sie den Assistenten zum Importieren und Vektorisieren von Daten aus, und wählen Sie den BLOB-Container für die Datenquelle aus.

    Screenshot der Seite „Mit Ihren Daten verbinden“.

  3. Wählen Sie eine vorhandene Bereitstellung von text-embedding-ada-002 aus. Dieses Modell erzeugt Einbettungen während der Indizierung und wird auch zur Konfiguration der Vektorisierung bei Abfragen verwendet.

    Screenshot der Seite Vektorisierung und Anreicherung von Daten.

  4. Nach Beendigung des Assistenten und der Indexerstellung sollten Sie einen Index mit einem durchsuchbaren Vektorfeld haben. Die JSON-Definition des Felds sieht wie folgt aus:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. Sie sollten auch ein Vektorprofil und eine Vektorisierung haben, ähnlich wie im folgenden Beispiel:

    "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. Fahren Sie fort, um Ihre Vektorisierung für die Text-zu-Vektor-Konvertierung während der Abfrageausführung zu testen.

Definieren Sie eine Vektorisierung und ein Vektorprofil

In diesem Abschnitt werden die Änderungen an einem Indexschema zur manuellen Definition einer Vektorisierung erläutert.

  1. Verwenden Sie Index erstellen oder aktualisieren (Vorschau), um vectorizers einem Suchindex hinzuzufügen.

  2. Fügen Sie der Indexdefinition den folgenden JSON-Code hinzu. Der Abschnitt „Vektorisierung“ liefert Verbindungsinformationen zu einem eingesetzten Einbettungsmodell. In diesem Schritt werden zwei Beispiele für Vektorisierung gezeigt, damit Sie ein Azure OpenAI-Einbettungsmodell und eine benutzerdefinierte Web-API nebeneinander vergleichen können.

      "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. Fügen Sie in denselben Index einen Abschnitt für Vektorprofile ein, der eine Ihrer Vektorisierungen angibt. Vektorprofile erfordern auch einen Vektorsuchalgorithmus, der zum Erstellen von Navigationsstrukturen verwendet wird.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Weisen Sie einem Vektorfeld ein Vektorprofil zu. Das folgende Beispiel zeigt eine Feldsammlung mit dem erforderlichen Schlüsselfeld, einem Feld für die Titelzeichenfolge und zwei Vektorfeldern mit einer Vektorprofilzuweisung.

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

Testen einer Vektorisierung

Verwenden Sie einen Suchclient, um eine Anfrage durch eine Vektorisierung zu senden. Dieses Beispiel setzt Visual Studio Code mit einem REST-Client und einem Beispielindex voraus.

  1. Geben Sie in Visual Studio Code einen Endpunkt für die Suche und einen API-Schlüssel für die Suchabfrage an:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Fügen Sie eine Vektorabfrageanforderung ein. Achten Sie darauf, dass Sie eine Vorschauversion der REST-API verwenden.

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

    Wichtige Punkte zur Abfrage sind:

    • "kind": "text" teilt der Suchmaschine mit, dass es sich bei der Eingabe um eine Textzeichenfolge handelt und die dem Suchfeld zugeordnete Vektorisierung verwendet werden soll.

    • "text": "what cloud formations exists in the troposphere" ist die zu vektorisierende Textzeichenfolge.

    • "fields": "vector" ist der Name des zu abfragenden Felds. Wenn Sie den vom Assistenten erstellten Beispielindex verwenden, wird das generierte Vektorfeld vector benannt.

  3. Senden Sie die Anforderung. Sie sollten drei k-Ergebnisse erhalten, wobei das erste Ergebnis das relevanteste ist.

Beachten Sie, dass zur Abfragezeit keine Vektorisierungseigenschaften festgelegt werden müssen. Die Abfrage liest die Vektorisierungseigenschaften gemäß der Vektorprofilfeldzuordnung im Index.

Überprüfen der Protokolle

Wenn Sie die Diagnoseprotokollierung für Ihren Suchdienst aktiviert haben, führen Sie eine Kusto-Abfrage aus, um die Abfrageausführung in Ihrem Vektorfeld zu bestätigen:

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

Bewährte Methoden

Wenn Sie eine Azure OpenAI-Vektorisierung einrichten, sollten Sie die gleichen bewährten Methoden berücksichtigen, die wir für die Azure OpenAI-Einbettungskompetenz empfehlen.

Weitere Informationen