Udostępnij za pośrednictwem


Szybki start: klasyfikacja semantyczna

Z tego przewodnika Szybki start dowiesz się, jak dodać klasyfikację semantyczną do istniejącego indeksu. Możesz użyć pliku hotels-sample-index lub własnego.

W usłudze Azure AI Search semantyczna klasyfikacja to funkcja po stronie zapytania, która wykorzystuje zrozumienie odczytu maszynowego od firmy Microsoft w celu ponownego podkreślenia wyników wyszukiwania, promując najbardziej semantycznie istotne dopasowania na początku listy. W zależności od zawartości i zapytania semantyczny ranking może znacznie poprawić istotność wyszukiwania przy minimalnym wysiłku dewelopera.

Możesz dodać konfigurację semantyczną do istniejącego indeksu bez konieczności ponownego kompilowania. Ranking semantyczny jest najbardziej skuteczny w tekście, który jest informacyjny lub opisowy.

W tym przewodniku Szybki start zawarto informacje na temat wykonywania następujących czynności:

  • Dodawanie konfiguracji semantycznej do indeksu wyszukiwania
  • Dodawanie parametrów semantycznych do zapytania

Wymagania wstępne

Konfigurowanie dostępu

Możesz nawiązać połączenie z usługą Azure AI Search przy użyciu kluczy API lub identyfikatora Microsoft Entra ID z przypisanymi rolami. Klucze są łatwiejsze do rozpoczęcia od, ale role są bezpieczniejsze.

Aby skonfigurować dostęp oparty na rolach:

  1. Zaloguj się do witryny Azure Portal i wybierz usługę wyszukiwania.

  2. W okienku po lewej stronie wybierz Ustawienia>Klucze.

  3. W obszarze Kontrola dostępu do interfejsu API wybierz pozycję Oba.

    Ta opcja umożliwia zarówno uwierzytelnianie oparte na kluczach, jak i bez klucza. Po przypisaniu ról możesz wrócić do tego kroku i wybrać pozycję Kontrola dostępu oparta na rolach.

  4. W okienku po lewej stronie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).

  5. Wybierz Dodaj>Dodaj przypisanie roli.

  6. Przypisz te role do konta użytkownika:

    • Współautor usługi wyszukiwania

    • Współautor danych indeksu wyszukiwania

Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z usługą Azure AI Search przy użyciu ról.

Rozpoczynanie od indeksu

Ten przewodnik szybkiego startu zakłada, że istnieje indeks, który został zmodyfikowany w celu uwzględnienia konfiguracji semantycznej. Zalecamy hotels-sample-index, który można utworzyć w ciągu kilku minut za pomocą kreatora portalu Azure.

  1. Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.

  2. Pod zarządzanie wyszukiwaniem>Indeksy otwórz hotels-sample-index. Upewnij się, że indeks nie ma konfiguracji semantycznej.

    Zrzut ekranu przedstawiający pustą stronę konfiguracji semantycznej w witrynie Azure Portal.

  3. Aby sprawdzić, czy indeks działa, uruchom zapytanie. W Eksploratorze wyszukiwania wprowadź ten ciąg wyszukiwania "odległość spaceru od muzyki na żywo" , aby można było wyświetlić odpowiedź przed zastosowaniem semantycznego rankingu.

    Zrzut ekranu przedstawiający zapytanie w Eksploratorze wyszukiwania w portalu.

    Odpowiedź powinna być podobna do poniższego przykładu, jak w przypadku domyślnego klasyfikatora BM25 L1 na potrzeby wyszukiwania pełnotekstowego. Aby uzyskać czytelność, przykład wybiera tylko pola "HotelName" "HotelId" i "Description".

    To zapytanie jest wyszukiwaniem słów kluczowych. Wyniki zawierają dosłowne dopasowania dotyczące terminów zapytania (spacer, odległość, live, muzyka) lub wariant językowy (spacer, życie).

    "@odata.count": 13,
    "value": [
      {
        "@search.score": 5.5153193,
        "HotelId": "2",
        "HotelName": "Old Century Hotel",
        "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music."
      },
      {
        "@search.score": 5.074317,
        "HotelId": "24",
        "HotelName": "Uptown Chic Hotel",
        "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
      },
      {
        "@search.score": 4.8959594,
        "HotelId": "4",
        "HotelName": "Sublime Palace Hotel",
        "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience."
      },
      {
        "@search.score": 2.5966604,
        "HotelId": "35",
        "HotelName": "Bellevue Suites",
        "Description": "Comfortable city living in the very center of downtown Bellevue. Newly reimagined, this hotel features apartment-style suites with sleeping, living and work spaces. Located across the street from the Light Rail to downtown. Free shuttle to the airport."
      },
      {
        "@search.score": 2.566386,
        "HotelId": "47",
        "HotelName": "Country Comfort Inn",
        "Description": "Situated conveniently at the north end of the village, the inn is just a short walk from the lake, offering reasonable rates and all the comforts home inlcuding living room suites and functional kitchens. Pets are welcome."
      },
      {
        "@search.score": 2.2405157,
        "HotelId": "9",
        "HotelName": "Smile Up Hotel",
        "Description": "Experience the fresh, modern downtown. Enjoy updated rooms, bold style & prime location. Don't miss our weekend live music series featuring who's new/next on the scene."
      },
      {
        "@search.score": 2.1737604,
        "HotelId": "8",
        "HotelName": "Foot Happy Suites",
        "Description": "Downtown in the heart of the business district. Close to everything. Leave your car behind and walk to the park, shopping, and restaurants. Or grab one of our bikes and take your explorations a little further."
      },
      {
        "@search.score": 2.0364518,
        "HotelId": "31",
        "HotelName": "Country Residence Hotel",
        "Description": "All of the suites feature full-sized kitchens stocked with cookware, separate living and sleeping areas and sofa beds. Some of the larger rooms have fireplaces and patios or balconies. Experience real country hospitality in the heart of bustling Nashville. The most vibrant music scene in the world is just outside your front door."
      },
      {
        "@search.score": 1.7595702,
        "HotelId": "49",
        "HotelName": "Swirling Currents Hotel",
        "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. "
      },
      {
        "@search.score": 1.5502293,
        "HotelId": "15",
        "HotelName": "By the Market Hotel",
        "Description": "Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service."
      },
      {
        "@search.score": 1.3302404,
        "HotelId": "42",
        "HotelName": "Rock Bottom Resort & Campground",
        "Description": "Rock Bottom is nestled on 20 unspoiled acres on a private cove of Rock Bottom Lake. We feature both lodging and campground accommodations to suit just about every taste. Even though we are out of the traffic of the city, getting there is only a short drive away."
      },
      {
        "@search.score": 0.9050383,
        "HotelId": "38",
        "HotelName": "Lakeside B & B",
        "Description": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply."
      },
      {
        "@search.score": 0.7334347,
        "HotelId": "39",
        "HotelName": "White Mountain Lodge & Suites",
        "Description": "Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings."
      }
    ]
    

Później możesz spróbować ponownie wykonać to zapytanie po skonfigurowaniu klasyfikacji semantycznej, aby zobaczyć, jak zmienia się odpowiedź.

Wskazówka

Konfigurację semantyczną można dodać w witrynie Azure Portal. Jeśli jednak chcesz dowiedzieć się, jak programowo dodać konfigurację semantyczną, postępuj zgodnie z instrukcjami w tym przewodniku Szybki start.

Konfigurowanie klienta

W tym przewodniku użyjesz środowiska IDE i biblioteki klienta Azure.Search.Documents, aby zaimplementować klasyfikację semantyczną do istniejącego indeksu wyszukiwania.

Zalecamy użycie Visual Studio dla tego szybkiego startu.

Wskazówka

Możesz pobrać kod źródłowy, aby rozpocząć od ukończonego projektu lub wykonać następujące kroki, aby utworzyć własny.

Instalowanie bibliotek

  1. Uruchom program Visual Studio i otwórz quickstart-semantic-search.sln lub utwórz nowy projekt przy użyciu szablonu aplikacji konsolowej.

  2. W obszarze Narzędzia>Menedżer pakietów NuGet wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania....

  3. Wybierz przycisk Przeglądaj.

  4. Wyszukaj pakiet Azure.Search.Documents i wybierz najnowszą stabilną wersję.

  5. Wyszukaj pakiet Azure.Identity i wybierz najnowszą stabilną wersję.

  6. Wybierz pozycję Zainstaluj , aby dodać zestaw do projektu i rozwiązania.

