REST kullanarak bilgi deposu oluşturma
Azure AI Search'te bilgi deposu, arama dışı senaryolar için kullanılan yapay zeka tarafından oluşturulan içeriğin deposudur. Bilgi depoyu dizin oluşturucu ve beceri kümesi kullanarak oluşturur ve çıkışı depolamak için Azure Depolama'yı belirtirsiniz. Bilgi deposu dolduruldıktan sonra içeriği keşfetmek için Depolama Gezgini veya Power BI gibi araçları kullanın.
Bu makalede, bir bilgi mağazasında otel konaklamalarına ilişkin bir dizi müşteri incelemesini almak, zenginleştirmek ve keşfetmek için REST API'yi kullanacaksınız. Bilgi deposu, kaynaktan çekilen özgün metin içeriğinin yanı sıra yaklaşım puanı, anahtar ifade ayıklama, dil algılama ve İngilizce olmayan müşteri yorumlarının metin çevirisini içeren yapay zeka tarafından oluşturulan içeriği içerir.
İlk veri kümesini kullanılabilir hale getirmek için, otel incelemeleri ilk olarak Azure Blob Depolama içeri aktarılır. İşlem sonrasında sonuçlar Azure Tablo Depolama'da bilgi deposu olarak kaydedilir.
İpucu
Bu makalede, her adımın ayrıntılı açıklamaları için REST kullanılır. Yalnızca komutları çalıştırmak istiyorsanız REST dosyasını indirin. Alternatif olarak, Azure portalında bir bilgi deposu da oluşturabilirsiniz.
Önkoşullar
REST istemcisi ile Visual Studio Code. Başlarken yardıma ihtiyacınız varsa bkz . Hızlı Başlangıç: REST kullanarak metin araması.
Azure AI Arama. Bir hizmet oluşturun veya var olan bir hizmeti bulun. Bu alıştırma için ücretsiz hizmeti kullanabilirsiniz.
Azure Depolama. Bir hesap oluşturun veya var olan bir hesabı bulun. Hesap türü StorageV2 (genel amaçlı V2) olmalıdır.
Bu örneklerdeki beceri kümesi zenginleştirmeler için Azure Yapay Zeka Hizmetleri'ni kullanır. İş yükü çok küçük olduğundan, Azure yapay zeka hizmetleri arka planda dokunarak günde 20 işlemeye kadar ücretsiz işlem sağlar. Küçük bir iş yükü, Azure AI çoklu hizmet kaynağı oluşturmayı veya eklemeyi atlayabileceğiniz anlamına gelir.
Azure Depolama'ya veri yükleme ve bağlantı dizesi alma
HotelReviews_Free.csv indirin. Bu CSV tek bir otel hakkında 19 müşteri geri bildirimi içerir (Kaggle.com kaynaklanır).
Azure portalında depolama hesabınızı bulun ve Storage Browser'ı kullanarak hotel-reviews adlı bir blob kapsayıcısı oluşturun.
Önceki adımda indirdiğiniz HotelReviews-Free.csv dosyasını yüklemek için sayfanın üst kısmındaki Karşıya Yükle'yi seçin.
Sol tarafta Erişim Anahtarları'nı seçin, Anahtarları Göster'i seçin ve ardından anahtar1 veya anahtar2 için bağlantı dizesi kopyalayın. Tam erişim bağlantı dizesi aşağıdaki biçime sahiptir:
"knowledgeStore": {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-ACCOUNT-NAME>;AccountKey=<YOUR-ACCOUNT-KEY>;EndpointSuffix=core.windows.net;"
}
Not
bağlantı dizesi hassas veriler sağlamak istemiyorsanız bkz. Yönetilen kimlik kullanarak bağlanma.
Anahtar ve URL kopyalama
Bu örnekte REST çağrıları, arama hizmeti uç noktasını gerektirir ve her istekte bir API anahtarı kullanır. Bu değerleri Azure portalından alabilirsiniz.
Azure portalında oturum açın, Genel Bakış sayfasına gidin ve URL'yi kopyalayın. Örnek uç nokta
https://mydemo.search.windows.net
şeklinde görünebilir.Ayarlar>Anahtarları'nın altında bir yönetici anahtarı kopyalayın. Yönetici anahtarları nesneleri eklemek, değiştirmek ve silmek için kullanılır. Değiştirilebilir iki yönetici anahtarı vardır. İkisini de kopyalayın.
Geçerli bir API anahtarı, isteği gönderen uygulama ile bunu işleyen arama hizmeti arasında istek temelinde güven oluşturur.
Dizin oluşturma
Dizin Oluştur (REST), arama hizmetinde bir arama dizini oluşturur. Arama dizini bir bilgi deposuyla ilişkili değildir, ancak dizin oluşturucu için bir tane gerekir. Arama dizini, sorgu istekleri göndererek keşfedebileceğiniz bilgi deposuyla aynı içeriği içerir.
Visual Studio Code'da yeni bir metin dosyası açın.
Değişkenleri arama uç noktasına ve daha önce topladığınız API anahtarına ayarlayın.
@baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE @blobContainer = PUT-YOUR-CONTAINER-NAME-HERE (hotel-reviews)
Dosyayı bir
.rest
dosya uzantısıyla kaydedin.Dizin isteğini oluşturmak için aşağıdaki örneği yapıştırın.
### Create a new index POST {{baseUrl}}/indexes?api-version=2024-07-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "name": "hotel-reviews-kstore-idx", "fields": [ { "name": "name", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false }, { "name": "reviews_date", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": false, "sortable": false, "facetable": false }, { "name": "reviews_rating", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false }, { "name": "reviews_text", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false }, { "name": "reviews_title", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false }, { "name": "reviews_username", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false }, { "name": "AzureSearch_DocumentKey", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false, "facetable": false, "key": true }, { "name": "language", "type": "Edm.String", "filterable": true, "sortable": false, "facetable": true }, { "name": "translated_text", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false }, { "name": "sentiment", "type": "Collection(Edm.String)", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true }, { "name": "keyphrases", "type": "Collection(Edm.String)", "filterable": true, "sortable": false, "facetable": true } ] }
İstek gönder’i seçin. Bir
HTTP/1.1 201 Created
yanıtınız olmalıdır ve yanıt gövdesi dizin şemasının JSON gösterimini içermelidir.
Veri kaynağı oluşturma
Veri Kaynağı Oluştur, Azure AI Search'te bir veri kaynağı bağlantısı oluşturur.
Veri kaynağını oluşturmak için aşağıdaki örneği yapıştırın.
### Create a data source POST {{baseUrl}}/datasources?api-version=2024-07-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "name": "hotel-reviews-kstore-ds", "description": null, "type": "azureblob", "subtype": null, "credentials": { "connectionString": "{{storageConnectionString}}" }, "container": { "name": "{{blobContainer}}", "query": null }, "dataChangeDetectionPolicy": null, "dataDeletionDetectionPolicy": null }
İstek gönder’i seçin.
Beceri kümesi oluşturma
Beceri kümesi zenginleştirmeleri (becerileri) ve bilgi deponuzu tanımlar. Beceri Kümesi Oluştur, nesneyi arama hizmetinizde oluşturur.
Beceri kümesini oluşturmak için aşağıdaki örneği yapıştırın.
### Create a skillset POST {{baseUrl}}/skillsets?api-version=2024-07-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "name": "hotel-reviews-kstore-ss", "description": "Skillset to detect language, translate text, extract key phrases, and score sentiment", "skills": [ { "@odata.type": "#Microsoft.Skills.Text.SplitSkill", "context": "/document/reviews_text", "textSplitMode": "pages", "maximumPageLength": 5000, "inputs": [ { "name": "text", "source": "/document/reviews_text" } ], "outputs": [ { "name": "textItems", "targetName": "pages" } ] }, { "@odata.type": "#Microsoft.Skills.Text.V3.SentimentSkill", "context": "/document/reviews_text/pages/*", "inputs": [ { "name": "text", "source": "/document/reviews_text/pages/*" }, { "name": "languageCode", "source": "/document/language" } ], "outputs": [ { "name": "sentiment", "targetName": "sentiment" } ] }, { "@odata.type": "#Microsoft.Skills.Text.LanguageDetectionSkill", "context": "/document", "inputs": [ { "name": "text", "source": "/document/reviews_text" } ], "outputs": [ { "name": "languageCode", "targetName": "language" } ] }, { "@odata.type": "#Microsoft.Skills.Text.TranslationSkill", "context": "/document/reviews_text/pages/*", "defaultFromLanguageCode": null, "defaultToLanguageCode": "en", "inputs": [ { "name": "text", "source": "/document/reviews_text/pages/*" } ], "outputs": [ { "name": "translatedText", "targetName": "translated_text" } ] }, { "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill", "context": "/document/reviews_text/pages/*", "inputs": [ { "name": "text", "source": "/document/reviews_text/pages/*" }, { "name": "languageCode", "source": "/document/language" } ], "outputs": [ { "name": "keyPhrases" , "targetName": "keyphrases" } ] }, { "@odata.type": "#Microsoft.Skills.Util.ShaperSkill", "context": "/document", "inputs": [ { "name": "name", "source": "/document/name" }, { "name": "reviews_date", "source": "/document/reviews_date" }, { "name": "reviews_rating", "source": "/document/reviews_rating" }, { "name": "reviews_text", "source": "/document/reviews_text" }, { "name": "reviews_title", "source": "/document/reviews_title" }, { "name": "reviews_username", "source": "/document/reviews_username" }, { "name": "AzureSearch_DocumentKey", "source": "/document/AzureSearch_DocumentKey" }, { "name": "pages", "sourceContext": "/document/reviews_text/pages/*", "inputs": [ { "name": "languageCode", "source": "/document/language" }, { "name": "translatedText", "source": "/document/reviews_text/pages/*/translated_text" }, { "name": "sentiment", "source": "/document/reviews_text/pages/*/sentiment" }, { "name": "keyPhrases", "source": "/document/reviews_text/pages/*/keyphrases/*" }, { "name": "Page", "source": "/document/reviews_text/pages/*" } ] } ], "outputs": [ { "name": "output" , "targetName": "tableprojection" } ] } ], "knowledgeStore": { "storageConnectionString": "{{storageConnectionString}}", "projections": [ { "tables": [ { "tableName": "hotelReviews1Document", "generatedKeyName": "Documentid", "source": "/document/tableprojection" }, { "tableName": "hotelReviews2Pages", "generatedKeyName": "Pagesid", "source": "/document/tableprojection/pages/*" }, { "tableName": "hotelReviews3KeyPhrases", "generatedKeyName": "KeyPhrasesid", "source": "/document/tableprojection/pages/*/keyPhrases/*" } ], "objects": [] }, { "tables": [ { "tableName": "hotelReviews4InlineProjectionDocument", "generatedKeyName": "Documentid", "sourceContext": "/document", "inputs": [ { "name": "name", "source": "/document/name"}, { "name": "reviews_date", "source": "/document/reviews_date"}, { "name": "reviews_rating", "source": "/document/reviews_rating"}, { "name": "reviews_username", "source": "/document/reviews_username"}, { "name": "reviews_title", "source": "/document/reviews_title"}, { "name": "reviews_text", "source": "/document/reviews_text"}, { "name": "AzureSearch_DocumentKey", "source": "/document/AzureSearch_DocumentKey" } ] }, { "tableName": "hotelReviews5InlineProjectionPages", "generatedKeyName": "Pagesid", "sourceContext": "/document/reviews_text/pages/*", "inputs": [ { "name": "Sentiment", "source": "/document/reviews_text/pages/*/sentiment"}, { "name": "LanguageCode", "source": "/document/language"}, { "name": "Keyphrases", "source": "/document/reviews_text/pages/*/keyphrases"}, { "name": "TranslatedText", "source": "/document/reviews_text/pages/*/translated_text"}, { "name": "Page", "source": "/document/reviews_text/pages/*" } ] }, { "tableName": "hotelReviews6InlineProjectionKeyPhrases", "generatedKeyName": "kpidv2", "sourceContext": "/document/reviews_text/pages/*/keyphrases/*", "inputs": [ { "name": "Keyphrases", "source": "/document/reviews_text/pages/*/keyphrases/*" } ] } ], "objects": [] } ] } }
Önemli noktalar:
Shaper becerisi, bilgi deposu tanımı için önemlidir. Verilerin bilgi deposunun tablolarına nasıl aktığını belirtir. Girişler, zenginleştirilmiş belgenin depolamak istediğiniz bölümleridir. Çıkış, düğümlerin tek bir yapıda birleştirilmesidir.
Projeksiyonlar bilgi deponuzun tablolarını, nesnelerini ve bloblarını belirtir. Her projeksiyon öğesi, Azure Depolama'da oluşturulacak sütun veya alanın sayısını belirtir
"name"
. ,"source"
şekillendirici çıkışının hangi bölümünün bu alana veya sütuna atandığını belirtir.
Dizin oluşturucu oluşturma
Dizin Oluşturucu Oluştur, dizin oluşturucuyu oluşturur ve çalıştırır. Dizin oluşturucu yürütmesi, belgeleri kırarak, metin ve görüntüleri ayıklayarak ve beceri kümesini başlatarak başlar. Dizin oluşturucu, oluşturduğunuz diğer nesneleri denetler: veri kaynağı, dizin ve beceri kümesi.
Dizin oluşturucuyu oluşturmak için aşağıdaki örneği yapıştırın.
### Create indexer POST {{baseUrl}}/indexers?api-version=2024-07-01 HTTP/1.1 Content-Type: application/json api-key: {{apiKey}} { "name": "hotel-reviews-kstore-idxr", "dataSourceName": "hotel-reviews-kstore-ds", "skillsetName": "hotel-reviews-kstore-ss", "targetIndexName": "hotel-reviews-kstore-idx", "parameters": { "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "delimitedText", "firstLineContainsHeaders": true, "delimitedTextDelimiter": "," } }, "fieldMappings": [ { "sourceFieldName": "AzureSearch_DocumentKey", "targetFieldName": "AzureSearch_DocumentKey", "mappingFunction": { "name": "base64Encode" } } ], "outputFieldMappings": [ { "sourceFieldName": "/document/reviews_text/pages/*/Keyphrases/*", "targetFieldName": "Keyphrases" }, { "sourceFieldName": "/document/Language", "targetFieldName": "Language" }, { "sourceFieldName": "/document/reviews_text/pages/*/Sentiment", "targetFieldName": "Sentiment" } ] }
Dizin oluşturucuyu oluşturmak ve çalıştırmak için İstek gönder'i seçin. Bu adımın tamamlanması birkaç dakika sürer.
Önemli noktalar:
parameters/configuration
nesnesi, dizin oluşturucunun verileri nasıl aldırıyor olduğunu denetler. Bu durumda, giriş verileri üst bilgi satırı ve virgülle ayrılmış değerler içeren tek bir CSV dosyasında yer alır.Alan eşlemeleri "AzureSearch_DocumentKey" oluşturur, blob dizin oluşturucu tarafından oluşturulan her belge için benzersiz bir tanımlayıcıdır (meta veri depolama yoluna göre).
Çıktı alanı eşlemeleri, zenginleştirilmiş alanların arama dizinindeki alanlarla nasıl eşleneceğini belirtir. Çıktı alanı eşlemeleri bilgi depolarında kullanılmaz (bilgi depoları fiziksel veri yapılarını ifade etmek için şekiller ve projeksiyonlar kullanır).
Durumu kontrol et
Her isteği gönderdikten sonra arama hizmeti 201 başarılı iletisiyle yanıt vermelidir.
### Get Indexer Status (wait several minutes for the indexer to complete)
GET {{baseUrl}}/indexers/hotel-reviews-kstore-idxr/status?api-version=2024-07-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
Birkaç dakika sonra, içeriği incelemek için dizini sorgulayabilirsiniz. Dizini kullanmasanız bile, bu adım beceri kümesinin beklenen çıkışı ürettiğini doğrulamanın kullanışlı bir yoludur.
### Query the index (indexer status must be "success" before querying the index)
POST {{baseUrl}}/indexes/hotel-reviews-kstore-idxr/docs/search?api-version=2024-07-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "*",
"select": "reviews_title, reviews_username, language, translated_text, sentiment",
"count": true
}
Azure portalında tabloları denetleme
Azure portalında Azure Depolama hesabınıza geçin ve yeni tabloları görüntülemek için Depolama Tarayıcısı'nı kullanın. Beceri kümesinde tanımlanan her projeksiyon için bir tane olan altı tablo görmeniz gerekir.
Her tablo, sorgulardaki tabloları çapraz bağlamak için gereken kimliklerle oluşturulur. Tabloyu açtığınızda, işlem hattı tarafından eklenen içerik alanlarını görüntülemek için bu alanları kaydırın.
Bu kılavuzda, bilgi deposu bir tabloyu şekillendirmenin ve yapılandırmanın farklı yollarını gösteren çeşitli tablolardan oluşur. Tablo 1-3 arası tablolarda, sütunları ve satırları belirlemek için bir Shaper becerisinin çıkışı kullanılır. Dörtten altıya kadar olan tablolar, yansıtmanın içine eklenmiş satır içi şekillendirme yönergelerinden oluşturulur. Aynı sonucu elde etmek için iki yaklaşımdan birini kullanabilirsiniz.
Table | Açıklama |
---|---|
hotelReviews1Document |
CSV'den ileriye doğru taşınan reviews_date ve reviews_text gibi alanları içerir. |
hotelReviews2Pages |
Beceri kümesi tarafından oluşturulan yaklaşım puanı ve çevrilmiş metin gibi zenginleştirilmiş alanlar içerir. |
hotelReviews3KeyPhrases |
Yalnızca anahtar ifadelerin uzun bir listesini içerir. |
hotelReviews4InlineProjectionDocument |
İlk tabloya alternatif olarak, projeksiyon verilerini şekillendirmek için Şekillendirici becerisi yerine satır içi şekillendirme kullanılır. |
hotelReviews5InlineProjectionPages |
Satır içi şekillendirme kullanarak ikinci tabloya alternatif olarak. |
hotelreviews6InlineProjectionKeyPhrases |
Satır içi şekillendirme kullanarak üçüncü tabloya alternatif olarak. |
Temizleme
Kendi aboneliğinizde çalışırken, projenin sonunda oluşturduğunuz kaynaklara hala ihtiyacınız olup olmadığını belirlemek iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kaynakları teker teker silebilir veya tüm kaynak grubunu silerek kaynak kümesinin tamamını kaldırabilirsiniz.
Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak kaynakları portalda bulabilir ve yönetebilirsiniz.
Sonraki adımlar
Azure yapay zeka hizmetlerini kullanarak verilerinizi zenginleştirdiğinize ve sonuçları bir bilgi deposuna yansıttığınız için, zenginleştirilmiş veri kümenizi keşfetmek için Depolama Gezgini veya diğer uygulamaları kullanabilirsiniz.