Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.
Bu hızlı başlangıçta, var olan bir Azure Yapay Zeka Arama dizinine anlamsal derecelendirme ekleyecek ve sonuç ilgi düzeyini artırmak için anlamsal sorgular çalıştıracaksınız. Tercih ettiğiniz SDK'yı veya REST iş akışını seçmek için dil sekmelerini kullanın.
Bu hızlı başlangıçta, .NET için
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır..NET 9 veya üzeri.
Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-dotnet-samplesHızlı başlangıç klasörüne gidin.
cd azure-search-dotnet-samples/quickstart-semantic-rankingBuildIndex/Program.csiçinde,endpointyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.için
QueryIndex/Program.csönceki adımı yineleyin.Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az login
Kodu çalıştırma
Dizini anlamsal bir yapılandırmayla güncelleştirmek için ilk projeyi çalıştırın.
dotnet run --project BuildIndexdizini sorgulamak için ikinci projeyi çalıştırın. Basit sorgudan açıklamalı alt yazılar ve yanıtlarla anlamsal sorguya ilerleme durumunu görmek için sorgular arasında Enter tuşuna basın.
dotnet run --project QueryIndex
Çıkış
İlk proje, hotels-sample dizinini anlamsal bir yapılandırmayla güncelleştirir. Çıkış, anlamsal yapılandırmanın onayını içerir.
Here's a list of all indexes on the search service. You should see hotels-sample:
hotels-sample
Added new semantic configuration 'semantic-config' to the index definition.
Index updated successfully.
Here is the revised index definition:
{
"Name": "hotels-sample",
... // Trimmed for brevity
"SemanticSearch": {
"DefaultConfigurationName": "semantic-config",
"Configurations": [
{
"Name": "hotels-sample-semantic-configuration",
... // Trimmed for brevity
},
{
"Name": "semantic-config",
"PrioritizedFields": {
"TitleField": {
"FieldName": "HotelName"
},
"ContentFields": [
{
"FieldName": "Description"
}
],
"KeywordsFields": [
{
"FieldName": "Tags"
}
]
},
"RankingOrder": {}
}
]
}
}
İkinci proje dört sorgu çalıştırır. Çıktı, ilgi derecelerini, başlıkları ve yanıtları içeren arama sonuçlarını içerir.
Query 1: Simple query using the search string 'walking distance to live music'.
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.004435
----------------------------------------
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.555706
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 2: Semantic query (no captions, no answers) for 'walking distance to live music'.
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.555706
@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.004435
@search.rerankerScore: 2.271434783935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 3: Semantic query with captions.
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: 4.555706
@search.rerankerScore: 2.613231658935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 4: Semantic query with a verbatim answer from the Description field for 'what's a good hotel for people who like to read'.
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.
----------------------------------------
... // Trimmed for brevity
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
Her iki proje de aynı yapılandırma desenini paylaşır.
Program.cs dosyalar arama uç noktasını tanımlar ve anahtarsız kimlik doğrulama için DefaultAzureCredential kullanılır.
var endpoint = new Uri("PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE");
var credential = new DefaultAzureCredential();
var indexClient = new SearchIndexClient(endpoint, credential);
Önemli çıkarımlar:
-
DefaultAzureCredential, Microsoft Entra ID kullanarak anahtarsız kimlik doğrulaması sağlar.az login'dan Azure CLI kimlik bilgileri dahil olmak üzere birden çok kimlik bilgisi türünü zincirler. -
SearchIndexClientdizin şemasını güncelleştirme gibi dizin düzeyinde işlemleri yönetir. -
SearchClientdizini sorgulama gibi belge düzeyindeki işlemleri işler.
Dizini anlamsal yapılandırmayla güncelleştirme
içindeki aşağıdaki kod BuildIndex/Program.cs , var olan dizine anlamsal bir yapılandırma ekler. Bu işlem hiçbir arama belgesini silmez ve yapılandırma eklendikten sonra dizininiz çalışır durumda kalır.
static void AddSemanticConfiguration(
SearchIndex index,
string semanticConfigName)
{
if (index.SemanticSearch == null)
{
index.SemanticSearch = new SemanticSearch();
}
var configs = index.SemanticSearch.Configurations;
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
)
);
}
index.SemanticSearch.DefaultConfigurationName =
semanticConfigName;
}
Önemli çıkarımlar:
- Anlamsal yapılandırma, semantik derecelendirme için kullanılan alanları belirtir.
- Semantik yapılandırmalar yeniden derlenmeden mevcut dizinlere eklenebilir.
-
TitleField, belge başlığını temsil eden alanı ayarlar. -
ContentFields, ana içeriği içeren alanları ayarlar. -
KeywordsFieldsanahtar sözcük veya etiket içeren alanları ayarlar.
Dizini sorgulama
Proje QueryIndex sırayla dört sorgu çalıştırır ve basit bir anahtar sözcük aramasından açıklamalı alt yazılar ve yanıtlarla anlamsal derecelendirmeye doğru ilerler.
Basit sorgu
İlk sorgu, anlamsal derecelendirme kullanmayan basit bir anahtar sözcük aramasıdır. Bu sorgu, semantik yeniden sıralama ile ve olmadan sonuçları karşılaştırmak için bir temel görevi görür.
await RunQuery(client, searchText, new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Simple,
IncludeTotalCount = true,
Select = { "HotelId", "HotelName", "Description" }
});
Önemli çıkarımlar:
-
SearchQueryType.Simplevarsayılan BM25 derecelendirme algoritmasını kullanır. - Sonuçlar yalnızca anahtar sözcük ilgi düzeyine (
@search.score) göre derecelenir.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
Sonraki sorgu, açıklamalı alt yazı veya yanıt içermeyen anlamsal derecelendirme ekler. Aşağıdaki kod semantik derecelendirmeyi çağırmak için en düşük gereksinimi gösterir.
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);
Önemli çıkarımlar:
-
SearchQueryType.Semanticsorguda anlamsal derecelendirmeyi etkinleştirir. -
SemanticConfigurationNamekullanılacak semantik yapılandırmayı belirtir. -
@search.rerankerScoreanlamsal ilgiyi gösterir (daha yüksek daha iyidir). - Terim sorgusunun ilk sonuçları anlamsal derecelendirme modelleri kullanılarak yeniden puanlanır. Bu veri kümesi ve sorgu için, daha düşük dereceli sonuçlarda semantik derecelendirmenin etkileri daha belirgindir.
Açıklamalı alt yazılar içeren anlamsal sorgu
Aşağıdaki kod, önemli terimlerin ve ifadelerin vurgulandığı her sonuçtan en uygun bölümleri çıkarmak için başlıklar ekler.
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"
}
};
captionsOptions.HighlightFields.Add("Description");
await RunQuery(
client, searchText, captionsOptions, showCaptions: true
);
Önemli çıkarımlar:
-
QueryCaptioniçerik alanlarından çıkarsamalı altyazıları etkinleştirir. - Açıklamalı alt yazılar en uygun bölümleri ortaya çıkararak önemli terimlerin çevresine etiketler ekler
<em>.
Yanıtlarla anlamsal sorgu
Son sorgu semantik yanıtlar ekler. Bu sorgu farklı bir arama dizesi (searchText2) kullanır çünkü sorgu soru olarak ifade edildiğinde anlamsal yanıtlar en iyi sonucu verir. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar senaryonuz için yararlı değilse, kodunuzdan QueryAnswer öğesini çıkarın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
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
);
Önemli çıkarımlar:
-
QueryAnswersoru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
Bu hızlı başlangıçta, Java için
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır.Java 21 (LTS) ve Maven.
Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-java-samplesHızlı başlangıç klasörüne gidin.
cd azure-search-java-samples/quickstart-semantic-rankingsrc/main/resources/application.propertiesiçinde,azure.search.endpointyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.Azure-search-documents dahil olmak üzere bağımlılıkları çözmek için projeyi derleyin.
mvn compileDerleme tamamlandığında, çıkışta hata görünmediğini doğrulayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az login
Kodu çalıştırma
Mevcut dizin ayarlarını alın.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.GetIndexSettings"Dizini anlamsal bir yapılandırmayla güncelleştirin.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.UpdateIndexSettings"Anlamsal bir sorgu çalıştırın.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQuery"Açıklamalı alt yazılarla anlamsal bir sorgu çalıştırın.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQueryWithCaptions"Yanıtlar içeren bir anlamsal sorgu çalıştırın.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticAnswer"
Çıkış
GetIndexSettings.java çıktısı, dizinin adı, alanları ve anlamsal yapılandırmalarıdır. Yeni bir yapılandırma eklemeden önce dizinde yalnızca varsayılan yapılandırma bulunur.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic search configurations: 1
Configuration name: hotels-sample-semantic-configuration
Çıktısı, kod tarafından eklenen yapılandırma da dahil olmak üzere dizindeki tüm anlamsal yapılandırmaları listeler ve ardından bir başarı iletisi gösterir.
// Trimmed for brevity
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
SemanticQuery.java çıktısı, semantik derecelendirme yeniden sıralayıcı puanına göre sıralanmış tüm eşleşen belgeleri döndürür.
Search result #1:
Re-ranker Score: 2.61
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 result #2:
Re-ranker Score: 2.27
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 result #3:
Re-ranker Score: 1.99
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.
// Trimmed for brevity
çıktısı, arama alanlarının SemanticQueryWithCaptions.java yanına isabet vurgulama içeren bir resim yazısı öğesi ekler. Açıklamalı alt yazılar, sonuçtaki en ilgili bölümlerdir. Dizininiz daha büyük metin içeriyorsa resim yazıları en ilginç cümlelerin ayıklanmasında yardımcı olur.
Search result #1:
Re-ranker Score: 2.61
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.
Caption with 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.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.27
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.
Caption text: 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.
------------------------------------------------------------
// Trimmed for brevity
çıktısı SemanticAnswer.java , soruyla en iyi eşleşen sonuçlardan birinden alınan anlamsal bir yanıt ve ardından açıklamalı alt yazılar içeren arama sonuçlarını içerir.
Semantic answer result #1:
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.98
Search Results:
Search result #1:
Re-ranker Score: 2.12
Hotel: 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.
Search result #2:
Re-ranker Score: 2.07
Hotel: 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.
// Trimmed for brevity
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
SearchConfig.java sınıfı, öğesinden application.properties özellikleri yükler ve anahtarsız kimlik doğrulaması için bir DefaultAzureCredential oluşturur.
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SearchConfig {
private static final Properties properties =
new Properties();
static {
try (InputStream input = SearchConfig.class
.getClassLoader()
.getResourceAsStream(
"application.properties")) {
properties.load(input);
} catch (IOException e) {
throw new RuntimeException(
"Failed to load application.properties",
e);
}
}
public static final String SEARCH_ENDPOINT =
properties.getProperty(
"azure.search.endpoint");
public static final String INDEX_NAME =
properties.getProperty(
"azure.search.index.name");
public static final String SEMANTIC_CONFIG_NAME =
properties.getProperty(
"semantic.configuration.name");
public static final DefaultAzureCredential
CREDENTIAL = new DefaultAzureCredentialBuilder()
.build();
}
Önemli çıkarımlar:
-
DefaultAzureCredential, Microsoft Entra ID kullanarak anahtarsız kimlik doğrulaması sağlar.az login'dan Azure CLI kimlik bilgileri dahil olmak üzere birden çok kimlik bilgisi türünü zincirler. - Özellikler, sınıf yolu içindeki dosyadan
application.propertiesyüklenir. - Statik alanlar (
SEARCH_ENDPOINT,INDEX_NAME,SEMANTIC_CONFIG_NAME,CREDENTIAL) projedeki tüm sınıflar arasında paylaşılır.
Dizini anlamsal yapılandırmayla güncelleştirme
sınıfı, UpdateIndexSettings.java var olan hotels-sample dizine semantik bir yapılandırma ekler. Bu işlem hiçbir arama belgesini silmez ve yapılandırma eklendikten sonra dizininiz çalışır durumda kalır.
import com.azure.search.documents.indexes
.SearchIndexClientBuilder;
import com.azure.search.documents.indexes.models
.SearchIndex;
import com.azure.search.documents.indexes.models
.SemanticConfiguration;
import com.azure.search.documents.indexes.models
.SemanticField;
import com.azure.search.documents.indexes.models
.SemanticPrioritizedFields;
import com.azure.search.documents.indexes.models
.SemanticSearch;
import java.util.ArrayList;
import java.util.List;
var indexClient = new SearchIndexClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
SearchIndex existingIndex =
indexClient.getIndex(SearchConfig.INDEX_NAME);
var prioritizedFields =
new SemanticPrioritizedFields()
.setTitleField(
new SemanticField("HotelName"))
.setKeywordsFields(
List.of(new SemanticField("Tags")))
.setContentFields(
List.of(
new SemanticField("Description")));
var newSemanticConfiguration =
new SemanticConfiguration(
SearchConfig.SEMANTIC_CONFIG_NAME,
prioritizedFields);
SemanticSearch semanticSearch =
existingIndex.getSemanticSearch();
if (semanticSearch == null) {
semanticSearch = new SemanticSearch();
existingIndex.setSemanticSearch(semanticSearch);
}
List<SemanticConfiguration> configurations =
semanticSearch.getConfigurations();
if (configurations == null) {
configurations = new ArrayList<>();
semanticSearch.setConfigurations(configurations);
}
configurations.add(newSemanticConfiguration);
indexClient.createOrUpdateIndex(existingIndex);
Önemli çıkarımlar:
-
SemanticPrioritizedFieldssemantik dereceleyicinin hangi alanları değerlendirdiği tanımlar.setTitleFieldbelge başlığını ayarlar,setContentFieldsana içeriği ayarlar vesetKeywordsFieldsanahtar sözcük veya etiket alanlarını ayarlar. -
SemanticConfigurationbir adı önceliklendirilmiş alanlarla eşleştirerek sorgu zamanında hangi semantik yapılandırmanın kullanılacağını belirler. -
createOrUpdateIndexdizini yeniden oluşturmadan veya belgeleri silmeden güncelleştirilmiş şemayı arama hizmetine yönlendirir.
Dizini sorgulama
Aşağıdaki üç sınıf dizini sırasıyla sorgular ve temel bir anlamsal aramadan açıklamalı alt yazılar ve yanıtlarla anlam derecelendirmesine ilerler.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
İlk sorgu, açıklamalı alt yazı veya yanıt içermeyen anlamsal derecelendirme ekler. sınıfı, SemanticQuery.java semantik derecelendirmeyi çağırmak için en düşük gereksinimi gösterir.
import com.azure.search.documents
.SearchClientBuilder;
import com.azure.search.documents.SearchDocument;
import com.azure.search.documents.models.QueryType;
import com.azure.search.documents.models.SearchOptions;
import com.azure.search.documents.models.SearchResult;
import com.azure.search.documents.models
.SemanticSearchOptions;
import com.azure.search.documents.util
.SearchPagedIterable;
var searchClient = new SearchClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.indexName(SearchConfig.INDEX_NAME)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME))
.setSelect("HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
var document = result.getDocument(
SearchDocument.class);
double rerankerScore = result
.getSemanticSearch().getRerankerScore();
System.out.printf("Re-ranker Score: %.2f%n",
rerankerScore);
System.out.printf("HotelName: %s%n",
document.get("HotelName"));
System.out.printf("Description: %s%n%n",
document.get("Description"));
}
Önemli çıkarımlar:
-
QueryType.SEMANTICsorguda anlamsal derecelendirmeyi etkinleştirir. -
setSemanticConfigurationNamekullanılacak semantik yapılandırmayı belirtir. -
SearchPagedIterableyeniden sıralanan sonuçlar üzerinde bir yineleyici sağlar. Her birSearchResult, reranker skoru için birgetSemanticSearch()erişimci içerir.
Açıklamalı alt yazılar içeren anlamsal sorgu
Sınıf, SemanticQueryWithCaptions.java her sonuçtan en uygun bölümleri ayıklamak için başlıklar ekler ve önemli terimlere ve ifadelere vurgulama uygulanır.
import com.azure.search.documents.models
.QueryCaption;
import com.azure.search.documents.models
.QueryCaptionResult;
import com.azure.search.documents.models
.QueryCaptionType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE)
.setHighlightEnabled(true)))
.setSelect(
"HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
List<QueryCaptionResult> captions =
result.getSemanticSearch()
.getQueryCaptions();
if (captions != null && !captions.isEmpty()) {
QueryCaptionResult caption = captions.get(0);
if (caption.getHighlights() != null) {
System.out.printf(
"Caption: %s%n",
caption.getHighlights());
}
}
}
Önemli çıkarımlar:
-
QueryCaption(QueryCaptionType.EXTRACTIVE)içerik alanlarından çıkarsamalı altyazıları etkinleştirir. -
setHighlightEnabled(true)açıklamalı alt yazılarda önemli terimlerin çevresine etiketler ekler<em>. - Her
SearchResultbirgetQueryCaptions()anlam arama erişimcisini sağlar.
Yanıtlarla anlamsal sorgu
SemanticAnswer.java sınıfı anlamsal yanıtlar ekler. Bu sınıf arama metni olarak bir soru kullanır çünkü sorgu bir soru olarak ifade edildiğinde anlamsal yanıtlar en iyi sonucu verir. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar senaryonuz için yararlı değilse, kodunuzdan setQueryAnswer öğesini çıkarın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
import com.azure.search.documents.models
.QueryAnswer;
import com.azure.search.documents.models
.QueryAnswerResult;
import com.azure.search.documents.models
.QueryAnswerType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE))
.setQueryAnswer(
new QueryAnswer(
QueryAnswerType.EXTRACTIVE)))
.setSelect(
"HotelName", "Description", "Category");
SearchPagedIterable results = searchClient.search(
"What's a good hotel for people who like to read",
searchOptions, null);
List<QueryAnswerResult> semanticAnswers =
results.getSemanticResults().getQueryAnswers();
for (QueryAnswerResult answer :
semanticAnswers != null ? semanticAnswers
: List.<QueryAnswerResult>of()) {
if (answer.getHighlights() != null) {
System.out.printf(
"Semantic Answer: %s%n",
answer.getHighlights());
} else {
System.out.printf(
"Semantic Answer: %s%n",
answer.getText());
}
System.out.printf(
"Semantic Answer Score: %.2f%n",
answer.getScore());
}
Önemli çıkarımlar:
-
QueryAnswer(QueryAnswerType.EXTRACTIVE)soru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
-
results.getSemanticResults().getQueryAnswers()yanıt nesnelerini arama sonuçlarından ayrı olarak alır.
Bu hızlı başlangıçta, mevcut bir arama dizinine anlamsal sıralama eklemek ve dizini sorgulamak için JavaScript için Azure Yapay Zeka Arama istemci kitaplığını kullanacaksınız.
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır.Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesHızlı başlangıç klasörüne gidin.
cd azure-search-javascript-samples/quickstart-semantic-ranking-jssample.enviçinde,AZURE_SEARCH_ENDPOINTyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.olarak
sample.envyeniden adlandırın.env.mv sample.env .envBağımlılıkları yükleyin.
npm installYükleme tamamlandığında proje dizininde bir
node_modulesklasör görmeniz gerekir.Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az login
Kodu çalıştırma
Mevcut dizin ayarlarını alın.
node -r dotenv/config src/getIndexSettings.jsDizini anlamsal bir yapılandırmayla güncelleştirin.
node -r dotenv/config src/updateIndexSettings.jsAnlamsal bir sorgu çalıştırın.
node -r dotenv/config src/semanticQuery.jsAçıklamalı alt yazılarla anlamsal bir sorgu çalıştırın.
node -r dotenv/config src/semanticQueryReturnCaptions.jsYanıtlar içeren bir anlamsal sorgu çalıştırın.
node -r dotenv/config src/semanticAnswer.js
Çıkış
Betik getIndexSettings.js dizinin adını, alanlarını ve var olan tüm anlamsal yapılandırmaları döndürür.
Getting semantic ranking index settings...
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
Field: Description_fr, Type: Edm.String, Searchable: true
Field: Category, Type: Edm.String, Searchable: true
Field: Tags, Type: Collection(Edm.String), Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
updateIndexSettings.js betiği, kodun eklediği konfigürasyon da dahil olmak üzere dizindeki tüm anlamsal yapılandırmaları döndürür ve ardından bir başarı mesajı verir.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Script, tüm eşleşen belgeleri semantik sıralama yeniden sıralayıcı puanına göre sıralanmış olarak döndürür.
Search result #1:
Re-ranker Score: 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 result #2:
Re-ranker Score: 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 result #3:
Re-ranker Score: 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.
// Trimmed for brevity
Betik, semanticQueryReturnCaptions.js arama alanlarının yanında isabet vurgulama içeren bir resim yazısı öğesi döndürür. Açıklamalı alt yazılar, sonuçtaki en ilgili bölümlerdir. Dizininiz daha büyük metin içeriyorsa resim yazıları en ilginç cümlelerin ayıklanmasında yardımcı olur.
Search result #1:
Re-ranker Score: 2.613231658935547
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.
Caption with 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.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
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.
Caption text: 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.
------------------------------------------------------------
// Trimmed for brevity
Betik, semanticAnswer.js soruyla en iyi eşleşen sonuçlardan birinden alınan anlamsal bir yanıt döndürür ve ardından açıklamalı alt yazılar içeren arama sonuçları döndürür.
Answers:
Semantic answer result #1:
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
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
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.
// Trimmed for brevity
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
Dosya ortam config.js değişkenlerini yükler ve kimlik doğrulaması için bir DefaultAzureCredential oluşturur.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
Önemli çıkarımlar:
-
DefaultAzureCredential, Microsoft Entra ID kullanarak anahtarsız kimlik doğrulaması sağlar.az login'dan Azure CLI kimlik bilgileri dahil olmak üzere birden çok kimlik bilgisi türünü zincirler. - Ortam değişkenleri
.envkullanılarakdotenvdosyasından yüklenir.
Dizini anlamsal yapılandırmayla güncelleştirme
Dosya, updateIndexSettings.js var olan hotels-sample dizine anlamsal bir yapılandırma ekler. Bu işlem hiçbir arama belgesini silmez ve yapılandırma eklendikten sonra dizininiz çalışır durumda kalır.
import { SearchIndexClient }
from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields = {
titleField: { name: "HotelName" },
keywordsFields: [{ name: "Tags" }],
contentFields: [{ name: "Description" }]
};
const newSemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Önemli çıkarımlar:
- Anlamsal yapılandırma, semantik derecelendirme için kullanılan alanları belirtir.
titleFieldbelge başlığını tanımlar,contentFieldsana içeriği tanımlar vekeywordsFieldsanahtar sözcük veya etiket alanlarını tanımlar. - Bir yapılandırma nesnesi oluşturup varolan dizinin
semanticSearch.configurationsdizisine gönderebilirsiniz. -
createOrUpdateIndexdizini yeniden oluşturmadan veya belgeleri silmeden güncelleştirilmiş şemayı arama hizmetine yönlendirir.
Dizini sorgulama
Sorgu betikleri sırayla üç sorgu çalıştırır ve temel bir anlamsal aramadan açıklamalı alt yazılar ve yanıtlarla anlam sıralamasına ilerler.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
Aşağıdaki kod semantik derecelendirmeyi çağırmak için en düşük gereksinimi gösterir.
import { SearchClient }
from "@azure/search-documents";
import {
credential, searchEndpoint,
indexName, semanticConfigurationName
} from "./config.js";
const searchClient = new SearchClient(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Önemli çıkarımlar:
-
queryType: "semantic"sorguda anlamsal derecelendirmeyi etkinleştirir. -
semanticSearchOptions.configurationNamekullanılacak semantik yapılandırmayı belirtir. - in
rerankerScoresonuçları anlamsal ilgiyi gösterir (daha yüksek daha iyidir).
Açıklamalı alt yazılar içeren anlamsal sorgu
Aşağıdaki kod, önemli terimlerin ve ifadelerin vurgulandığı her sonuçtan en uygun bölümleri çıkarmak için başlıklar ekler.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Önemli çıkarımlar:
-
captions.captionType: "extractive"içerik alanlarından çıkarsamalı altyazıları etkinleştirir. - Açıklamalı alt yazılar en uygun bölümleri ortaya çıkararak önemli terimlerin çevresine etiketler ekler
<em>.
Yanıtlarla anlamsal sorgu
Son sorgu semantik yanıtlar ekler. Bu sorguda arama metni olarak bir soru kullanılır çünkü sorgu soru olarak ifade edildiğinde anlamsal yanıtlar en iyi sonucu verir. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar senaryonuz için yararlı değilse, kodunuzdan answers öğesini çıkarın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Önemli çıkarımlar:
-
answers.answerType: "extractive"soru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
-
results.answersyanıt nesnelerini arama sonuçlarından ayrı olarak alır.
Bu hızlı başlangıçta, Python için
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır.Python 3.10 veya üzeri.
Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-python-samplesHızlı başlangıç klasörüne gidin ve Visual Studio Code açın.
cd azure-search-python-samples/Quickstart-Semantic-Ranking code .sample.enviçinde,AZURE_SEARCH_ENDPOINTyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.olarak
sample.envyeniden adlandırın.env.mv sample.env .envAç
semantic-ranking-quickstart.ipynb.Ctrl+Shift+P tuşlarına basın, Not Defteri: Not Defteri Çekirdeği'ni seçin ve bir sanal ortam oluşturmak için istemleri izleyin. Bağımlılıklar için requirements.txt seçin.
Tamamlandığında, proje dizininde bir
.venvklasör görmeniz gerekir.Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az login
Kodu çalıştırma
Install packages and set variablesGerekli paketleri yüklemek ve ortam değişkenlerini yüklemek için hücreleri çalıştırın.Semantik yapılandırma eklemek ve dizini sorgulamak için kalan hücreleri sıralı olarak çalıştırın.
Çıkış
Get the index definition hücresinin çıktısı dizinin adı, alanları ve mevcut herhangi bir anlamsal yapılandırmadır.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: True
Field: HotelName, Type: Edm.String, Searchable: True
Field: Description, Type: Edm.String, Searchable: True
Field: Description_fr, Type: Edm.String, Searchable: True
Field: Category, Type: Edm.String, Searchable: True
Field: Tags, Type: Collection(Edm.String), Searchable: True
// Trimmed for brevity
Semantic config: hotels-sample-semantic-configuration
Title field: HotelName
Hücrenin Add a semantic configuration to the index çıktısı, eklenen kod dahil olmak üzere dizindeki tüm anlamsal yapılandırmaları ve ardından bir başarı iletisini listeler.
Semantic configurations:
----------------------------------------
Configuration: hotels-sample-semantic-configuration
Title field: HotelName
Keywords fields: Category
Content fields: Description
Configuration: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
✅ Semantic configuration successfully added!
Hücrenin Run a term query çıkışı, BM25 puanına göre sıralanmış tüm eşleşen belgeleri döndürür. Bu temel sorgu semantik derecelendirme kullanmaz.
5.360838
4
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.
4.691083
2
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.
// Trimmed for brevity
Hücrenin Run a semantic query çıkışı, semantik yeniden sıralama puanına göre sıralanmış tüm eşleşen belgeleri döndürür.
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.
2.271434783935547
2
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.
// Trimmed for brevity
Hücrenin çıktısı, arama alanlarına isabet vurgulama özelliğiyle birlikte bir başlık öğesi ekler. Açıklamalı alt yazılar, sonuçtaki en ilgili bölümlerdir. Dizininiz daha büyük metin içeriyorsa resim yazıları en ilginç cümlelerin ayıklanmasında yardımcı olur.
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.
// Trimmed for brevity
Hücrenin çıktısı Return semantic answers , soruyla en iyi eşleşen sonuçlardan birinden alınan bir anlamsal yanıt ve ardından açıklamalı alt yazılar içeren arama sonuçları içerir.
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
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
Hücre ortam Install packages and set variables değişkenlerini yükler ve kimlik doğrulaması için bir DefaultAzureCredential oluşturur.
from dotenv import load_dotenv
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
import os
load_dotenv(override=True)
search_endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
credential = DefaultAzureCredential()
index_name = os.getenv(
"AZURE_SEARCH_INDEX", "hotels-sample"
)
Önemli çıkarımlar:
-
DefaultAzureCredential, Microsoft Entra ID kullanarak anahtarsız kimlik doğrulaması sağlar.az login'dan Azure CLI kimlik bilgileri dahil olmak üzere birden çok kimlik bilgisi türünü zincirler. - Ortam değişkenleri
.envkullanılarakpython-dotenvdosyasından yüklenir.
Dizini anlamsal yapılandırmayla güncelleştirme
Hücre, Add a semantic configuration to the index var olan hotels-sample dizine semantik bir yapılandırma ekler. Bu işlem hiçbir arama belgesini silmez ve yapılandırma eklendikten sonra dizininiz çalışır durumda kalır.
from azure.search.documents.indexes.models import (
SemanticConfiguration,
SemanticField,
SemanticPrioritizedFields,
SemanticSearch
)
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")
]
)
)
if existing_index.semantic_search is None:
existing_index.semantic_search = SemanticSearch(
configurations=[new_semantic_config]
)
else:
existing_index.semantic_search.configurations.append(
new_semantic_config
)
result = index_client.create_or_update_index(existing_index)
Önemli çıkarımlar:
- Anlamsal yapılandırma, semantik derecelendirme için kullanılan alanları belirtir.
title_fieldbelge başlığını ayarlar,content_fieldsana içeriği ayarlar vekeywords_fieldsanahtar sözcük veya etiket alanlarını ayarlar. - Yapılandırmayı ilgili
SemanticConfigurationmodeliyleSemanticPrioritizedFieldsoluşturursunuz ve ardından bunu var olan dizine eklersiniz. -
create_or_update_indexdizini yeniden oluşturmadan veya belgeleri silmeden güncelleştirilmiş şemayı arama hizmetine yönlendirir.
Dizini sorgulama
Sorgu hücreleri sırayla dört sorgu çalıştırır: temel anahtar sözcük araması ve ardından işlevselliği artan üç anlamsal sıralama varyasyonu.
Terim sorgusu (temel)
Hücre, Run a term query BM25 puanlama kullanarak bir anahtar kelime araması gerçekleştirir. Bu temel sorgu semantik derecelendirme kullanmaz ve bir karşılaştırma noktası görevi görür.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
results = search_client.search(
query_type='simple',
search_text="walking distance to live music",
select='HotelId,HotelName,Description',
include_total_count=True
)
Önemli çıkarımlar:
-
query_type='simple'BM25 puanlama kullanarak bir anahtar sözcük araması belirtir. -
@search.scoresonuçlarında BM25 alaka düzeyi puanı belirtilmiştir.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
Run a semantic query Hücresi, semantik derecelendirmeyi başlatmak için en az gerekliliği gösterir.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
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'
)
Önemli çıkarımlar:
-
query_type='semantic'sorguda anlamsal derecelendirmeyi etkinleştirir. -
semantic_configuration_namekullanılacak semantik yapılandırmayı belirtir. - in
@search.reranker_scoresonuçları anlamsal ilgiyi gösterir (daha yüksek daha iyidir).
Açıklamalı alt yazılar içeren anlamsal sorgu
Hücre, Return captions her sonuçtan en uygun bölümleri ayıklamak için resim yazıları ekler ve önemli terimlere ve tümceciklere isabet vurgulama uygulanır.
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:
captions = result["@search.captions"]
if captions:
caption = captions[0]
if caption.highlights:
print(f"Caption: {caption.highlights}\n")
Önemli çıkarımlar:
-
query_caption='extractive'içerik alanlarından çıkarsamalı altyazıları etkinleştirir. - Açıklamalı alt yazılar en uygun bölümleri ortaya çıkararak önemli terimlerin çevresine etiketler ekler
<em>.
Yanıtlarla anlamsal sorgu
Hücre Return semantic answers semantik yanıtlar ekler. Bu sorguda arama metni olarak bir soru kullanılır çünkü sorgu soru olarak ifade edildiğinde anlamsal yanıtlar en iyi sonucu verir. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar senaryonuz için yararlı değilse, kodunuzdan query_answer öğesini çıkarın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
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")
Önemli çıkarımlar:
-
query_answer="extractive"soru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
-
results.get_answers()yanıt nesnelerini arama sonuçlarından ayrı olarak alır.
Bu hızlı başlangıçta, JavaScript için Azure Yapay Zeka Arama istemci kitaplığını (TypeScript ile uyumlu) kullanarak mevcut bir arama dizinine anlamsal sıralama ekleyecek ve dizini sorgulayacaksınız.
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır.Node.js 20 LTS veya daha üzeri derlenmiş kodu çalıştırmak için.
TypeScript'i JavaScript'e derlemek için TypeScript.
Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesHızlı başlangıç klasörüne gidin.
cd azure-search-javascript-samples/quickstart-semantic-ranking-tssample.enviçinde,AZURE_SEARCH_ENDPOINTyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.olarak
sample.envyeniden adlandırın.env.mv sample.env .envBağımlılıkları yükleyin.
npm installYükleme tamamlandığında proje dizininde bir
node_modulesklasör görmeniz gerekir.TypeScript dosyalarını JavaScript'e derleyin.
npm run buildMicrosoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az login
Kodu çalıştırma
Mevcut dizin ayarlarını alın.
node -r dotenv/config dist/getIndexSettings.jsDizini anlamsal bir yapılandırmayla güncelleştirin.
node -r dotenv/config dist/updateIndexSettings.jsAnlamsal bir sorgu çalıştırın.
node -r dotenv/config dist/semanticQuery.jsAçıklamalı alt yazılarla anlamsal bir sorgu çalıştırın.
node -r dotenv/config dist/semanticQueryReturnCaptions.jsYanıtlar içeren bir anlamsal sorgu çalıştırın.
node -r dotenv/config dist/semanticAnswer.jsNot
Bu komutlar klasörden derlenmiş
.jsdosyalarıdistçalıştırır. Node.js yürütmeden önce TypeScript kodunun JavaScript'e çevrilmiş olması gerekir. Bu nedenle daha önce çalıştırmıştınıznpm run build.
Çıkış
Betik getIndexSettings.js , dizin adını, alan sayısını, tür ve aranabilir durumu olan alan ayrıntılarını ve var olan tüm anlamsal yapılandırmaları döndürür.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Betik updateIndexSettings.js , eklediğiniz yapılandırma da dahil olmak üzere tüm anlamsal yapılandırmaları döndürür.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Betik semanticQuery.js reranker puanına göre sıralanmış sonuçları döndürür.
Search result #1:
Re-ranker Score: 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 result #2:
Re-ranker Score: 2.271434783935547
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza...
// Trimmed for brevity
Betik, semanticQueryReturnCaptions.js isabet vurgulamalı ayıklayıcı açıklamalı alt yazılar döndürür. Açıklamalı alt yazılar, sonuçtaki en ilgili bölümlerdir.
Search result #1:
Re-ranker Score: 2.613231658935547
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.
Caption with 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.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
HotelName: Old Century Hotel
// Trimmed for brevity
Betik, semanticAnswer.js sonuçtan alınan ve soruya en uygun olan semantik yanıtı (birebir içerik) döndürür.
Semantic answer result #1:
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
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
This classic hotel is fully-refurbished and ideally located on the
main commercial artery of the city in the heart of New York...
Caption: This classic hotel is<em> fully-refurbished </em>and
ideally located on the main commercial artery of the city...
// Trimmed for brevity
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
Dosya ortam config.ts değişkenlerini yükler, kimlik doğrulaması için bir DefaultAzureCredential oluşturur ve tür güvenliği için bir HotelDocument arabirim tanımlar.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
export interface HotelDocument {
HotelId: string;
HotelName: string;
Description: string;
Category: string;
Tags: string[];
}
Önemli çıkarımlar:
-
DefaultAzureCredential, Microsoft Entra ID kullanarak anahtarsız kimlik doğrulaması sağlar.az login'dan Azure CLI kimlik bilgileri dahil olmak üzere birden çok kimlik bilgisi türünü zincirler. -
HotelDocumentarabirimi, arama sonuçları için derleme zamanı tür denetimi sağlayarak belge alanlarına tür açısından güvenli erişim sağlar. - Ortam değişkenleri
.envkullanılarakdotenvdosyasından yüklenir.
Dizini anlamsal yapılandırmayla güncelleştirme
Dosya, updateIndexSettings.ts var olan hotels-sample dizine anlamsal bir yapılandırma ekler. Bu işlem hiçbir arama belgesini silmez ve yapılandırma eklendikten sonra dizininiz çalışır durumda kalır. TypeScript türü ek açıklamaları, yapılandırmanın beklenen şemayla eşleştiğinden emin olur.
import {
SearchIndexClient,
SemanticConfiguration,
SemanticPrioritizedFields,
SemanticField
} from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields: SemanticPrioritizedFields = {
titleField: { name: "HotelName" },
keywordsFields: [
{ name: "Tags" }
] as SemanticField[],
contentFields: [
{ name: "Description" }
] as SemanticField[]
};
const newSemanticConfiguration:
SemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Önemli çıkarımlar:
- Türleri
SemanticPrioritizedFields,SemanticConfigurationveSemanticFieldolan TypeScript türleri, yapılandırma yapısının derleme zamanı doğrulamasını sağlar. -
titleFieldbelge başlığını ayarlar,contentFieldsana içeriği ayarlar vekeywordsFieldsanahtar sözcük veya etiket alanlarını ayarlar. -
createOrUpdateIndexdizini yeniden oluşturmadan veya belgeleri silmeden güncelleştirilmiş şemayı arama hizmetine yönlendirir.
Dizini sorgulama
Sorgu betikleri sırayla üç sorgu çalıştırır ve temel bir anlamsal aramadan açıklamalı alt yazılar ve yanıtlarla anlam sıralamasına ilerler.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
semanticQuery.ts betiği, tür açısından güvenli sonuçlarla semantik sıralama yapabilmek için gerekli en düşük koşulları gösterir.
import { SearchClient }
from "@azure/search-documents";
import {
HotelDocument, credential,
searchEndpoint, indexName,
semanticConfigurationName
} from "./config.js";
const searchClient =
new SearchClient<HotelDocument>(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Önemli çıkarımlar:
-
SearchClient<HotelDocument>,selectveresult.documentile alan adlarına otomatik tamamlama sağlayarak sonuçlardaki belge alanlarına tür açısından güvenli erişim sunar. -
queryType: "semantic"sorguda anlamsal derecelendirmeyi etkinleştirir. -
semanticSearchOptions.configurationNamekullanılacak semantik yapılandırmayı belirtir.
Açıklamalı alt yazılar içeren anlamsal sorgu
Betik, semanticQueryReturnCaptions.ts her sonuçtan en uygun bölümleri ayıklar ve bunlardan oluşturulan altyazıları ekler. Önemli terimler ve tümcecikler vurgulanır.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Önemli çıkarımlar:
-
captions.captionType: "extractive"içerik alanlarından çıkarsamalı altyazıları etkinleştirir. - Açıklamalı alt yazılar en uygun bölümleri ortaya çıkararak önemli terimlerin çevresine etiketler ekler
<em>.
Yanıtlarla anlamsal sorgu
Betik semanticAnswer.ts anlamsal yanıtlar ekler. Sorgu bir soru olarak ifade edildiğinde anlamsal yanıtlar en iyi şekilde çalıştığından, arama metni olarak bir soru kullanır. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar senaryonuz için yararlı değilse, kodunuzdan answers öğesini çıkarın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Önemli çıkarımlar:
-
answers.answerType: "extractive"soru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
-
results.answersyanıt nesnelerini arama sonuçlarından ayrı olarak alır.
Bu hızlı başlangıçta Azure Yapay Zeka Arama REST API'lerini kullanarak var olan bir arama dizinine semantic ranking ekleyip dizini sorgulaacaksınız.
Anlamsal derecelendirme, arama sonuçlarını yeniden puanlama amacıyla makine okuma kavramasını kullanan sorgu tarafı işlevselliğidir ve en ilgili eşleşmeleri listenin en üstüne yükseltmeyi sağlar. Yeniden derleme gereksinimi olmadan var olan bir dizine anlamsal yapılandırma ekleyebilirsiniz. Anlamsal derecelendirme en çok bilgilendirici veya açıklayıcı metinler için etkilidir.
Ipucu
Hemen başlamak ister misiniz? GitHub source kodunu indirin.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Açıklayıcı metin alanları, ve
searchableolarak özniteliklendirilen birretrievableiçerir. Bu hızlı başlangıçta hotels-sample dizini varsayılır.Git'i kullanarak örnek depoyu kopyalayın.
Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure CLI.
Erişimi yapılandırma
Başlamadan önce, Azure Yapay Zeka Arama'daki içeriğe ve işlemlere erişim izinlerinizin olduğundan emin olun. Bu hızlı başlangıçta kimlik doğrulaması için Microsoft Entra ID ve yetkilendirme için rol tabanlı erişim kullanılır. Rolleri atamak için Sahip veya Kullanıcı Erişimi Yöneticisi olmanız gerekir. Roller uygun değilse bunun yerine anahtar tabanlı kimlik doğrulamayı kullanın.
Önerilen rol tabanlı erişimi yapılandırmak için:
Arama hizmetiniz için rol tabanlı erişimi etkinleştirin.
Kullanıcı hesabınıza aşağıdaki rolleri atayın .
Arama Hizmeti Katkıda Bulunanı
Arama Dizini Veri Okuyucusu
Not
Diğer dizin oluşturma ve yükleme hızlı başlatmalarından farklı olarak, bu hızlı başlatmamızda halihazırda veri içeren mevcut bir dizin olduğu kabul edilir, bu nedenle Arama Dizin Verisi Katkıcısı rolüne ihtiyacınız yoktur.
Uç noktayı alma
Her Azure Yapay Zeka Arama hizmetinin bir endpoint vardır. Bu, hizmeti tanımlayan ve hizmete ağ erişimi sağlayan benzersiz bir URL'dir. Sonraki bir bölümde, arama hizmetinize program aracılığıyla bağlanmak için bu uç noktayı belirtirsiniz.
Uç noktayı almak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Genel Bakış'ı seçin.
Uç noktayı not alın ve şu şekilde görünmelidir:
https://my-service.search.windows.net.
Dizinle başlayın
Bu hızlı başlangıç, var olan bir dizini anlamsal yapılandırma içerecek şekilde değiştirir. Bir Azure portalı sihirbazını kullanarak dakikalar içinde oluşturabileceğiniz hotels-sample dizinini öneririz.
Farklı bir dizin kullanmak için dizin adını, anlamsal yapılandırmadaki alan adlarını ve örnek kodun tamamında sorgu select deyimlerindeki alan adlarını değiştirin. Dizininiz, searchable ve retrievable özniteliklendirilen açıklayıcı metin alanları içermelidir.
Anlam sıralamasından önce hotels-sample dizinini gözden geçirmek ve sorgulamak için:
Azure portalında arama hizmetinize gidin.
Sol bölmeden Arama yönetimi>Dizinleri'ni seçin.
Hotels-sample seçeneğini belirleyin.
Mevcut yapılandırmaları görüntülemek için Anlamsal yapılandırmalar'ı seçin. Sihirbaz oluşturma akışı sırasında anlamsal derecelendirmeyi etkinleştirdiyseniz varsayılan bir yapılandırma olmalıdır.
Arama gezgini'ne ve ardındanJSON görünümünü> tıklayın.
Aşağıdaki JSON dosyasını sorgu düzenleyicisine yapıştırın.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Sorguyu çalıştırmak için Ara'yı seçin.
Yanıt aşağıdaki örneğe benzer olmalıdır. Bu, BM25 tarafından derecelendirilen bir tam metin sorgusudur, bu nedenle sonuçlar sorgunun genel anlamı yerine tek tek sorgu terimleriyle ve dilsel değişkenlerle eşleşmektedir. Örneğin,
walkingilewalkeşleşir veliveilemusicbağımsız olarak, tümcecik olarak değil, eşleşir."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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.555706, "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": 3.5625167, "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." }, ... // Trimmed for brevity ]Ipucu
Bu sorgu, semantik derecelendirme uygulanmadan önce yanıtın nasıl göründüğünü gösterir. Anlamsal yapılandırmayı yaptıktan sonra, sorguyu semantik derecelendirme ile farklı şekilde nasıl derecelendiğini görmek için
"queryType": "semantic"ve"semanticConfiguration": "semantic-config"ekleyin.
Ortamı ayarlama
Örnek depoyu kopyalamak için Git'i kullanın.
git clone https://github.com/Azure-Samples/azure-search-rest-samplesHızlı başlangıç klasörüne gidin ve Visual Studio Code açın.
cd azure-search-rest-samples/Quickstart-semantic-ranking code .semantic-index-update.restiçinde,@searchUrlyer tutucu değerini Uç noktayı al bölümünden aldığınız URL ile değiştirin.için
semantic-query.restönceki adımı yineleyin.Microsoft Entra ID ile anahtarsız kimlik doğrulaması için Azure hesabınızda oturum açın. Birden çok aboneliğiniz varsa, Azure Yapay Zeka Arama hizmetinizi içeren aboneliği seçin.
az loginMicrosoft Entra ID ile anahtarsız kimlik doğrulaması için bir erişim belirteci oluşturun.
az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsvHer iki dosyada da
.restiçin@personalAccessTokenyer tutucu değerini önceki adımdaki belirteçle değiştirin.
Kodu çalıştırma
Aç
semantic-index-update.rest.Bağlantınızı doğrulamak için ilk GET isteğinde İstek Gönder'i seçin.
Bir yanıt bitişik bir bölmede görünmelidir. Mevcut dizinleriniz varsa, adlarına göre listelenirler. HTTP kodu ise
200 OKdevam etmeye hazırsınız demektir.Dizine
### Update the hotels-sample index to include a semantic configurationanlamsal yapılandırma ekleme isteğini gönderin.Hata
400 Bad Requestalırsanız dizin şemanız örnekten farklıdır.### Get the schema of the indexİsteği gönderin, yanıt JSON'unu kopyalayın, kaynak koddaki bölümü JSON'a ekleyinsemanticve PUT isteği gövdesini birleştirilmiş şemanızla değiştirin.semantic-query.rest'e geçiş yapın ve istekleri sırayla gönderin: temel karşılaştırma için basit bir sorgu, ardından sıralama, altyazılar ve yanıtlar içeren anlamsal sorgular.
Çıkış
İstek, Send a search query to the hotels-sample index BM25 ilgisine göre derecelendirilen ve alanı @search.score olan sonuçları döndürür.
{
"@odata.count": 30,
"value": [
{
"@search.score": 5.004435,
"HotelId": "2",
"HotelName": "Old Century Hotel",
"Description": "The hotel is situated in a nineteenth century plaza..."
},
// Trimmed for brevity
]
}
İstek ile Send a search query to the hotels-sample index with semantic ranking, @search.rerankerScore eklenir. Sıranın basit sorgudan değiştiğine dikkat edin.
{
"@odata.count": 30,
"@search.answers": [],
"value": [
{
"@search.score": 4.555706,
"@search.rerankerScore": 2.613231658935547,
"HotelId": "24",
"HotelName": "Uptown Chic Hotel",
"Description": "Chic hotel near the city. High-rise hotel in downtown..."
},
// Trimmed for brevity
]
}
İstek, ayıklanan metin ve vurgularla birlikte Return captions in the query unsurunu @search.captions ekler.
{
"value": [
{
"@search.score": 4.555706,
"@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...",
"highlights": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops..."
}
],
"HotelId": "24",
"HotelName": "Uptown Chic Hotel"
},
// Trimmed for brevity
]
}
Sorgu bir soru olarak ifade edildiğinde, Return semantic answers in the query isteği @search.answers içinde ayıklayıcı bir yanıt döndürür.
{
"@odata.count": 46,
"@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...",
"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...",
"score": 0.9829999804496765
}
],
"value": [
{
"@search.score": 2.060124,
"@search.rerankerScore": 2.124817371368408,
"@search.captions": [
{
"text": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city...",
"highlights": "This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city..."
}
],
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel"
},
// Trimmed for brevity
]
}
Kodu anlama
Not
Bu bölümdeki kod parçacıkları okunabilirlik için değiştirilmiş olabilir. Tam bir çalışma örneği için kaynak koduna bakın.
Artık kodu çalıştırdığınıza göre, temel adımları ayıralım:
Yapılandırma ve kimlik doğrulaması
Her iki dosya da .rest tüm isteklerde yeniden kullanmak üzere en üstte değişkenleri tanımlar.
@searchUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
@personalAccessToken = PUT-YOUR-PERSONAL-ACCESS-TOKEN-HERE
@api-version = 2026-04-01
Önemli çıkarımlar:
-
@searchUrlarama hizmetinizin uç noktasıdır. -
@personalAccessToken, Azure CLI'den elde edilen bir Microsoft Entra ID belirtecidir. Bu, API anahtarlarını anahtarsız kimlik doğrulamasıyla değiştirir. -
Authorization: Bearer {{personalAccessToken}}kimlik doğrulaması için her istek üst bilgisinde bulunur.
Dizini anlamsal yapılandırmayla güncelleştirme
### Update the hotels-sample index to include a semantic configuration içindeki semantic-index-update.rest isteği, yeni bir semantic bölümüyle birlikte tam dizin şemasını gönderir. REST API herhangi bir güncelleştirme işlemi için tam şema gerektirir, bu nedenle yalnızca anlamsal yapılandırmayı gönderemezsiniz.
Temel ekleme şu bölümdür semantic :
"semantic": {
"configurations": [
{
"name": "semantic-config",
"rankingOrder":
"BoostedRerankerScore",
"prioritizedFields": {
"titleField": {
"fieldName": "HotelName"
},
"prioritizedContentFields": [
{
"fieldName": "Description"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "Tags"
}
]
}
}
]
}
Önemli çıkarımlar:
-
titleFieldsemantik değerlendirme için belge başlığını içeren alanı tanımlar. -
prioritizedContentFieldsana içerik alanlarını tanımlar. Anlam dereceleyici, ilgiyi puanlarken bunları ilk olarak değerlendirir. -
prioritizedKeywordsFieldsek bağlam için anahtar sözcük veya etiket alanlarını tanımlar. -
rankingOrder: BoostedRerankerScoreBM25 puanını anlamsal reranker puanıyla birleştirir. - REST API, PUT işlemleri için tam şema gerektirir.
semanticYalnızca bölüm yenidir; diğer tüm alanlar değiştirilmez.
Dizini sorgulama
Sorgular, basit bir anahtar kelime aramasından altyazılar ve yanıtlar içeren anlamsal sıralamaya doğru ilerler semantic-query.rest. Tüm sorgular Belgeler - Arama Gönderisi'ne (REST API) yönelik POST istekleridir.
Basit sorgu
İstek ### Send a search query to the hotels-sample index , anlamsal derecelendirme kullanmayan basit bir anahtar sözcük aramasıdır. Sonuçları semantik yeniden sıralama ile ve olmadan karşılaştırmak için bir referans noktası olarak hizmet eder.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "simple"
}
Önemli çıkarımlar:
-
queryType: "simple"varsayılan BM25 derecelendirme algoritmasını kullanır. - Sonuçlar yalnızca anahtar sözcük ilgi düzeyine (
@search.score) göre derecelenir.
Anlamsal sorgu (açıklamalı alt yazı yok, yanıt yok)
İstek ### Send a search query to the hotels-sample index with semantic ranking semantik derecelendirme ekler. Aşağıdaki JSON, semantik derecelendirmeyi çağırmak için en düşük gereksinimi gösterir.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config"
}
Önemli çıkarımlar:
-
queryType: "semantic"sorguda anlamsal derecelendirmeyi etkinleştirir. -
semanticConfigurationkullanılacak semantik yapılandırmayı belirtir.
Açıklamalı alt yazılar içeren anlamsal sorgu
İstek, ### Return captions in the query her sonuçtan en ilgili bölümleri ayıklamak için başlıklar ekler ve önemli terimlere ve tümceciklere vurgulama uygulanır.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true"
}
Önemli çıkarımlar:
-
captions: "extractive|highlight-true", önemli terimler etrafında etiketlerle çıkarımsal altyazıları etkinleştirir. - Her sonuç için
@search.captionsdizisinde altyazılar görüntülenir.
Yanıtlarla anlamsal sorgu
İstek ### Return semantic answers in the query semantik yanıtlar ekler. Sorgu bir soru olarak ifade edildiğinde anlamsal yanıtlar en iyi şekilde çalıştığından, arama metni olarak bir soru kullanır. Yanıt, bir sohbet tamamlama modelinden oluşturulmuş bir yanıt değil, dizininizden ayıklanan ayrıntılı bir metindir.
Yanıtın döndürülebilmesi için sorgunun ve dizine alınan içeriğin yakından hizalanması gerekir. Hiçbir aday güvenilirlik eşiğini karşılamıyorsa yanıt bir yanıt içermez. Bu örnekte, söz dizimini görebilmeniz için sonuç ürettiği bilinen bir soru kullanılır. Yanıtlar sizin senaryonuz için yararlı değilse, isteğinizden answers parametresini atlayın. Oluşturulan yanıtlar için RAG desenini veya etkin alma yöntemini göz önünde bulundurun.
{
"search":
"what's a good hotel for people who like to read",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true",
"answers": "extractive"
}
Önemli çıkarımlar:
-
answers: "extractive"soru benzeri sorgular için ayıklayıcı yanıtlar sağlar. - Yanıtlar, tek tek sonuçlardan ayrı olarak en üst düzey
@search.answersdizide görünür. - Yanıtlar, dizininizden ayıklanan ayrıntılı içeriklerdir, oluşturulan metin değildir.
Kaynakları temizleme
Kendi aboneliğinizde çalışırken, artık ihtiyacınız olmayan kaynakları kaldırarak bir projeyi tamamlamak iyi bir fikirdir. Çalışır durumda kalan kaynaklar size pahalıya mal olabilir.
Kaynakları bulmak ve yönetmek için Azure portalında Tüm kaynaklar veya Kaynak grupları seçin. Kaynakları tek tek silebilir veya tüm kaynakları aynı anda kaldırmak için kaynak grubunu silebilirsiniz.