Zaloguj się do Azure

Jeśli zalogowałeś się do witryny Azure Portal, zalogowałeś się na platformie Azure. Jeśli nie masz pewności, zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell: az login lub az connect. Jeśli masz wiele dzierżaw i subskrypcji, zobacz Szybki start: nawiązywanie połączenia bez kluczy , aby uzyskać pomoc dotyczącą nawiązywania połączenia.

Aktualizowanie indeksu

W tej sekcji zaktualizujesz indeks wyszukiwania, aby uwzględnić konfigurację semantyczną. Kod pobiera definicję indeksu z usługi wyszukiwania i dodaje konfigurację semantyczną.

  1. Otwórz projekt BuildIndex w programie Visual Studio. Program składa się z następującego kodu.

    Ten kod używa elementu SearchIndexClient do zaktualizowania indeksu w usłudze wyszukiwania.

    class BuildIndex
    {
        static async Task Main(string[] args)
        {
            string searchServiceName = "PUT-YOUR-SEARCH-SERVICE-NAME-HERE";
            string indexName = "hotels-sample-index";
            string endpoint = $"https://{searchServiceName}.search.windows.net";
            var credential = new Azure.Identity.DefaultAzureCredential();
    
            await ListIndexesAsync(endpoint, credential);
            await UpdateIndexAsync(endpoint, credential, indexName);
        }
    
        // Print a list of all indexes on the search service
        // You should see hotels-sample-index in the list
        static async Task ListIndexesAsync(string endpoint, Azure.Core.TokenCredential credential)
        {
            try
            {
                var indexClient = new Azure.Search.Documents.Indexes.SearchIndexClient(
                    new Uri(endpoint),
                    credential
                );
    
                var indexes = indexClient.GetIndexesAsync();
    
                Console.WriteLine("Here's a list of all indexes on the search service. You should see hotels-sample-index:");
                await foreach (var index in indexes)
                {
                    Console.WriteLine(index.Name);
                }
                Console.WriteLine(); // Add an empty line for readability
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error listing indexes: {ex.Message}");
            }
        }
    
        static async Task UpdateIndexAsync(string endpoint, Azure.Core.TokenCredential credential, string indexName)
        {
            try
            {
                var indexClient = new Azure.Search.Documents.Indexes.SearchIndexClient(
                    new Uri(endpoint),
                    credential
                );
    
                // Get the existing definition of hotels-sample-index
                var indexResponse = await indexClient.GetIndexAsync(indexName);
                var index = indexResponse.Value;
    
                // Add a semantic configuration
                const string semanticConfigName = "semantic-config";
                AddSemanticConfiguration(index, semanticConfigName);
    
                // Update the index with the new information
                var updatedIndex = await indexClient.CreateOrUpdateIndexAsync(index);
                Console.WriteLine("Index updated successfully.");
    
                // Print the updated index definition as JSON
                var refreshedIndexResponse = await indexClient.GetIndexAsync(indexName);
                var refreshedIndex = refreshedIndexResponse.Value;
                var jsonOptions = new JsonSerializerOptions { WriteIndented = true };
                string indexJson = JsonSerializer.Serialize(refreshedIndex, jsonOptions);
                Console.WriteLine($"Here is the revised index definition:\n{indexJson}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error updating index: {ex.Message}");
            }
        }
    
        // This is the semantic configuration definition
        static void AddSemanticConfiguration(SearchIndex index, string semanticConfigName)
        {
            if (index.SemanticSearch == null)
            {
                index.SemanticSearch = new SemanticSearch();
            }
            var configs = index.SemanticSearch.Configurations;
            if (configs == null)
            {
                throw new InvalidOperationException("SemanticSearch.Configurations is null and cannot be assigned. Your service must be Basic tier or higher.");
            }
            if (!configs.Any(c => c.Name == semanticConfigName))
            {
                var prioritizedFields = new SemanticPrioritizedFields
                {
                    TitleField = new SemanticField("HotelName"),
                    ContentFields = { new SemanticField("Description") },
                    KeywordsFields = { new SemanticField("Tags") }
                };
    
                configs.Add(
                    new SemanticConfiguration(
                        semanticConfigName,
                        prioritizedFields
                    )
                );
                Console.WriteLine($"Added new semantic configuration '{semanticConfigName}' to the index definition.");
            }
            else
            {
                Console.WriteLine($"Semantic configuration '{semanticConfigName}' already exists in the index definition.");
            }
            index.SemanticSearch.DefaultConfigurationName = semanticConfigName;
        }
    }
    
  2. Zastąp adres URL usługi wyszukiwania prawidłowym punktem końcowym.

  3. Uruchom program.

  4. Dane są rejestrowane w oknie konsoli przez Console.WriteLine. Powinny zostać wyświetlone komunikaty dla każdego kroku, w tym dane JSON schematu indeksu z nową konfiguracją semantyczną.

Uruchamianie zapytań semantycznych

