Freigeben über


Konfigurieren einer Vektorisierung in einem Suchindex

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

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

Um dem Suchindex eine Vektorisierung hinzuzufügen, können Sie den Index-Designer im Azure-Portal verwenden, die REST-API Erstellen oder Aktualisieren des Indexes aufrufen oder ein beliebiges Azure SDK-Paket verwenden, das aktualisiert wurde, um dieses Feature bereitzustellen.

Vektorisierungen sind jetzt allgemein verfügbar, solange Sie ein allgemein verfügbares Skill-Vektorisierungs-Paar verwenden. Die AzureOpenAIEmbedding-Vektorisierung und der AzureOpenAIEmbedding-Skill sind allgemein verfügbar. Die benutzerdefinierte Web-API-Vektorisierung ist ebenfalls allgemein verfügbar.

Azure KI Vision-Vektorisierung, Vektorisierung des Azure KI Studio-Modellkatalogs und ihre entsprechenden Skills befinden sich noch in der Vorschauphase. Ihr Skillset muss die REST-API „2024-05-01-preview“ angeben, damit Vorschauskills und -vektorisierungen verwendet werden können.

Voraussetzungen

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",
           "modelName": "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 Erstellen oder Aktualisieren eines Indexes, um vectorizers zu 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",
            "modelName": "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.

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

    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.

Siehe auch