Dela via


Snabbstart: Semantisk rangordning med .NET eller Python

I Azure AI Search är semantisk rankning funktioner på frågesidan som använder maskinläsningsförståelse från Microsoft för att göra om sökresultaten och främja de mest semantiskt relevanta matchningarna överst i listan. Beroende på innehållet och frågan kan semantisk rangordning avsevärt förbättra sökrelevansen, med minimalt arbete för utvecklaren.

Den här snabbstarten vägleder dig genom index- och frågeändringarna som anropar semantisk ranker.

Kommentar

Ett exempel på en Azure AI Search-lösning med ChatGPT-interaktion finns i den här demonstrationen eller den här acceleratorn.

Förutsättningar

  • Ett Azure-konto med en aktiv prenumeration. Du kan skapa ett konto kostnadsfritt.

  • En Azure AI Search-resurs, på Basic-nivå eller högre, med semantisk rankning aktiverad.

  • En API-nyckel och en tjänstslutpunkt för sökning. Logga in på Azure Portal och hitta söktjänsten.

    I Översikt kopierar du URL:en och sparar den för ett senare steg. Här följer ett exempel på hur en slutpunkt kan se ut: https://mydemo.search.windows.net.

    I Nycklar kopierar och sparar du en administratörsnyckel för fullständig behörighet för att skapa och ta bort objekt. Det finns två utbytbara primära och sekundära nycklar. Välj någon av dem.

    Skärmbild som visar var du hittar söktjänstens HTTP-slutpunkt och åtkomstnyckel.

Lägg till semantisk rangordning

Om du vill använda semantisk rankning lägger du till en semantisk konfiguration i ett sökindex och lägger till parametrar i en fråga. Om du har ett befintligt index kan du göra dessa ändringar utan att behöva indexera om innehållet eftersom det inte påverkar strukturen för det sökbara innehållet.

  • En semantisk konfiguration anger en prioritetsordning för fält som bidrar med en rubrik, nyckelord och innehåll som används i semantisk omrankning. Fältprioritering möjliggör snabbare bearbetning.

  • Frågor som anropar semantisk rankning innehåller parametrar för frågetyp och om undertexter och svar returneras. Du kan lägga till dessa parametrar i din befintliga frågelogik. Det finns ingen konflikt med andra parametrar.

Skapa ett konsolprogram med hjälp av klientbiblioteket Azure.Search.Documents för att lägga till semantisk rangordning i ett befintligt sökindex.

Du kan också ladda ned källkoden för att börja med ett färdigt projekt.

Konfigurera din miljö

  1. Starta Visual Studio och skapa ett nytt projekt för en konsolapp.

  2. I Verktyg>NuGet Package Manager väljer du Hantera NuGet-paket för lösning....

  3. Välj bläddra.

  4. Sök efter paketet Azure.Search.Documents och välj den senaste stabila versionen.

  5. Välj Installera för att lägga till sammansättningen i projektet och lösningen.

Skapa en sökklient

  1. Lägg till följande using direktiv i Program.cs.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Skapa två klienter: SearchIndexClient skapar indexet och SearchClient läser in och frågar ett befintligt index.

    Båda klienterna behöver tjänstslutpunkten och en administratörs-API-nyckel för autentisering med behörighet att skapa/ta bort. Koden skapar dock URI:n åt dig, så ange endast söktjänstens namn för serviceName egenskapen. Inkludera https:// inte eller .search.windows.net.

     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);
         . . . 
     }
    

Skapa ett index

Skapa eller uppdatera ett indexschema för att inkludera en SemanticConfiguration. Om du uppdaterar ett befintligt index kräver den här ändringen ingen omindexering eftersom strukturen för dina dokument är oförändrad.

// 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);
}

Följande kod skapar indexet för söktjänsten:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Läsa in dokument

Azure AI Search söker efter innehåll som lagras i tjänsten. Koden för att ladda upp dokument är identisk med C#-snabbstarten för fulltextsökning så vi behöver inte duplicera den här. Du bör ha fyra hotell med namn, adresser och beskrivningar. Din lösning bör ha typer för hotell och adresser.

Sök i ett index

Här är en fråga som anropar semantisk ranker, med sökalternativ för att ange parametrar:

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);

Som jämförelse finns här resultat från en fråga som använder BM25-standardrankningen baserat på termfrekvens och närhet. Med tanke på frågan "vilket hotell har en bra restaurang på plats" returnerar BM25-rankningsalgoritmen matchningar i den ordning som visas i den här skärmbilden:

Skärmbild som visar matchningar rankade efter BM25.

När semantisk rangordning däremot tillämpas på samma fråga ("vilket hotell har en bra restaurang på plats" rangordnas resultaten om baserat på semantisk relevans för frågan. Den här gången är det högsta resultatet hotellet med restaurangen, vilket överensstämmer bättre med användarnas förväntningar.

Skärmbild som visar matchningar rankade baserat på semantisk rangordning.

Köra programmet

Tryck på F5 för att återskapa appen och köra programmet i sin helhet.

Utdata innehåller meddelanden från Console.WriteLine, med tillägg av frågeinformation och resultat.

Rensa resurser

När du arbetar i din egen prenumeration kan det dock vara klokt att i slutet av ett projekt kontrollera om du fortfarande behöver de resurser som du skapade. Resurser som fortsätter att köras kostar pengar. Du kan ta bort enstaka resurser eller hela resursgruppen om du vill ta bort alla resurser.

Du kan hitta och hantera resurser i Azure Portal med hjälp av länken Alla resurser eller Resursgrupper i det vänstra navigeringsfönstret.

Nästa steg

I den här snabbstarten har du lärt dig hur du anropar semantisk rangordning på ett befintligt index. Vi rekommenderar att du provar semantisk rangordning för dina egna index som ett nästa steg. Men om du vill fortsätta med demonstrationer kan du gå till följande länk.