W tej sekcji program uruchamia kilka semantycznych zapytań w sekwencji.

  1. Otwórz projekt QueryIndex w programie Visual Studio. Program składa się z następującego kodu.

    Ten kod używa elementu SearchClient do wysyłania zapytań do indeksu.

    class SemanticQuery
    {
        static async Task Main(string[] args)
        {
            string searchServiceName = "PUT-YOUR-SEARCH-SERVICE-NAME-HERE";
            string indexName = "hotels-sample-index";
            string endpoint = $"https://{searchServiceName}.search.windows.net";
            var credential = new Azure.Identity.DefaultAzureCredential();
    
            var client = new SearchClient(new Uri(endpoint), indexName, credential);
    
            // Query 1: Simple query
            string searchText = "walking distance to live music";
            Console.WriteLine("\nQuery 1: Simple query using the search string 'walking distance to live music'.");
            await RunQuery(client, searchText, new SearchOptions
            {
                Size = 5,
                QueryType = SearchQueryType.Simple,
                IncludeTotalCount = true,
                Select = { "HotelId", "HotelName", "Description" }
            });
            Console.WriteLine("Press Enter to continue to the next query...");
            Console.ReadLine();
    
            // Query 2: Semantic query (no captions, no answers)
            Console.WriteLine("\nQuery 2: Semantic query (no captions, no answers) for 'walking distance to live music'.");
            var semanticOptions = new SearchOptions
            {
                Size = 5,
                QueryType = SearchQueryType.Semantic,
                SemanticSearch = new SemanticSearchOptions
                {
                    SemanticConfigurationName = "semantic-config"
                },
                IncludeTotalCount = true,
                Select = { "HotelId", "HotelName", "Description" }
            };
            await RunQuery(client, searchText, semanticOptions);
            Console.WriteLine("Press Enter to continue to the next query...");
            Console.ReadLine();
    
            // Query 3: Semantic query with captions
            Console.WriteLine("\nQuery 3: Semantic query with captions.");
            var captionsOptions = new SearchOptions
            {
                Size = 5,
                QueryType = SearchQueryType.Semantic,
                SemanticSearch = new SemanticSearchOptions
                {
                    SemanticConfigurationName = "semantic-config",
                    QueryCaption = new QueryCaption(QueryCaptionType.Extractive)
                    {
                        HighlightEnabled = true
                    }
                },
                IncludeTotalCount = true,
                Select = { "HotelId", "HotelName", "Description" }
            };
            // Add the field(s) you want captions for to the QueryCaption.Fields collection
            captionsOptions.HighlightFields.Add("Description");
            await RunQuery(client, searchText, captionsOptions, showCaptions: true);
            Console.WriteLine("Press Enter to continue to the next query...");
            Console.ReadLine();
    
            // Query 4: Semantic query with answers
            // This query uses different search text designed for an answers scenario
            string searchText2 = "what's a good hotel for people who like to read";
            searchText = searchText2; // Update searchText for the next query
            Console.WriteLine("\nQuery 4: Semantic query with a verbatim answer from the Description field for 'what's a good hotel for people who like to read'.");
            var answersOptions = new SearchOptions
            {
                Size = 5,
                QueryType = SearchQueryType.Semantic,
                SemanticSearch = new SemanticSearchOptions
                {
                    SemanticConfigurationName = "semantic-config",
                    QueryAnswer = new QueryAnswer(QueryAnswerType.Extractive)
                },
                IncludeTotalCount = true,
                Select = { "HotelId", "HotelName", "Description" }
            };
            await RunQuery(client, searchText2, answersOptions, showAnswers: true);
    
            static async Task RunQuery(
            SearchClient client,
            string searchText,
            SearchOptions options,
            bool showCaptions = false,
            bool showAnswers = false)
            {
                try
                {
                    var response = await client.SearchAsync<SearchDocument>(searchText, options);
    
                    if (showAnswers && response.Value.SemanticSearch?.Answers != null)
                    {
                        Console.WriteLine("Extractive Answers:");
                        foreach (var answer in response.Value.SemanticSearch.Answers)
                        {
                            Console.WriteLine($"  {answer.Highlights}");
                        }
                        Console.WriteLine(new string('-', 40));
                    }
    
                    await foreach (var result in response.Value.GetResultsAsync())
                    {
                        var doc = result.Document;
                        // Print captions first if available
                        if (showCaptions && result.SemanticSearch?.Captions != null)
                        {
                            foreach (var caption in result.SemanticSearch.Captions)
                            {
                                Console.WriteLine($"Caption: {caption.Highlights}");
                            }
                        }
                        Console.WriteLine($"HotelId: {doc.GetString("HotelId")}");
                        Console.WriteLine($"HotelName: {doc.GetString("HotelName")}");
                        Console.WriteLine($"Description: {doc.GetString("Description")}");
                        Console.WriteLine($"@search.score: {result.Score}");
    
                        // Print @search.rerankerScore if available
                        if (result.SemanticSearch != null && result.SemanticSearch.RerankerScore.HasValue)
                        {
                            Console.WriteLine($"@search.rerankerScore: {result.SemanticSearch.RerankerScore.Value}");
                        }
                        Console.WriteLine(new string('-', 40));
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error querying index: {ex.Message}");
                }
            }
        }
    }
    
  2. Zastąp adres URL usługi wyszukiwania prawidłowym punktem końcowym.

  3. Uruchom program.

  4. Dane są rejestrowane w oknie konsoli przez Console.WriteLine. Powinny zostać wyświetlone wyniki wyszukiwania dla każdego zapytania.

Dane wyjściowe zapytania semantycznego (bez podpisów ani odpowiedzi)

Te dane wyjściowe pochodzą z semantycznego zapytania bez podpisów ani odpowiedzi. Ciąg zapytania to "w odległości spaceru do muzyki na żywo".

W tym miejscu początkowe wyniki zapytania terminowego są oceniane ponownie przy użyciu semantycznych modeli rankingowych. W przypadku tego konkretnego zestawu danych i zapytania pierwsze kilka wyników znajduje się w podobnych pozycjach. Efekty klasyfikacji semantycznej są bardziej widoczne w pozostałej części wyników.

HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 5.074317
@search.rerankerScore: 2.613231658935547
----------------------------------------
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.5153193
@search.rerankerScore: 2.271434783935547
----------------------------------------
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
@search.score: 4.8959594
@search.rerankerScore: 1.9861756563186646
----------------------------------------
HotelId: 39
HotelName: White Mountain Lodge & Suites
Description: Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings.
@search.score: 0.7334347
@search.rerankerScore: 1.9615401029586792
----------------------------------------
HotelId: 15
HotelName: By the Market Hotel
Description: Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.
@search.score: 1.5502293
@search.rerankerScore: 1.9085469245910645
----------------------------------------
Press Enter to continue to the next query...

Dane wyjściowe zapytania semantycznego z podpisami

Poniżej przedstawiono wyniki zapytania, które dodaje etykiety z wyróżnieniem trafień.

Caption: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 5.074317
@search.rerankerScore: 2.613231658935547
----------------------------------------
Caption:
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.5153193
@search.rerankerScore: 2.271434783935547
----------------------------------------
Caption: Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within<em> short walking distance </em>to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort,.
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
@search.score: 4.8959594
@search.rerankerScore: 1.9861756563186646
----------------------------------------
Caption: Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend<em> evening entertainment </em>on the patio features special<em> guest musicians </em>or.
HotelId: 39
HotelName: White Mountain Lodge & Suites
Description: Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings.
@search.score: 0.7334347
@search.rerankerScore: 1.9615401029586792
----------------------------------------
Caption: Book now and Save up to 30%. Central location. <em>Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood.</em> Brand new rooms. Impeccable service.
HotelId: 15
HotelName: By the Market Hotel
Description: Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.
@search.score: 1.5502293
@search.rerankerScore: 1.9085469245910645
----------------------------------------
Press Enter to continue to the next query...

Dane wyjściowe dla odpowiedzi semantycznych

Ostateczne zapytanie zwraca semantyczną odpowiedź. Zwróć uwagę, że zmieniliśmy ciąg zapytania dla tego przykładu: "co to jest dobry hotel dla osób, które lubią czytać".

Semantyczny ranker może wygenerować odpowiedź na ciąg zapytaniowy, który wykazuje cechy pytania. Wygenerowana odpowiedź jest wyodrębniona z zawartości, więc nie będzie zawierać zawartości skomponowanej, takiej jak to, czego można oczekiwać od modelu ukończenia czatu. Jeśli semantyczna odpowiedź nie jest przydatna w danym scenariuszu, możesz pominąć semantic_answers ze swojego kodu.

Aby utworzyć semantyczną odpowiedź, pytanie i odpowiedź muszą być ściśle dopasowane, a model musi znaleźć zawartość, która wyraźnie odpowiada na pytanie. Jeśli potencjalne odpowiedzi nie spełniają progu ufności, model nie zwraca odpowiedzi. W celach demonstracyjnych pytanie w tym przykładzie zostało zaprojektowane tak, aby uzyskać odpowiedź, aby zobaczyć składnię.

Pamiętaj, że odpowiedzi są dosłowną zawartością pobraną z indeksu i mogą brakować fraz, które użytkownik spodziewa się zobaczyć. Aby uzyskać złożone odpowiedzi wygenerowane przez model ukończenia czatu, rozważ użycie wzorca RAG lub agentowego pobierania danych.

Extractive Answers:
  Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
----------------------------------------
HotelId: 1
HotelName: Stay-Kay City Hotel
Description: This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
@search.score: 2.0361428
@search.rerankerScore: 2.124817371368408
----------------------------------------
HotelId: 16
HotelName: Double Sanctuary Resort
Description: 5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
@search.score: 3.759768
@search.rerankerScore: 2.0705394744873047
----------------------------------------
HotelId: 38
HotelName: Lakeside B & B
Description: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
@search.score: 0.7308748
@search.rerankerScore: 2.041472911834717
----------------------------------------
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 3.391012
@search.rerankerScore: 2.0231292247772217
----------------------------------------
HotelId: 15
HotelName: By the Market Hotel
Description: Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.
@search.score: 1.3198771
@search.rerankerScore: 2.021622657775879
----------------------------------------

Z tego przewodnika Szybki start dowiesz się, jak dodać klasyfikację semantyczną do istniejącego indeksu. Możesz użyć pliku hotels-sample-index lub własnego.

W usłudze Azure AI Search semantyczna klasyfikacja to funkcja po stronie zapytania, która wykorzystuje zrozumienie odczytu maszynowego od firmy Microsoft w celu ponownego podkreślenia wyników wyszukiwania, promując najbardziej semantycznie istotne dopasowania na początku listy. W zależności od zawartości i zapytania semantyczny ranking może znacznie poprawić istotność wyszukiwania przy minimalnym wysiłku dewelopera.

Możesz dodać konfigurację semantyczną do istniejącego indeksu bez konieczności ponownego kompilowania. Ranking semantyczny jest najbardziej skuteczny w tekście, który jest informacyjny lub opisowy.

W tym przewodniku Szybki start zawarto informacje na temat wykonywania następujących czynności:

  • Dodawanie konfiguracji semantycznej do indeksu wyszukiwania
  • Dodawanie parametrów semantycznych do zapytania

Wymagania wstępne

Konfigurowanie dostępu

Możesz nawiązać połączenie z usługą Azure AI Search przy użyciu kluczy API lub identyfikatora Microsoft Entra ID z przypisanymi rolami. Klucze są łatwiejsze do rozpoczęcia od, ale role są bezpieczniejsze.

Aby skonfigurować dostęp oparty na rolach:

  1. Zaloguj się do witryny Azure Portal i wybierz usługę wyszukiwania.

  2. W okienku po lewej stronie wybierz Ustawienia>Klucze.

  3. W obszarze Kontrola dostępu do interfejsu API wybierz pozycję Oba.

    Ta opcja umożliwia zarówno uwierzytelnianie oparte na kluczach, jak i bez klucza. Po przypisaniu ról możesz wrócić do tego kroku i wybrać pozycję Kontrola dostępu oparta na rolach.

  4. W okienku po lewej stronie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).

  5. Wybierz Dodaj>Dodaj przypisanie roli.

  6. Przypisz te role do konta użytkownika:

    • Współautor usługi wyszukiwania

    • Współautor danych indeksu wyszukiwania

Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z usługą Azure AI Search przy użyciu ról.

