Freigeben über


Schnellstart: semantische Priorisierung mit .NET oder Python

In Azure KI-Suche ist die semantische Rangfolge eine abfrageseitige Funktion, die das maschinelle Leseverständnis von Microsoft nutzt, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Treffer an den Anfang der Liste zu stellen. Abhängig vom Inhalt und der Abfrage kann das Zuweisen einer semantischen Rangfolge die Suchrelevanz erheblich verbessern – mit minimalem Arbeitsaufwand für die Entwickler*innen.

Diese Schnellstartanleitung führt Sie durch die Index- und Abfrageänderungen, die den semantischen Sortierer aufrufen.

Hinweis

Ein Beispiel für eine Lösung für Azure KI-Suche mit ChatGPT-Interaktion finden Sie in dieser Demo oder dieser Schnellinfo.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können ein Konto kostenlos erstellen.

  • Eine Ressource für Azure KI-Suche ab der Dienstebene „Basic“ mit aktiviertem semantischem Sortierer.

  • Ein API-Schlüssel und ein Suchdienstendpunkt. Melden Sie sich beim Azure-Portal an, und finden Sie Ihren Suchdienst.

    Kopieren Sie unter Übersicht die URL, und speichern Sie sie für einen späteren Schritt. Ein Beispiel für einen Endpunkt ist https://mydemo.search.windows.net.

    Kopieren und speichern Sie unter Schlüssel einen Administratorschlüssel, um vollständige Rechte zum Erstellen und Löschen von Objekten zu erhalten. Es gibt einen Primär- und einen Sekundärschlüssel, die austauschbar sind. Wählen Sie eine der beiden Optionen aus.

    Screenshot, der zeigt, wo Sie den HTTP-Endpunkt und Zugriffsschlüssel Ihres Suchdiensts finden

Hinzufügen der Zuweisung einer semantischen Rangfolge

Um den semantischen Sortierer zu verwenden, fügen Sie einem Suchindex eine semantische Konfiguration und einer Abfrage Parameter hinzu. Wenn Sie über einen vorhandenen Index verfügen, können Sie diese Änderungen vornehmen, ohne Ihre Inhalte neu indizieren zu müssen, da dies keine Auswirkungen auf die Struktur Ihrer durchsuchbaren Inhalte hat.

  • Eine semantische Konfiguration legt eine Prioritätsreihenfolge für Felder fest, die einen Titel, Stichwörter und Inhalte beitragen, die bei der semantischen Neubewertung verwendet werden. Die Feldpriorisierung ermöglicht eine schnellere Verarbeitung.

  • Abfragen, die den semantischen Sortierer aufrufen, enthalten Parameter für den Abfragetyp und die Angabe, ob Beschriftungen und Antworten zurückgegeben werden. Sie können diese Parameter Ihrer vorhandenen Abfragelogik hinzufügen. Es besteht kein Konflikt mit anderen Parametern.

Erstellen Sie mithilfe der Clientbibliothek Azure.Search.Documents eine Konsolenanwendung, um einem vorhandenen Index semantische Rangfolge hinzuzufügen.

Alternativ können Sie den Quellcode herunterladen, um mit einem fertigen Projekt zu beginnen.

Einrichten Ihrer Umgebung

  1. Starten Sie Visual Studio, und erstellen Sie ein neues Projekt für eine Konsolen-App.

  2. Wählen Sie unter Tools>NuGet-Paket-Manager die Option NuGet-Pakete für Projektmappe verwalten... aus.

  3. Wählen Sie Durchsuchen aus.

  4. Suchen Sie nach dem Azure.Search.Documents-Paket, und wählen Sie die neueste stabile Version aus.

  5. Wählen Sie Installieren aus, um die Assembly Ihrem Projekt und Ihrer Projektmappe hinzuzufügen.

Erstellen eines Suchclients

  1. Fügen Sie in Program.cs die folgenden using-Anweisungen hinzu.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Erstellen Sie zwei Clients: SearchIndexClient erstellt den Index und SearchClient lädt und fragt einen vorhandenen Index ab.

    Beide Clients benötigen den Dienstendpunkt und einen Administrator-API-Schlüssel für die Authentifizierung mit Berechtigungen zum Erstellen/Löschen. Der Code erstellt jedoch den URI für Sie. Geben Sie daher nur den Suchdienstnamen in der Eigenschaft serviceName an. Nehmen Sie https:// oder .search.windows.net nicht auf.

     static void Main(string[] args)
     {
         string serviceName = "<YOUR-SEARCH-SERVICE-NAME>";
         string apiKey = "<YOUR-SEARCH-ADMIN-API-KEY>";
         string indexName = "hotels-quickstart";
    
    
         // Create a SearchIndexClient to send create/delete index commands
         Uri serviceEndpoint = new Uri($"https://{serviceName}.search.windows.net/");
         AzureKeyCredential credential = new AzureKeyCredential(apiKey);
         SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, credential);
    
         // Create a SearchClient to load and query documents
         SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, credential);
         . . . 
     }
    

