Sdílet prostřednictvím


Rychlý start: Sémantické řazení s využitím .NET nebo Pythonu

Ve službě Azure AI Search je sémantické řazení funkcí na straně dotazů, které používají porozumění strojovému čtení od Microsoftu k opětovnému jádru výsledků hledání a podporují nejvíce sémanticky relevantní shody na začátek seznamu. V závislosti na obsahu a dotazu může sémantické řazení výrazně zlepšit relevanci vyhledávání s minimální prací pro vývojáře.

Tento rychlý start vás provede úpravami indexu a dotazu, které vyvolávají sémantické rankery.

Poznámka:

Příklad řešení Azure AI Search s interakcí ChatGPT najdete v této ukázce nebo tomto akcelerátoru.

Požadavky

  • Účet Azure s aktivním předplatným. Účet si můžete vytvořit zdarma.

  • Prostředek služby Azure AI Search na úrovni Basic nebo vyšší s povoleným sémantickým rankerem.

  • Klíč rozhraní API a koncový bod vyhledávací služby. Přihlaste se k webu Azure Portal a vyhledejte vyhledávací službu.

    V přehledu zkopírujte adresu URL a uložte ji pro pozdější krok. Příkladem koncového bodu může být https://mydemo.search.windows.net.

    V části Klíče zkopírujte a uložte klíč správce pro úplná práva pro vytváření a odstraňování objektů. Existují dva zaměnitelné primární a sekundární klíče. Zvolte jednu z nich.

    Snímek obrazovky znázorňující, kde najít koncový bod HTTP a přístupový klíč vaší vyhledávací služby

Přidání sémantického řazení

Pokud chcete použít sémantický ranker, přidejte do indexu vyhledávání sémantickou konfiguraci a přidejte do dotazu parametry. Pokud máte existující index, můžete tyto změny provádět bez nutnosti přeindexovat obsah, protože struktura prohledávatelného obsahu nemá žádný vliv.

  • Sémantická konfigurace nastaví pořadí priority pro pole, která přispívají k názvu, klíčovým slovům a obsahu používanému v sémantickém pořadí. Stanovení priority polí umožňuje rychlejší zpracování.

  • Dotazy, které vyvolávají sémantický ranker, obsahují parametry pro typ dotazu a informace o tom, jestli se vrátí titulky a odpovědi. Tyto parametry můžete přidat do existující logiky dotazu. Není žádný konflikt s jinými parametry.

Vytvořte konzolovou aplikaci pomocí klientské knihovny Azure.Search.Documents a přidejte do existujícího indexu vyhledávání sémantické řazení.

Případně si můžete stáhnout zdrojový kód , abyste mohli začít s hotovým projektem.

Nastavení prostředí

  1. Spusťte Visual Studio a vytvořte nový projekt pro konzolovou aplikaci.

  2. V nástrojích>NuGet Správce balíčků vyberte Spravovat balíčky NuGet pro řešení....

  3. Vyberte Procházet.

  4. Vyhledejte balíček Azure.Search.Documents a vyberte nejnovější stabilní verzi.

  5. Vyberte Nainstalovat a přidejte sestavení do projektu a řešení.

Vytvoření vyhledávacího klienta

  1. Do Program.cs přidejte následující using direktivy.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Vytvořte dva klienty: SearchIndexClient vytvoří index a SearchClient načte a dotazuje existující index.

    Oba klienti potřebují koncový bod služby a klíč rozhraní API pro správu pro ověřování s právy k vytvoření nebo odstranění. Kód však sestaví identifikátor URI za vás, takže zadejte pouze název vyhledávací služby pro serviceName vlastnost. Nezahrnujte https:// ani .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);
         . . . 
     }
    

Vytvoření indexu

Vytvořte nebo aktualizujte schéma indexu tak, aby zahrnovalo SemanticConfiguration. Pokud aktualizujete existující index, tato změna nevyžaduje přeindexování, protože struktura dokumentů se nezmění.

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

Následující kód vytvoří index ve vyhledávací službě:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Nahrání dokumentů

Azure AI Search vyhledá obsah uložený ve službě. Kód pro nahrávání dokumentů je shodný s rychlým startem jazyka C# pro fulltextové vyhledávání , takže ho tady nemusíme duplikovat. Měli byste mít čtyři hotely se jmény, adresami a popisy. Vaše řešení by mělo mít typy hotelů a adres.

Prohledání indexu

Tady je dotaz, který vyvolá sémantický ranker s možnostmi hledání pro zadání parametrů:

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

Tady jsou výsledky dotazu, který používá výchozí řazení BM25 na základě četnosti termínů a blízkosti. Vzhledem k dotazu "jaký hotel má dobrou restauraci na místě", algoritmus hodnocení BM25 vrátí shodu v pořadí uvedeném na tomto snímku obrazovky:

Snímek obrazovky zobrazující shody seřazené podle BM25

Pokud se na stejný dotaz použije sémantické řazení ("jaký hotel má na místě dobrou restauraci"), výsledky se přeřadí na základě sémantické relevance dotazu. Tentokrát je nejlepší výsledek hotel s restaurací, která odpovídá očekáváním uživatelů.

Snímek obrazovky zobrazující shody seřazené podle sémantického řazení

Spuštění programu

Stisknutím klávesy F5 znovu sestavíte aplikaci a spustíte program v plném rozsahu.

Výstup obsahuje zprávy z Console.WriteLine s přidáním informací o dotazu a výsledků.

Vyčištění prostředků

Pokud pracujete s vlastním předplatným, je vhodné vždy na konci projektu zkontrolovat, jestli budete vytvořené prostředky ještě potřebovat. Prostředky, které necháte spuštěné, vás stojí peníze. Prostředky můžete odstraňovat jednotlivě nebo můžete odstranit skupinu prostředků, a odstranit tak celou sadu prostředků najednou.

Prostředky můžete najít a spravovat na webu Azure Portal pomocí odkazu Všechny prostředky nebo skupiny prostředků v levém navigačním podokně.

Další kroky

V tomto rychlém startu jste zjistili, jak vyvolat sémantické řazení u existujícího indexu. Jako další krok doporučujeme vyzkoušet sémantické řazení na vlastních indexech. Pokud ale chcete pokračovat s ukázkami, navštivte následující odkaz.