Rozpoczynanie od indeksu

Ten przewodnik szybkiego startu zakłada, że istnieje indeks, który został zmodyfikowany w celu uwzględnienia konfiguracji semantycznej. Zalecamy hotels-sample-index, który można utworzyć w ciągu kilku minut za pomocą kreatora portalu Azure.

  1. Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.

  2. Pod zarządzanie wyszukiwaniem>Indeksy otwórz hotels-sample-index. Upewnij się, że indeks nie ma konfiguracji semantycznej.

    Zrzut ekranu przedstawiający pustą stronę konfiguracji semantycznej w witrynie Azure Portal.

  3. Aby sprawdzić, czy indeks działa, uruchom zapytanie. W Eksploratorze wyszukiwania wprowadź ten ciąg wyszukiwania "odległość spaceru od muzyki na żywo" , aby można było wyświetlić odpowiedź przed zastosowaniem semantycznego rankingu.

    Zrzut ekranu przedstawiający zapytanie w Eksploratorze wyszukiwania w portalu.

    Odpowiedź powinna być podobna do poniższego przykładu, jak w przypadku domyślnego klasyfikatora BM25 L1 na potrzeby wyszukiwania pełnotekstowego. Aby uzyskać czytelność, przykład wybiera tylko pola "HotelName" "HotelId" i "Description".

    To zapytanie jest wyszukiwaniem słów kluczowych. Wyniki zawierają dosłowne dopasowania dotyczące terminów zapytania (spacer, odległość, live, muzyka) lub wariant językowy (spacer, życie).

    "@odata.count": 13,
    "value": [
      {
        "@search.score": 5.5153193,
        "HotelId": "2",
        "HotelName": "Old Century Hotel",
        "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music."
      },
      {
        "@search.score": 5.074317,
        "HotelId": "24",
        "HotelName": "Uptown Chic Hotel",
        "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
      },
      {
        "@search.score": 4.8959594,
        "HotelId": "4",
        "HotelName": "Sublime Palace Hotel",
        "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience."
      },
      {
        "@search.score": 2.5966604,
        "HotelId": "35",
        "HotelName": "Bellevue Suites",
        "Description": "Comfortable city living in the very center of downtown Bellevue. Newly reimagined, this hotel features apartment-style suites with sleeping, living and work spaces. Located across the street from the Light Rail to downtown. Free shuttle to the airport."
      },
      {
        "@search.score": 2.566386,
        "HotelId": "47",
        "HotelName": "Country Comfort Inn",
        "Description": "Situated conveniently at the north end of the village, the inn is just a short walk from the lake, offering reasonable rates and all the comforts home inlcuding living room suites and functional kitchens. Pets are welcome."
      },
      {
        "@search.score": 2.2405157,
        "HotelId": "9",
        "HotelName": "Smile Up Hotel",
        "Description": "Experience the fresh, modern downtown. Enjoy updated rooms, bold style & prime location. Don't miss our weekend live music series featuring who's new/next on the scene."
      },
      {
        "@search.score": 2.1737604,
        "HotelId": "8",
        "HotelName": "Foot Happy Suites",
        "Description": "Downtown in the heart of the business district. Close to everything. Leave your car behind and walk to the park, shopping, and restaurants. Or grab one of our bikes and take your explorations a little further."
      },
      {
        "@search.score": 2.0364518,
        "HotelId": "31",
        "HotelName": "Country Residence Hotel",
        "Description": "All of the suites feature full-sized kitchens stocked with cookware, separate living and sleeping areas and sofa beds. Some of the larger rooms have fireplaces and patios or balconies. Experience real country hospitality in the heart of bustling Nashville. The most vibrant music scene in the world is just outside your front door."
      },
      {
        "@search.score": 1.7595702,
        "HotelId": "49",
        "HotelName": "Swirling Currents Hotel",
        "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. "
      },
      {
        "@search.score": 1.5502293,
        "HotelId": "15",
        "HotelName": "By the Market Hotel",
        "Description": "Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service."
      },
      {
        "@search.score": 1.3302404,
        "HotelId": "42",
        "HotelName": "Rock Bottom Resort & Campground",
        "Description": "Rock Bottom is nestled on 20 unspoiled acres on a private cove of Rock Bottom Lake. We feature both lodging and campground accommodations to suit just about every taste. Even though we are out of the traffic of the city, getting there is only a short drive away."
      },
      {
        "@search.score": 0.9050383,
        "HotelId": "38",
        "HotelName": "Lakeside B & B",
        "Description": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply."
      },
      {
        "@search.score": 0.7334347,
        "HotelId": "39",
        "HotelName": "White Mountain Lodge & Suites",
        "Description": "Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings."
      }
    ]
    

Później możesz spróbować ponownie wykonać to zapytanie po skonfigurowaniu klasyfikacji semantycznej, aby zobaczyć, jak zmienia się odpowiedź.

Wskazówka

Konfigurację semantyczną można dodać w witrynie Azure Portal. Jeśli jednak chcesz dowiedzieć się, jak programowo dodać konfigurację semantyczną, postępuj zgodnie z instrukcjami w tym przewodniku Szybki start.

Konfigurowanie klienta

W tym szybkim przewodniku dowiesz się, jak korzystać z notesu Jupyter i biblioteki azure-search-documents w zestawie Azure SDK dla języka Python do poznania rankingów semantycznych.

Na potrzeby tego przewodnika szybkiego startu zalecamy Visual Studio Code z Python 3.10 lub nowszy oraz rozszerzenie Python.

Wskazówka

Możesz pobrać gotowy notatnik i rozpocząć od ukończonego projektu lub wykonać te kroki, aby utworzyć własny.

W tym przewodniku Szybki start zalecamy środowisko wirtualne:

  1. Uruchom program Visual Studio Code.

  2. Otwórz plik semantic-search-quickstart.ipynb lub utwórz nowy notatnik.

  3. Otwórz paletę poleceń przy użyciu Ctrl+Shift+P.

  4. Wyszukaj frazę Python: Create Environment (Tworzenie środowiska).

  5. Wybierz pozycję Venv.

  6. Wybierz interpreter języka Python. Wybierz 3.10 lub nowszą.

Skonfigurowanie może potrwać minutę. Jeśli wystąpią problemy, zobacz Środowiska języka Python w programie VS Code.

Instalowanie pakietów i ustawianie zmiennych środowiskowych

  1. Zainstaluj pakiety, w tym azure-search-documents.

    ! pip install -r requirements.txt --quiet
    
  2. Zmień nazwę sample.env na .env, a następnie podaj punkt końcowy usługi wyszukiwania. Punkt końcowy można uzyskać z portalu Azure na stronie Przegląd usługi wyszukiwania.

    AZURE_SEARCH_ENDPOINT=https://your-search-service.search.windows.net
    AZURE_SEARCH_INDEX_NAME=hotels-sample-index
    

Zaloguj się do Azure

Jeśli zalogowałeś się do witryny Azure Portal, zalogowałeś się na platformie Azure. Jeśli nie masz pewności, zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell: az login lub az connect. Jeśli masz wiele dzierżaw i subskrypcji, zobacz Szybki start: nawiązywanie połączenia bez kluczy , aby uzyskać pomoc dotyczącą nawiązywania połączenia.

Aktualizowanie indeksu