Erstellen eines Index

Erstellen oder aktualisieren Sie ein Indexschema, um eine SemanticConfiguration einzuschließen. Wenn Sie einen vorhandenen Index aktualisieren, ist für diese Änderung keine Neuindizierung erforderlich, da die Struktur Ihrer Dokumente unverändert bleibt.

// Create hotels-quickstart index
private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{

    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);
    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);
    definition.SemanticSearch = new SemanticSearch
    {
        Configurations =
        {
            new SemanticConfiguration("my-semantic-config", new()
            {
                TitleField = new SemanticField("HotelName"),
                ContentFields =
                {
                    new SemanticField("Description"),
                    new SemanticField("Description_fr")
                },
                KeywordsFields =
                {
                    new SemanticField("Tags"),
                    new SemanticField("Category")
                }
            })
        }
    };

    adminClient.CreateOrUpdateIndex(definition);
}

Der folgende Code erstellt den Index für Ihren Suchdienst:

// Create index
Console.WriteLine("{0}", "Creating index...\n");
CreateIndex(indexName, adminClient);

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Laden von Dokumenten

Azure KI Search durchsucht im Dienst gespeicherte Inhalte. Der Code zum Hochladen von Dokumenten ist identisch mit dem im C#-Schnellstart für die Volltextsuche , sodass wir ihn hier nicht duplizieren müssen. Sie sollten über vier Hotels mit Namen, Adressen und Beschreibungen verfügen. Ihre Lösung sollte Typen für Hotels und Adressen aufweisen.

Durchsuchen eines Index

Hier sehen Sie eine Abfrage, die den semantischen Sortierer mit Suchoptionen zum Angeben von Parametern aufruft:

Console.WriteLine("Example of a semantic query.");

options = new SearchOptions()
{
    QueryType = Azure.Search.Documents.Models.SearchQueryType.Semantic,
    SemanticSearch = new()
    {
        SemanticConfigurationName = "my-semantic-config",
        QueryCaption = new(QueryCaptionType.Extractive)
    }
};
options.Select.Add("HotelName");
options.Select.Add("Category");
options.Select.Add("Description");

// response = srchclient.Search<Hotel>("*", options);
response = srchclient.Search<Hotel>("what hotel has a good restaurant on site", options);
WriteDocuments(response);

Hier finden Sie die Ergebnisse einer Abfrage, die die BM25-Standardrangfolge basierend auf der Begriffshäufigkeit und -nähe verwendet. Bei der Abfrage „What hotel has a good restaurant on site“ (Welches Hotel verfügt über ein gutes Restaurant), gibt der BM25-Bewertungsalgorithmus Übereinstimmungen in der Reihenfolge zurück, die in diesem Screenshot gezeigt wird:

Screenshot der Übereinstimmungen sortiert nach BM25.

Wenn die semantische Rangfolge auf dieselbe Abfrage („Welches Hotel verfügt über ein gutes Restaurant“) angewendet wird, werden die Ergebnisse hingegen basierend auf der semantischen Relevanz für die Abfrage neu bewertet. Dieses Mal ist das Top-Ergebnis das Hotel mit dem Restaurant, was den Erwartungen der Nutzer am besten entspricht.

Screenshot der Übereinstimmungen sortiert basierend auf der semantischen Rangfolge

Ausführen des Programms

Drücken Sie F5, um die App neu zu erstellen und das fertige Programm auszuführen.

Die Ausgabe umfasst Nachrichten aus Console.WriteLine, wobei Abfrageinformationen und -ergebnisse hinzugefügt werden.

Bereinigen von Ressourcen

Wenn Sie in Ihrem eigenen Abonnement arbeiten, sollten Sie sich am Ende eines Projekts überlegen, ob Sie die erstellten Ressourcen noch benötigen. Ressourcen, die weiterhin ausgeführt werden, können Sie Geld kosten. Sie können entweder einzelne Ressourcen oder aber die Ressourcengruppe löschen, um den gesamten Ressourcensatz zu entfernen.

Ressourcen können im Portal über den Link Alle Ressourcen oder Ressourcengruppen im linken Navigationsbereich gesucht und verwaltet werden.

Nächste Schritte

In diesem Schnellstart haben Sie erfahren, wie Sie die Zuweisung einer semantischen Rangfolge für einen vorhandenen Index aufrufen. Es wird empfohlen, als nächsten Schritt die Zuweisung einer semantischen Rangfolge für Ihre eigenen Indizes auszuprobieren. Wenn Sie jedoch mit Demos fortfahren möchten, klicken Sie auf den folgenden Link.