W tej sekcji zaktualizujesz indeks wyszukiwania, aby uwzględnić konfigurację semantyczną. Kod pobiera definicję indeksu z usługi wyszukiwania i dodaje konfigurację semantyczną.

  1. Otwórz plik semantic-search-quickstart.ipynb w programie Visual Studio Code lub utwórz nowy plik.

  2. Podaj zmienne używane w rozwiązaniu.

    # Provide variables
    from dotenv import load_dotenv
    from azure.identity import DefaultAzureCredential, get_bearer_token_provider
    import os
    
    load_dotenv(override=True) # Take environment variables from .env.
    
    # The following variables from your .env file are used in this notebook
    search_endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
    credential = DefaultAzureCredential()
    token_provider = get_bearer_token_provider(credential, "https://search.azure.com/.default")
    index_name = os.getenv("AZURE_SEARCH_INDEX", "hotels-sample-index")
    
  3. Utwórz element SearchIndexClient i pobierz istniejący plik hotels-sample-index.

    from azure.search.documents.indexes import SearchIndexClient
    from azure.identity import DefaultAzureCredential
    import os
    
    # Initialize the client (similar to what you already have)
    search_endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
    credential = DefaultAzureCredential()
    index_name = "hotels-sample-index"  # or use your existing index_name variable
    
    # Create the SearchIndexClient
    index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
    
    try:
        # Get the existing index schema
        index = index_client.get_index(index_name)
    
        print(f"Index name: {index.name}")
        print(f"Number of fields: {len(index.fields)}")
    
        # Print field details
        for field in index.fields:
            print(f"Field: {field.name}, Type: {field.type}, Searchable: {field.searchable}")
    
        # Access semantic configuration if it exists
        if index.semantic_search and index.semantic_search.configurations:
            for config in index.semantic_search.configurations:
                print(f"Semantic config: {config.name}")
                if config.prioritized_fields.title_field:
                    print(f"Title field: {config.prioritized_fields.title_field.field_name}")
        else:
            print("No semantic configuration exists for this index")
    
    except Exception as ex:
        print(f"Error retrieving index: {ex}")
    
  4. Uruchom kod.

  5. Dane wyjściowe to nazwa indeksu, lista pól i instrukcja wskazująca, czy istnieje konfiguracja semantyczna. Na potrzeby tego przewodnika Szybki Start komunikat powinien brzmieć: "Dla tego indeksu nie istnieje żadna konfiguracja semantyczna".

  6. Dodaj konfigurację semantyczną do istniejącego indeksu hotels-sample-index w usłudze wyszukiwania. Ta operacja nie usuwa dokumentów wyszukiwania, a indeks nadal działa po dodaniu konfiguracji.

    # Add semantic configuration to hotels-sample-index and display updated index details
    from azure.search.documents.indexes.models import (
        SemanticConfiguration,
        SemanticField,
        SemanticPrioritizedFields,
        SemanticSearch
    )
    
    try:
        # Get the existing index
        existing_index = index_client.get_index(index_name)
    
        # Create a new semantic configuration
        new_semantic_config = SemanticConfiguration(
            name="semantic-config",
            prioritized_fields=SemanticPrioritizedFields(
                title_field=SemanticField(field_name="HotelName"),
                keywords_fields=[SemanticField(field_name="Tags")],
                content_fields=[SemanticField(field_name="Description")]
            )
        )
    
        # Add semantic configuration to the index
        if existing_index.semantic_search is None:
            existing_index.semantic_search = SemanticSearch(configurations=[new_semantic_config])
        else:
            # Check if configuration already exists
            config_exists = any(config.name == "semantic-config" 
                              for config in existing_index.semantic_search.configurations)
            if not config_exists:
                existing_index.semantic_search.configurations.append(new_semantic_config)
    
        # Update the index
        result = index_client.create_or_update_index(existing_index)
    
        # Get the updated index and display detailed information
        updated_index = index_client.get_index(index_name)
    
        print("Semantic configurations:")
        print("-" * 40)
        if updated_index.semantic_search and updated_index.semantic_search.configurations:
            for config in updated_index.semantic_search.configurations:
                print(f"  Configuration: {config.name}")
                if config.prioritized_fields.title_field:
                    print(f"    Title field: {config.prioritized_fields.title_field.field_name}")
                if config.prioritized_fields.keywords_fields:
                    keywords = [kf.field_name for kf in config.prioritized_fields.keywords_fields]
                    print(f"    Keywords fields: {', '.join(keywords)}")
                if config.prioritized_fields.content_fields:
                    content = [cf.field_name for cf in config.prioritized_fields.content_fields]
                    print(f"    Content fields: {', '.join(content)}")
                print()
        else:
            print("  No semantic configurations found")
    
        print("✅ Semantic configuration successfully added!")
    
    except Exception as ex:
        print(f"❌ Error adding semantic configuration: {ex}")
    
  7. Uruchom kod.

  8. Dane wyjściowe to właśnie dodana konfiguracja semantyczna.

Uruchamianie zapytań semantycznych

Gdy indeks ma konfigurację semantyczną, można uruchamiać zapytania zawierające parametry semantyczne.

  1. Utwórz element SearchClient i żądanie zapytania, które zawiera typ zapytania semantycznego i konfigurację semantyczną. Jest to minimalne wymaganie dotyczące wywoływania semantycznego rankingu.

    # Set up the search client
    search_client = SearchClient(endpoint=search_endpoint,
                          index_name=index_name,
                          credential=credential)
    
    # Runs a semantic query (runs a BM25-ranked query, rescoring and promoting the most semantically relevant matches to the top)
    results =  search_client.search(query_type='semantic', semantic_configuration_name='semantic-config',
        search_text="walking distance to live music", 
        select='HotelId,HotelName,Description', query_caption='extractive')
    
    for result in results:
        print(result["@search.reranker_score"])
        print(result["HotelId"])
        print(result["HotelName"])
        print(f"Description: {result['Description']}")
    
  2. Uruchom kod.

  3. Dane wyjściowe powinny składać się z 13 dokumentów uporządkowanych przez element "@search.reranker_score".

Przywracanie napisów

Opcjonalnie możesz dodać podpisy, aby wyodrębnić fragmenty tekstu i zastosować wyróżnianie trafień do ważnych terminów i fraz. To zapytanie SQL dodaje podpisy.

  1. Dodaj captions do zapytania.

    # Runs a semantic query that returns captions
    results =  search_client.search(query_type='semantic', semantic_configuration_name='semantic-config',
        search_text="walking distance to live music", 
        select='HotelName,HotelId,Description', query_caption='extractive')
    
    for result in results:
        print(result["@search.reranker_score"])
        print(result["HotelId"])
        print(result["HotelName"])
        print(f"Description: {result['Description']}")
    
        captions = result["@search.captions"]
        if captions:
            caption = captions[0]
            if caption.highlights:
                print(f"Caption: {caption.highlights}\n")
            else:
                print(f"Caption: {caption.text}\n")
    
  2. Uruchom kod.

  3. Dane wyjściowe powinny zawierać nowy element nagłówka obok pola wyszukiwania. Nagłówki są najbardziej istotnymi fragmentami wewnątrz wyniku. Jeśli indeks zawiera większe fragmenty tekstu, podpisy mogą być pomocne do wyodrębnienia najbardziej interesujących zdań.

    2.613231658935547
    24
    Uptown Chic Hotel
    Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
    Caption: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
    

Zwracanie odpowiedzi semantycznych

W tym ostatnim zapytaniu zwróć semantyczne odpowiedzi.

Semantyczny ranker może wygenerować odpowiedź na ciąg zapytaniowy, który wykazuje cechy pytania. Wygenerowana odpowiedź jest wyodrębniona z zawartości, więc nie będzie zawierać zawartości skomponowanej, takiej jak to, czego można oczekiwać od modelu ukończenia czatu. Jeśli semantyczna odpowiedź nie jest przydatna w danym scenariuszu, możesz pominąć semantic_answers ze swojego kodu.

Aby utworzyć semantyczną odpowiedź, pytanie i odpowiedź muszą być ściśle dopasowane, a model musi znaleźć zawartość, która wyraźnie odpowiada na pytanie. Jeśli potencjalne odpowiedzi nie spełniają progu ufności, model nie zwraca odpowiedzi. W celach demonstracyjnych pytanie w tym przykładzie zostało zaprojektowane tak, aby uzyskać odpowiedź, aby zobaczyć składnię.

  1. Dodaj answers do zapytania.

    # Run a semantic query that returns semantic answers  
    results =  search_client.search(query_type='semantic', semantic_configuration_name='semantic-config',
     search_text="what's a good hotel for people who like to read",
     select='HotelName,Description,Category', query_caption='extractive', query_answer="extractive",)
    
    semantic_answers = results.get_answers()
    for answer in semantic_answers:
        if answer.highlights:
            print(f"Semantic Answer: {answer.highlights}")
        else:
            print(f"Semantic Answer: {answer.text}")
        print(f"Semantic Answer Score: {answer.score}\n")
    
    for result in results:
        print(result["@search.reranker_score"])
        print(result["HotelName"])
        print(f"Description: {result['Description']}")
    
        captions = result["@search.captions"]
        if captions:
            caption = captions[0]
            if caption.highlights:
                print(f"Caption: {caption.highlights}\n")
            else:
                print(f"Caption: {caption.text}\n")
    
  2. Uruchom kod.

  3. Dane wyjściowe powinny wyglądać podobnie do poniższego przykładu, gdzie najlepsza odpowiedź na pytanie jest pobierana z jednego z wyników.

    Pamiętaj, że odpowiedzi są dosłowną zawartością pobraną z indeksu i mogą brakować fraz, które użytkownik spodziewa się zobaczyć. Aby uzyskać złożone odpowiedzi wygenerowane przez model dopełnienia czatu, rozważ użycie wzorca RAG lub agentowego pobierania.

    Semantic Answer: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
    Semantic Answer Score: 0.9829999804496765
    
    2.124817371368408
    1
    Stay-Kay City Hotel
    Description: This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
    Caption: This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
    
    2.0705394744873047
    16
    Double Sanctuary Resort
    Description: 5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
    Caption: <em>5 star Luxury Hotel </em>-<em> Biggest </em>Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
    
    2.041472911834717
    38
    Lakeside B & B
    Description: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
    Caption: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
    
    2.084540843963623
    Double Sanctuary Resort
    Description: 5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
    Caption: <em>5 star Luxury Hotel </em>-<em> Biggest </em>Rooms in the<em> city. #1 </em>Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
    
    ...
    

Z tego przewodnika Szybki start dowiesz się, jak dodać klasyfikację semantyczną do istniejącego indeksu. Możesz użyć pliku hotels-sample-index lub własnego.

W usłudze Azure AI Search semantyczna klasyfikacja to funkcja po stronie zapytania, która wykorzystuje zrozumienie odczytu maszynowego od firmy Microsoft w celu ponownego podkreślenia wyników wyszukiwania, promując najbardziej semantycznie istotne dopasowania na początku listy. W zależności od zawartości i zapytania semantyczny ranking może znacznie poprawić istotność wyszukiwania przy minimalnym wysiłku dewelopera.

Możesz dodać konfigurację semantyczną do istniejącego indeksu bez konieczności ponownego kompilowania. Ranking semantyczny jest najbardziej skuteczny w tekście, który jest informacyjny lub opisowy.

W tym przewodniku Szybki start zawarto informacje na temat wykonywania następujących czynności:

  • Dodawanie konfiguracji semantycznej do indeksu wyszukiwania
  • Dodawanie parametrów semantycznych do zapytania

Wymagania wstępne

Konfigurowanie dostępu

Możesz nawiązać połączenie z usługą Azure AI Search przy użyciu kluczy API lub identyfikatora Microsoft Entra ID z przypisanymi rolami. Klucze są łatwiejsze do rozpoczęcia od, ale role są bezpieczniejsze.

Aby skonfigurować dostęp oparty na rolach:

  1. Zaloguj się do witryny Azure Portal i wybierz usługę wyszukiwania.

  2. W okienku po lewej stronie wybierz Ustawienia>Klucze.

  3. W obszarze Kontrola dostępu do interfejsu API wybierz pozycję Oba.

    Ta opcja umożliwia zarówno uwierzytelnianie oparte na kluczach, jak i bez klucza. Po przypisaniu ról możesz wrócić do tego kroku i wybrać pozycję Kontrola dostępu oparta na rolach.

  4. W okienku po lewej stronie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).

  5. Wybierz Dodaj>Dodaj przypisanie roli.

  6. Przypisz te role do konta użytkownika:

    • Współautor usługi wyszukiwania

    • Współautor danych indeksu wyszukiwania

Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z usługą Azure AI Search przy użyciu ról.

Rozpoczynanie od indeksu

Ten przewodnik szybkiego startu zakłada, że istnieje indeks, który został zmodyfikowany w celu uwzględnienia konfiguracji semantycznej. Zalecamy hotels-sample-index, który można utworzyć w ciągu kilku minut za pomocą kreatora portalu Azure.

  1. Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.

  2. Pod zarządzanie wyszukiwaniem>Indeksy otwórz hotels-sample-index. Upewnij się, że indeks nie ma konfiguracji semantycznej.

    Zrzut ekranu przedstawiający pustą stronę konfiguracji semantycznej w witrynie Azure Portal.

  3. Aby sprawdzić, czy indeks działa, uruchom zapytanie. W Eksploratorze wyszukiwania wprowadź ten ciąg wyszukiwania "odległość spaceru od muzyki na żywo" , aby można było wyświetlić odpowiedź przed zastosowaniem semantycznego rankingu.

    Zrzut ekranu przedstawiający zapytanie w Eksploratorze wyszukiwania w portalu.

    Odpowiedź powinna być podobna do poniższego przykładu, jak w przypadku domyślnego klasyfikatora BM25 L1 na potrzeby wyszukiwania pełnotekstowego. Aby uzyskać czytelność, przykład wybiera tylko pola "HotelName" "HotelId" i "Description".

    To zapytanie jest wyszukiwaniem słów kluczowych. Wyniki zawierają dosłowne dopasowania dotyczące terminów zapytania (spacer, odległość, live, muzyka) lub wariant językowy (spacer, życie).

    "@odata.count": 13,
    "value": [
      {
        "@search.score": 5.5153193,
        "HotelId": "2",
        "HotelName": "Old Century Hotel",
        "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music."
      },
      {
        "@search.score": 5.074317,
        "HotelId": "24",
        "HotelName": "Uptown Chic Hotel",
        "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
      },
      {
        "@search.score": 4.8959594,
        "HotelId": "4",
        "HotelName": "Sublime Palace Hotel",
        "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience."
      },
      {
        "@search.score": 2.5966604,
        "HotelId": "35",
        "HotelName": "Bellevue Suites",
        "Description": "Comfortable city living in the very center of downtown Bellevue. Newly reimagined, this hotel features apartment-style suites with sleeping, living and work spaces. Located across the street from the Light Rail to downtown. Free shuttle to the airport."
      },
      {
        "@search.score": 2.566386,
        "HotelId": "47",
        "HotelName": "Country Comfort Inn",
        "Description": "Situated conveniently at the north end of the village, the inn is just a short walk from the lake, offering reasonable rates and all the comforts home inlcuding living room suites and functional kitchens. Pets are welcome."
      },
      {
        "@search.score": 2.2405157,
        "HotelId": "9",
        "HotelName": "Smile Up Hotel",
        "Description": "Experience the fresh, modern downtown. Enjoy updated rooms, bold style & prime location. Don't miss our weekend live music series featuring who's new/next on the scene."
      },
      {
        "@search.score": 2.1737604,
        "HotelId": "8",
        "HotelName": "Foot Happy Suites",
        "Description": "Downtown in the heart of the business district. Close to everything. Leave your car behind and walk to the park, shopping, and restaurants. Or grab one of our bikes and take your explorations a little further."
      },
      {
        "@search.score": 2.0364518,
        "HotelId": "31",
        "HotelName": "Country Residence Hotel",
        "Description": "All of the suites feature full-sized kitchens stocked with cookware, separate living and sleeping areas and sofa beds. Some of the larger rooms have fireplaces and patios or balconies. Experience real country hospitality in the heart of bustling Nashville. The most vibrant music scene in the world is just outside your front door."
      },
      {
        "@search.score": 1.7595702,
        "HotelId": "49",
        "HotelName": "Swirling Currents Hotel",
        "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. "
      },
      {
        "@search.score": 1.5502293,
        "HotelId": "15",
        "HotelName": "By the Market Hotel",
        "Description": "Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service."
      },
      {
        "@search.score": 1.3302404,
        "HotelId": "42",
        "HotelName": "Rock Bottom Resort & Campground",
        "Description": "Rock Bottom is nestled on 20 unspoiled acres on a private cove of Rock Bottom Lake. We feature both lodging and campground accommodations to suit just about every taste. Even though we are out of the traffic of the city, getting there is only a short drive away."
      },
      {
        "@search.score": 0.9050383,
        "HotelId": "38",
        "HotelName": "Lakeside B & B",
        "Description": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply."
      },
      {
        "@search.score": 0.7334347,
        "HotelId": "39",
        "HotelName": "White Mountain Lodge & Suites",
        "Description": "Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings."
      }
    ]
    

Później możesz spróbować ponownie wykonać to zapytanie po skonfigurowaniu klasyfikacji semantycznej, aby zobaczyć, jak zmienia się odpowiedź.

Wskazówka

Konfigurację semantyczną można dodać w witrynie Azure Portal. Jeśli jednak chcesz dowiedzieć się, jak programowo dodać konfigurację semantyczną, postępuj zgodnie z instrukcjami w tym przewodniku Szybki start.

Konfigurowanie klienta

W tym przewodniku szybkiego startu korzystasz z klienta REST i interfejsów API REST usługi Azure AI Search do konfiguracji i używania rankera semantycznego.

Zalecamy użycie Visual Studio Code z zainstalowanym rozszerzeniem klienta REST do tej szybkiej konfiguracji.

Wskazówka

Możesz pobrać kod źródłowy, aby rozpocząć od ukończonego projektu lub wykonać następujące kroki, aby utworzyć własny.

  1. Uruchom program Visual Studio Code i otwórz plik semantic-search-index-update.rest lub utwórz nowy plik.

  2. U góry ustaw zmienne środowiskowe dla usługi wyszukiwania, autoryzacji i nazwy indeksu.

    • W polu @searchURLzaloguj się do witryny Azure Portal i skopiuj adres URL ze strony Przegląd usługi wyszukiwania.

    • W przypadku @personalAccessToken, postępuj zgodnie z instrukcjami w temacie Łączenie bez kluczy, aby uzyskać osobisty token dostępu.

  3. Aby przetestować połączenie, wyślij pierwsze żądanie.

    ### List existing indexes by name (verify the connection)
     GET  {{searchUrl}}/indexes?api-version=2025-05-01-preview&$select=name  HTTP/1.1
     Authorization: Bearer {{personalAccessToken}}
    
  4. Wybierz pozycję Wysłane żądanie.

    Zrzut ekranu przedstawiający link wysyłania żądania klienta REST.

  5. Dane wyjściowe dla tego żądania GET zwracają listę istniejących indeksów. Powinien zostać wyświetlony kod stanu powodzenia HTTP 200 oraz lista indeksów, w tym hotels-sample-index używana w tym przewodniku Szybki start.

Aktualizowanie indeksu

Aby zaktualizować indeks przy użyciu interfejsu API REST, należy podać cały schemat oraz modyfikacje, które chcesz wprowadzić. To żądanie zawiera schemat hotels-sample-index oraz konfigurację semantyczną. Modyfikacja składa się z następującego kodu JSON.

"semantic": {
   "configurations": [
   {
      "name": "semantic-config",
      "flightingOptIn": false,
      "rankingOrder": "BoostedRerankerScore",
      "prioritizedFields": {
         "titleField": { "fieldName": "HotelName" },
         "prioritizedContentFields": [{ "fieldName": "Description" }],
         "prioritizedKeywordsFields": [{ "fieldName": "Tags" }]
      }
   }
   ]
}
  1. Sformułuj żądanie POST określające nazwę indeksu, operację i pełny schemat JSON. Wszystkie wymagane elementy schematu muszą być obecne. To żądanie zawiera pełny schemat dla hotels-sample-index oraz konfigurację semantyczną.

    POST  {{searchUrl}}/indexes?api-version=2025-05-01-preview  HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{personalAccessToken}}
    
    {
       "name": "hotels-sample-index",
       "fields": [
           { "name": "HotelId", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "key": true },
           { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
           { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
           { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
           { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
           { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
           { "name": "ParkingIncluded", "type": "Edm.Boolean", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true },
           { "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": false, "retrievable": true, "stored": true, "sortable": true, "facetable": false },
           { "name": "Rating", "type": "Edm.Double", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": true, "facetable": true },
           { "name": "Address", "type": "Edm.ComplexType", "fields": [
              { "name": "StreetAddress", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
              { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
              { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
              { "name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
              { "name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" }]},
           { "name": "Location", "type": "Edm.GeographyPoint", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": true, "facetable": false },
           { "name": "Rooms", "type": "Collection(Edm.ComplexType)", "fields": [
              { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
              { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "stored": true, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
              { "name": "Type", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
              { "name": "BaseRate", "type": "Edm.Double", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true },
              { "name": "BedOptions", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" },
              { "name": "SleepsCount", "type": "Edm.Int64", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true },
              { "name": "SmokingAllowed", "type": "Edm.Boolean", "searchable": false, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true },
              { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "retrievable": true, "stored": true, "sortable": false, "facetable": true, "analyzer": "en.microsoft" }]},
           { "name": "id", "type": "Edm.String", "searchable": false, "filterable": false, "retrievable": false, "stored": true, "sortable": false, "facetable": false },
           { "name": "rid", "type": "Edm.String", "searchable": false, "filterable": false, "retrievable": false, "stored": true, "sortable": false, "facetable": false }],
      "scoringProfiles": [],
      "suggesters": [
        {
          "name": "sg",
          "searchMode": "analyzingInfixMatching",
          "sourceFields": ["Address/City", "Address/Country", "Rooms/Type", "Rooms/Tags"]
        }
      ],
      "analyzers": [],
      "normalizers": [],
      "tokenizers": [],
      "tokenFilters": [],
      "charFilters": [],
      "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
      },
      "semantic": {
        "configurations": [
          {
            "name": "semantic-config",
            "flightingOptIn": false,
            "rankingOrder": "BoostedRerankerScore",
            "prioritizedFields": {
              "titleField": {
                "fieldName": "HotelName"
              },
              "prioritizedContentFields": [
                {
                  "fieldName": "Description"
                }
              ],
              "prioritizedKeywordsFields": [
                {
                  "fieldName": "Tags"
                }
              ]
            }
          }
        ]
      }
    }
    
  2. Wybierz pozycję Wysłane żądanie.

  3. Dane wyjściowe dla tego żądania POST to komunikat o stanie powodzenia HTTP 200.

Uruchamianie zapytań semantycznych

Wymagane parametry semantyczne obejmują query_type i semantic_configuration_name. Oto przykład podstawowego zapytania semantycznego używającego minimalnych parametrów.

  1. Otwórz plik semantic-search-query.rest lub utwórz nowy plik.

  2. Na górze pliku ustaw zmienne środowiskowe dla usługi wyszukiwania, autoryzacji i nazwy indeksu.

    • W polu @searchURLzaloguj się do witryny Azure Portal i skopiuj adres URL ze strony Przegląd usługi wyszukiwania.

    • W przypadku @personalAccessToken, postępuj zgodnie z instrukcjami w temacie Łączenie bez kluczy, aby uzyskać osobisty token dostępu.

  3. Przetestuj połączenie za pomocą żądania GET, które zwraca hotels-sample-index.

    GET  {{searchUrl}}/indexes/hotels-sample-index?api-version=2025-05-01-preview  HTTP/1.1
    Authorization: Bearer {{personalAccessToken}}
    
  4. Wyślij zapytanie zawierające semantyczne typ zapytania i nazwę konfiguracji.

     POST {{searchUrl}}/indexes/hotels-sample-index/docs/search?api-version=2025-05-01-preview  HTTP/1.1
     Content-Type: application/json
     Authorization: Bearer {{personalAccessToken}}
    
     {
       "search": "walking distance to live music",
       "select": "HotelId, HotelName, Description",
       "count": true,
       "top": 7,
       "queryType": "simple"
     }
    
  5. Dane wyjściowe składają się z wyników wyszukiwania w formacie JSON. Trzynaście hoteli pasuje do zapytania. Pierwsze siedem znajduje się w tym przykładzie.

    {
       "@odata.count": 13,
       "@search.answers": [],
       "value": [
         {
           "@search.score": 5.074317,
           "@search.rerankerScore": 2.613231658935547,
           "HotelId": "24",
           "HotelName": "Uptown Chic Hotel",
           "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
         },
         {
           "@search.score": 5.5153193,
           "@search.rerankerScore": 2.271434783935547,
           "HotelId": "2",
           "HotelName": "Old Century Hotel",
           "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music."
         },
         {
           "@search.score": 4.8959594,
           "@search.rerankerScore": 1.9861756563186646,
           "HotelId": "4",
           "HotelName": "Sublime Palace Hotel",
           "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience."
         },
         {
           "@search.score": 0.7334347,
           "@search.rerankerScore": 1.9615401029586792,
           "HotelId": "39",
           "HotelName": "White Mountain Lodge & Suites",
           "Description": "Live amongst the trees in the heart of the forest. Hike along our extensive trail system. Visit the Natural Hot Springs, or enjoy our signature hot stone massage in the Cathedral of Firs. Relax in the meditation gardens, or join new friends around the communal firepit. Weekend evening entertainment on the patio features special guest musicians or poetry readings."
         },
         {
           "@search.score": 1.5502293,
           "@search.rerankerScore": 1.9085469245910645,
           "HotelId": "15",
           "HotelName": "By the Market Hotel",
           "Description": "Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service."
         },
         {
           "@search.score": 1.7595702,
           "@search.rerankerScore": 1.90234375,
           "HotelId": "49",
           "HotelName": "Swirling Currents Hotel",
           "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. "
         },
         {
           "@search.score": 2.0364518,
           "@search.rerankerScore": 1.9012802839279175,
           "HotelId": "31",
           "HotelName": "Country Residence Hotel",
           "Description": "All of the suites feature full-sized kitchens stocked with cookware, separate living and sleeping areas and sofa beds. Some of the larger rooms have fireplaces and patios or balconies. Experience real country hospitality in the heart of bustling Nashville. The most vibrant music scene in the world is just outside your front door."
         }
       ]
     }
    

Przywracanie napisów

Opcjonalnie możesz dodać podpisy, aby wyodrębnić fragmenty tekstu i zastosować wyróżnianie trafień do ważnych terminów i fraz. To zapytanie dodaje etykiety, które zawierają podświetlanie wyników wyszukiwania.

  1. captions Dodaj parametr i wyślij żądanie.

    POST {{searchUrl}}/indexes/hotels-sample-index/docs/search?api-version=2025-05-01-preview  HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{personalAccessToken}}
    
    {
      "search": "walking distance to live music",
      "select": "HotelId, HotelName, Description",
      "count": true,
      "queryType": "semantic",
      "semanticConfiguration": "semantic-config",
      "captions": "extractive|highlight-true"
    }
    
  2. Dane wyjściowe składają się z tych samych wyników, z dodatkiem "@search.captions". Oto kod JSON pojedynczego dokumentu. Każde dopasowanie obejmuje wyniki wyszukiwania, podpisy w postaci zwykłego tekstu, formatowanie wyróżnienia oraz wybrane pola.

    {
       "@search.score": 5.074317,
       "@search.rerankerScore": 2.613231658935547,
       "@search.captions": [
         {
           "text": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.",
           "highlights": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance."
         }
       ],
       "HotelId": "24",
       "HotelName": "Uptown Chic Hotel",
       "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
    }
    

Zwracanie odpowiedzi semantycznych

W tym ostatnim zapytaniu zwróć semantyczne odpowiedzi.

Semantyczny ranker może wygenerować odpowiedź na ciąg zapytaniowy, który wykazuje cechy pytania. Wygenerowana odpowiedź jest wyodrębniona z zawartości, więc nie będzie zawierać zawartości skomponowanej, takiej jak to, czego można oczekiwać od modelu ukończenia czatu. Jeśli semantyczna odpowiedź nie jest przydatna w danym scenariuszu, możesz pominąć semantic_answers ze swojego kodu.

Aby utworzyć semantyczną odpowiedź, pytanie i odpowiedź muszą być ściśle dopasowane, a model musi znaleźć zawartość, która wyraźnie odpowiada na pytanie. Jeśli potencjalne odpowiedzi nie spełniają progu ufności, model nie zwraca odpowiedzi. W celach demonstracyjnych pytanie w tym przykładzie zostało zaprojektowane tak, aby uzyskać odpowiedź, aby zobaczyć składnię.

  1. Sformułuj żądanie przy użyciu ciągu wyszukiwania, który zadaje pytanie.

    POST {{searchUrl}}/indexes/hotels-sample-index/docs/search?api-version=2025-05-01-preview  HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{personalAccessToken}}
    
    {
      "search": "what's a good hotel for people who like to read",
      "select": "HotelId, HotelName, Description",
      "count": true,
      "queryType": "semantic",
      "semanticConfiguration": "semantic-config"
      "answers": "extractive"
    }
    
  2. Dane wyjściowe składają się z 41 wyników dla nowego zapytania z "@search.odpowiedzi" dla pytania w zapytaniu dotyczącym hoteli dla osób, które lubią czytać.

    Pamiętaj, że odpowiedzi są dosłowną zawartością pobraną z indeksu i mogą brakować fraz, które użytkownik spodziewa się zobaczyć. Aby uzyskać złożone odpowiedzi wygenerowane przez model dopełnienia czatu, rozważ użycie wzorca RAG lub agentowego wyszukiwania.

    W tym przykładzie odpowiedź jest uznawana za dobrze dopasowaną do pytania.

    {
      "@odata.count": 41,
      "@search.answers": [
        {
          "key": "38",
          "text": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
          "highlights": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
          "score": 0.9829999804496765
        }
      ],
      "value": [
        {
          "@search.score": 2.0361428,
          "@search.rerankerScore": 2.124817371368408,
          "HotelId": "1",
          "HotelName": "Stay-Kay City Hotel",
          "Description": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities."
        },
        {
          "@search.score": 3.759768,
          "@search.rerankerScore": 2.0705394744873047,
          "HotelId": "16",
          "HotelName": "Double Sanctuary Resort",
          "Description": "5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room."
        },
        {
          "@search.score": 0.7308748,
          "@search.rerankerScore": 2.041472911834717,
          "HotelId": "38",
          "HotelName": "Lakeside B & B",
          "Description": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply."
        },
        {
          "@search.score": 3.391012,
          "@search.rerankerScore": 2.0231292247772217,
          "HotelId": "2",
          "HotelName": "Old Century Hotel",
          "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music."
        },
        {
          "@search.score": 1.3198771,
          "@search.rerankerScore": 2.021622657775879,
          "HotelId": "15",
          "HotelName": "By the Market Hotel",
          "Description": "Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service."
        },
        {
          "@search.score": 1.3983066,
          "@search.rerankerScore": 2.005582809448242,
          "HotelId": "5",
          "HotelName": "Red Tide Hotel",
          "Description": "On entering this charming hotel in Scarlet Harbor, you'll notice an uncommon blend of antiques, original artwork, and contemporary comforts that give this hotel its signature look. Each suite is furnished to accentuate the views and unique characteristics of the building's classic architecture. No two suites are alike. However, all guests are welcome in the mezzanine plaza, the surrounding gardens, and the northside terrace for evening refreshments."
        },
        {
          "@search.score": 1.4815493,
          "@search.rerankerScore": 1.9739465713500977,
          "HotelId": "24",
          "HotelName": "Uptown Chic Hotel",
          "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
        }
      ]
    }
    

Czyszczenie zasobów

Jeśli pracujesz w ramach własnej subskrypcji, dobrym pomysłem po zakończeniu projektu jest sprawdzenie, czy dalej potrzebujesz utworzonych zasobów. Uruchomione zasoby mogą generować koszty. Zasoby możesz usuwać pojedynczo lub jako grupę zasobów, usuwając cały zestaw zasobów.

Zasoby można znaleźć w witrynie Azure Portal i zarządzać nimi, korzystając z linku Wszystkie zasoby lub Grupy zasobów w okienku nawigacji po lewej stronie.

W tym przewodniku Szybki start przedstawiono sposób wywoływania klasyfikacji semantycznej w istniejącym indeksie. Zalecamy wypróbowanie klasyfikacji semantycznej na własnych indeksach jako następnego kroku. Poniższe artykuły mogą pomóc w rozpoczęciu pracy.