Hızlı Başlangıç: Soru-Cevap Oluşturma kitaplığını oluşturma
Kullanmaya başlayın kitaplığıyla Soru-Cevap Oluşturma seçin. Paketi yüklemek ve temel görevler için örnek kodu denemek için bu adımları izleyin.
Not
Soru ve yanıtlama özelliğinin daha yeni bir sürümü artık Dil için Azure Bilişsel Hizmet'in bir parçası olarak kullanılabilir. Daha fazla bilgi için bkz. Dil için Azure Bilişsel Hizmet Belgeleri. Dil Hizmeti'nin içindeki soru yanıtlama özellikleri için bkz. soru yanıtlama. Mevcut bilgi tabanlarını geçirme hakkında bilgi için geçiş kılavuzuna bakın.
Önkoşullar
Not
Bu belge, en son sürüm için geçerlidir. En son sürüm ile REST API kullanma hakkında bilgi edinmek için soru yanıtlama REST API hızlı başlangıç bölümüne başvurun
Geçerli kıvrınsürümü. Birkaç komut satırı anahtarı, kıvrımlı belgelerdebelirtilen hızlı başlangıçlarda kullanılır.
Anahtar ve kaynak adını kullanabilmeniz için bir soru-cevap oluşturma kaynağınızolması gerekir. Kaynak oluşturma sırasında kaynak adı girdiğinizde, anahtar sizin için oluşturulmuştur. Kaynak adı, uç noktanız için alt etki alanı olarak kullanılır. Anahtarınızı ve kaynak adınızı almak için Azure portal kaynağınız için hızlı başlangıç ' ı seçin. Kaynak adı, uç nokta URL 'sinin ilk alt etki alanıdır:
https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0
Dikkat
Aşağıdaki BASH örnekleri, \ satır devamlılık karakterini kullanır. Konsol veya Terminal farklı bir satır devamlılık karakteri kullanıyorsa, bu karakteri kullanın.
Bilgi bankası oluşturma
REST API 'Leri ve kıvrımlı bir Bilgi Bankası oluşturmak için aşağıdaki bilgilere sahip olmanız gerekir:
| Bilgi | Kıvrımlı yapılandırma | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma kaynak adı | URL | URL oluşturmak için kullanılır |
| Soru-Cevap Oluşturma kaynak anahtarı | -h``Ocp-Apim-Subscription-Keyüst bilgi için parametre |
Soru-Cevap Oluşturma Hizmeti için kimlik doğrulama |
| Bilgi bankasını açıklayan JSON | -d larına |
JSON örnekleri |
| JSON boyutunun bayt cinsinden boyutu | -h``Content-Sizeüst bilgi için parametre |
Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla, JSON değerlerinizle ve JSON boyutunda düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/create \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:107" \
-d '{ name: "QnA Maker FAQ",urls: [ "https://docs.microsoft.com/en-in/azure/cognitive-services/qnamaker/faqs"]}'
Soru-Cevap Oluşturma arasındaki kıvrımlı yanıt, operationId işlemin durumunu almakiçin gerekli olan öğesini içerir.
{
"operationState": "NotStarted",
"createdTimestamp": "2020-02-27T04:11:22Z",
"lastActionTimestamp": "2020-02-27T04:11:22Z",
"userId": "9596077b3e0441eb93d5080d6a15c64b",
"operationId": "95a4f700-9899-4c98-bda8-5449af9faef8"
}
İşlemin durumunu al
Bir Bilgi Bankası oluşturduğunuzda, işlem zaman uyumsuz olduğundan, yanıt durumu belirlemede bilgiler içerir.
| Bilgi | Kıvrımlı yapılandırma | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma kaynak adı | URL | URL oluşturmak için kullanılır |
| İşlem kimliği | URL yolu | /operations/REPLACE-WITH-YOUR-OPERATION-ID |
| Soru-Cevap Oluşturma kaynak anahtarı | -h``Ocp-Apim-Subscription-Keyüst bilgi için parametre |
Soru-Cevap Oluşturma Hizmeti için kimlik doğrulama |
Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla ve işlem KIMLIĞINIZLE düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/operations/REPLACE-WITH-YOUR-OPERATION-ID \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"
Kıvrımlı yanıtı durumu içerir. İşlem durumu başarılı olursa, resourceLocation bilgi BANKASı kimliğini de içerir.
{
"operationState": "Succeeded",
"createdTimestamp": "2020-02-27T04:54:07Z",
"lastActionTimestamp": "2020-02-27T04:54:19Z",
"resourceLocation": "/knowledgebases/fe3971b7-cfaa-41fa-8d9f-6ceb673eb865",
"userId": "f596077b3e0441eb93d5080d6a15c64b",
"operationId": "f293f218-d080-48f0-a766-47993e9b26a8"
}
Bilgi bankası yayımlama
Bilgi Bankası 'nı sorgulanmadan önce şunları yapmanız gerekir:
- Bilgi bankası yayımlama
- Çalışma zamanı uç noktası anahtarını al
Bu görev Bilgi Bankası 'nı yayımlar. Çalışma zamanı uç noktası anahtarını alma işlemi ayrı bir görevdir.
| Bilgi | Kıvrımlı yapılandırma | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma kaynak adı | URL | URL oluşturmak için kullanılır |
| Soru-Cevap Oluşturma kaynak anahtarı | -h``Ocp-Apim-Subscription-Keyüst bilgi için parametre |
Soru-Cevap Oluşturma Hizmeti için kimlik doğrulama |
| Bilgi Bankası kimliği | URL yolu | /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID |
Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla ve Bilgi Bankası KIMLIĞINIZLE düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-v \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
--data-raw ''
Yanıt durumu, sonuç olmadan 204 ' dir. -vKıvrımlı komutuna ilişkin ayrıntılı çıktıyı görmek için komut satırı parametresini kullanın. Bu, HTTP durumunu içerir.
Yayımlanan Bilgi Bankası 'nın çalışma zamanı uç noktası anahtarını al
Bilgi Bankası 'nı sorgulanmadan önce şunları yapmanız gerekir:
- Bilgi bankası yayımlama
- Çalışma zamanı uç noktası anahtarını al
Bu görev, çalışma zamanı uç noktası anahtarını alır. Bilgi bankasını yayımlamak ayrı bir görevdir.
Çalışma zamanı uç noktası anahtarı, Soru-Cevap Oluşturma kaynağını kullanan tüm bilgi tabanları için aynı anahtardır.
| Bilgi | Kıvrımlı yapılandırma | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma kaynak adı | URL | URL oluşturmak için kullanılır |
| Soru-Cevap Oluşturma kaynak anahtarı | -h``Ocp-Apim-Subscription-Keyüst bilgi için parametre |
Soru-Cevap Oluşturma Hizmeti için kimlik doğrulama |
Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/endpointkeys \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"
Kıvrımlı yanıtı, çalışma zamanı uç noktası anahtarlarını içerir. Bilgi bankasından yanıt almak için sorgulama yaparken anahtarlardan yalnızca birini kullanın.
{
"primaryEndpointKey": "93e88a14-694a-44d5-883b-184a68aa8530",
"secondaryEndpointKey": "92c98c16-ca31-4294-8626-6c57454a5063",
"installedVersion": "4.0.5",
"lastStableVersion": "4.0.6"
}
Yayımlanan bilgi bankasından yanıt sorgusu
Bilgilerden bir yanıt almak, bilgi bankasını yönetmeden ayrı bir çalışma zamanından yapılır. Ayrı bir çalışma zamanı olduğundan, bir çalışma zamanı anahtarıyla kimlik doğrulaması yapmanız gerekir.
| Bilgi | Kıvrımlı yapılandırma | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma kaynak adı | URL | URL oluşturmak için kullanılır |
| Soru-Cevap Oluşturma çalışma zamanı anahtarı | -hüst bilgi için param Authorization |
anahtar sözcüğü içeren bir dizenin bir Endpointkey parçasıdır. Hizmette Soru-Cevap Oluşturma doğrulama |
| Bilgi bankası kimliği | URL yolu | /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID |
| Sorguyu açıklayan JSON | -d param |
İstek gövdesi parametreleri ve JSON örnekleri |
| Bayt cinsinden JSON boyutu | -hüst bilgi için param Content-Size |
cURL komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınız, kaynak anahtarınız ve bilgi bankası kimliğiniz ile düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.azurewebsites.net/qnamaker/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID/generateAnswer \
-X POST \
-H "Authorization: EndpointKey REPLACE-WITH-YOUR-RUNTIME-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:159" \
-d '{"question": "How are QnA Maker and LUIS used together?","top": 6,"isTest": true, "scoreThreshold": 20, "strictFilters": [], "userId": "sd53lsY="}'
Başarılı bir yanıt, en üstteki yanıtın yanı sıra sohbet botu gibi bir istemci uygulamasının kullanıcıya yanıt görüntülemesi gereken diğer bilgileri içerir.
Bilgi bankası silme
Bilgi bankasıyla ilgili tüm bilgileri silebilirsiniz.
| Bilgi | cURL yapılandırması | Amaç |
|---|---|---|
| Soru-Cevap Oluşturma adı | URL | URL oluşturmak için kullanılır |
| Soru-Cevap Oluşturma anahtarı | -hüst bilgi için param Ocp-Apim-Subscription-Key |
Hizmette Soru-Cevap Oluşturma doğrulama |
| Bilgi bankası kimliği | URL yolu | /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID |
cURL komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınız, kaynak anahtarınız ve bilgi bankası kimliğiniz ile düzenleyin.
curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-X DELETE \
-v \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"
Yanıt durumu 204'tir ve sonuç yoktur. -vcURL komutunun ayrıntılı çıktısını görmek için komut satırı parametresini kullanın. Bu, HTTP durumunu içerir.
Ek kaynaklar
- Yazma Başvuru belgeleri
- Çalışma zamanı Başvuru belgeleri
- cURL kullanan örnek BASH betikleri
.NET için Soru-Cevap Oluşturma istemci kitaplığı 'nı kullanın:
- Bilgi Bankası oluşturma
- Bilgi Bankası güncelleştirme
- Bilgi Bankası yayımlama
- Tahmin çalışma zamanı uç noktası anahtarını al
- Uzun süre çalışan görevi bekle
- Bilgi Bankası indirin
- Bilgi Bankası 'ndan bir yanıt alın
- Bilgi Bankası silme
Başvuru belgeleri | Kitaplık kaynak kodu | Package (NuGet) | C# örnekleri
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
Not
Bu belge, en son sürüm için geçerlidir. C# API 'sini en son sürüm ile kullanma hakkında bilgi edinmek için C# hızlı başlangıç sorusununyanıtını inceleyin.
- Azure aboneliği- ücretsiz olarak bir tane oluşturun
- Visual Studio ıde veya .net Core'un geçerli sürümü.
- Azure aboneliğiniz olduktan sonra, yazma anahtarınızı ve kaynak adınızı almak için Azure portal soru-cevap oluşturma bir kaynak oluşturun. Dağıtıldıktan sonra Kaynağa Git' i seçin.
- Uygulamanızı Soru-Cevap Oluşturma API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve kaynak adına ihtiyacınız olacaktır. Anahtar ve kaynak adınızı sonraki hızlı başlangıçta aşağıdaki koda yapıştırın.
F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.
Ayarlanıyor
CLI
Konsol penceresinde (cmd, PowerShell veya Bash gibi), dotnet new adıyla yeni bir konsol uygulaması oluşturmak için komutunu kullanın qna-maker-quickstart . Bu komut, tek bir kaynak dosyası olan basit bir "Merhaba Dünya" C# projesi oluşturur: program. cs.
dotnet new console -n qna-maker-quickstart
Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin. Uygulamayı ile oluşturabilirsiniz:
dotnet build
Derleme çıktısı hiçbir uyarı veya hata içermemelidir.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Uygulama dizini içinde, aşağıdaki komutla .NET için Soru-Cevap Oluşturma istemci Kitaplığı ' nı yüklemelisiniz:
dotnet add package Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker --version 2.0.1
İpucu
Tüm hızlı başlangıç kodu dosyasını aynı anda görüntülemek mi istiyorsunuz? bu hızlı başlangıçta kod örneklerini içeren GitHubüzerinde bulabilirsiniz.
Using yönergeleri
Proje dizininden program. cs dosyasını açın ve aşağıdaki using yönergeleri ekleyin:
using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker;
using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
Abonelik anahtarı ve kaynak uç noktaları
Uygulamanın Main yönteminde, bu hızlı başlangıçtaki ortak görevleri kullanmak için aşağıdaki bölümde gösterilen değişkenleri ve kodu ekleyin.
Abonelik anahtarı ve yazma anahtarını birbirinin yerine kullanıyoruz. Yazma anahtarı hakkında daha fazla ayrıntı için soru-cevap oluşturma anahtarlarıizleyin.
QNA_MAKER_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Yazma (abonelik) anahtarını ve Soru-Cevap Oluşturma uç noktasını bulmak için kaynak yönetimi altında anahtarlar ve uç nokta sayfası ' nı seçin.

- QNA_MAKER_RUNTIME_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.azurewebsites.net. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Çalışma zamanı uç noktasını bulmak için Otomasyon altında şablonu dışarı aktar sayfasını seçin.

- Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
var authoringKey = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
var authoringURL = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
var queryingURL = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";
Nesne modelleri
Soru-cevap oluşturma iki farklı nesne modeli kullanır:
- Qnamakerclient , Bilgi Bankası oluşturmak, yönetmek, yayımlamak ve indirmek için kullanılan nesnedir.
- Qnamakerruntime , Bilgi Bankası 'Nı GENERATEANSWER API 'siyle sorgulayan ve EĞIT API 'yi ( etkin öğrenmekapsamında) kullanarak önerilen yeni soruları gönderen nesnedir.
Bu örnek Bilgi Bankası 'nı kullanma
Bu hızlı başlangıçta Bilgi Bankası, 2 konuşma QnA çiftleriyle başlar. Bu, örneğin, bu örneği basitleştirmek ve Update yönteminde kullanmak için son derece öngörülebilir kimliklere sahip olmak üzere, izleme istemlerini yeni çiftlere yönelik sorularla ilişkilendirerek yapılır. Bu, planlı ve bu hızlı başlangıç için belirli bir sırada uygulandı.
Mevcut QnA çiftlerine bağlı olan izleme istemleriyle bilgi bankasını zaman içinde geliştirmeyi planlıyorsanız şunları seçebilirsiniz:
- Daha büyük knowledgetabanlar için, otomasyonu destekleyen bir metin düzenleyicisinde veya TSV aracında Bilgi Bankası 'nı yönetin, ardından bilgi bankasını bir güncelleştirmeyle birlikte tamamen değiştirin.
- Daha küçük knowledgeesaslarını için, izleme istemlerini tamamen Soru-Cevap Oluşturma portalında yönetin.
Bu hızlı başlangıçta kullanılan QnA çiftleri hakkında ayrıntılar:
- QnA çiftinin türleri-bu Bilgi Bankası 'nda, güncelleştirmeden sonra 2 tür QnA çifti bulunur: chitchat ve etki alanına özgü bilgiler. Bu, Bilgi Bankası 'nizin sohbet botu gibi bir konuşma uygulamasına bağlı olması durumunda tipik bir uygulamadır.
- Bilgi Bankası yanıtları meta veriler tarafından filtrelenebilir veya izleme istemleri kullanılarak bu hızlı başlangıç bunu göstermez. Bu dilden bağımsız generateAnswer örneklerini burayabakın.
- Yanıt metni markındır ve görüntüler (genel kullanıma açık internet tabanlı görüntüler), bağlantılar (herkese açık kullanılabilir URL 'Ler) ve madde işaretleri gibi çok sayıda Marku içerebilir. bu hızlı başlangıç bu kadar çok kullanılmaz.
QnAMakerClient nesne modeli
Authoring Soru-Cevap Oluşturma Client, anahtarınızı içeren Microsoft. Rest. ServiceClientCredentials kullanarak Azure 'da kimlik doğrulayan bir Qnamakerclient nesnesidir.
İstemci oluşturulduktan sonra bilgi bankasını oluşturmak, yönetmek ve yayımlamak için Bilgi Bankası özelliğini kullanın.
Bir JSON nesnesi göndererek bilgi bankaınızı yönetin. Anında işlemler için bir yöntem genellikle durumu gösteren bir JSON nesnesi döndürür. Uzun süre çalışan işlemler için yanıt, işlem KIMLIĞIDIR. İstemcisini çağırın . İsteğin durumunuöğrenmek için işlem kimliği Ile Operations. GetDetailsAsync yöntemi.
QnAMakerRuntimeClient nesne modeli
Tahmin Soru-Cevap Oluşturma istemcisi, Bilgi Bankası yayımlandıktan sonra yazma istemci çağrısından döndürülen tahmin çalışma zamanı anahtarınızı içeren Microsoft. Rest. ServiceClientCredentials kullanarak Azure 'da kimlik doğrulayan bir Qnamakerruntimeclient nesnesidir client.EndpointKeys.GetKeys .
Sorgu çalışma zamanından bir yanıt almak için generateanswer metodunu kullanın.
Kod örnekleri
Bu kod parçacıkları, .NET için Soru-Cevap Oluşturma istemci kitaplığı ile aşağıdakilerin nasıl yapılacağını göstermektedir:
- Yazma istemcisinin kimliğini doğrulama
- Bilgi Bankası oluşturma
- Bilgi bankası yükleme
- Bilgi Bankası indirin
- Bilgi bankası yayımlama
- Bilgi bankasını silme
- Sorgu çalışma zamanı anahtarını al
- İşlemin durumunu al
- Sorgu çalışma zamanı istemcisinin kimliğini doğrulama
- Bilgi Bankası 'ndan bir yanıt oluşturun
Bilgi Bankası 'nı yazmak için istemcinin kimliğini doğrulama
Anahtar ile bir istemci nesnesi örneği oluşturun ve uç nokta ve anahtarınızla bir Qnamakerclient oluşturmak için uç noktayı oluşturmak üzere kaynağınızı kullanın. Bir ServiceClientCredentials nesnesi oluşturun.
var client = new QnAMakerClient(new ApiKeyServiceClientCredentials(authoringKey))
{ Endpoint = authoringURL };
Bilgi bankası oluşturma
Bilgi Bankası, üç kaynaktan alınan Createkbdto nesnesine soru ve yanıt çiftlerini depolar:
- Düzenleme içeriği için QnADTO nesnesini kullanın.
- Meta verileri ve izleme istemlerini kullanmak için düzenleme bağlamını kullanın, çünkü bu veriler tek tek QnA çifti düzeyine eklenir.
- Dosyalar Için filedto nesnesini kullanın. Fileda, dosyaya erişmek için dosya adını ve genel URL 'YI içerir.
- URL 'ler için, genel olarak kullanılabilen URL 'leri temsil eden dizelerin bir listesini kullanın.
Oluşturma adımı, Bilgi Bankası 'nın özelliklerini de içerir:
defaultAnswerUsedForExtraction-Yanıt bulunamadığında döndürülen değerenableHierarchicalExtraction-ayıklanan QnA çiftleri arasında otomatik olarak istem ilişkileri oluşturlanguage-bir kaynağın ilk Bilgi Bankası oluşturulurken Azure Search dizininde kullanılacak dili ayarlayın.
Createasync metodunu çağırın ve ardından durum yoklamak için döndürülen Işlem kimliğini Monitortoroperation metoduna geçirin.
Aşağıdaki kodun son satırı, Monitortoroperation 'dan alınan yanıtın Bilgi Bankası KIMLIĞINI döndürür.
private static async Task<string> CreateSampleKb(IQnAMakerClient client)
{
var qna1 = new QnADTO
{
Answer = "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
Questions = new List<string> { "How do I manage my knowledgebase?" },
Metadata = new List<MetadataDTO> {
new MetadataDTO { Name = "Category", Value = "api" },
new MetadataDTO { Name = "Language", Value = "REST" }
},
};
var qna2 = new QnADTO
{
Answer = "Yes, You can use our [.NET SDK](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker) with the [.NET Reference Docs](https://docs.microsoft.com/dotnet/api/microsoft.azure.cognitiveservices.knowledge.qnamaker?view=azure-dotnet) to manage your knowledge base.",
Questions = new List<string> { "Can I program with C#?" },
Metadata = new List<MetadataDTO> {
new MetadataDTO { Name = "Category", Value = "api" },
new MetadataDTO { Name = "Language", Value = ".NET" }
}
};
var file1 = new FileDTO
{
FileName = "myfile.tsv",
FileUri = "https://mydomain/myfile.tsv"
};
var createKbDto = new CreateKbDTO
{
Name = "QnA Maker .NET SDK Quickstart",
QnaList = new List<QnADTO> { qna1, qna2 },
//Files = new List<FileDTO> { file1 }
};
var createOp = await client.Knowledgebase.CreateAsync(createKbDto);
createOp = await MonitorOperation(client, createOp);
return createOp.ResourceLocation.Replace("/knowledgebases/", string.Empty);
}
MonitorOperationBir bilgi bankasını başarıyla oluşturmak için yukarıdaki koda başvuruda bulunulan işlevi eklediğinizden emin olun.
Bilgi bankası güncelleştirme
Bilgi Bankası KIMLIĞINI ve UpdateAsync metoduna Add, Updateve Delete DTO nesnelerini içeren bir updatekboperationdto ekleyerek bir bilgi bankasını güncelleştirebilirsiniz. Güncelleştirme başarılı olup olmadığını öğrenmek için Monitortoroperation yöntemini kullanın.
private static async Task UpdateKB(IQnAMakerClient client, string kbId)
{
var urls = new List<string> {
"https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
};
var updateOp = await client.Knowledgebase.UpdateAsync(kbId, new UpdateKbOperationDTO
{
// Create JSON of changes
Add = new UpdateKbOperationDTOAdd
{
QnaList = new List<QnADTO> {
new QnADTO {
Questions = new List<string> {
"bye",
"end",
"stop",
"quit",
"done"
},
Answer = "goodbye",
Metadata = new List<MetadataDTO> {
new MetadataDTO { Name = "Category", Value="Chitchat" },
new MetadataDTO { Name = "Chitchat", Value = "end" },
}
},
new QnADTO {
Questions = new List<string> {
"hello",
"hi",
"start"
},
Answer = "Hello, please select from the list of questions or enter a new question to continue.",
Metadata = new List<MetadataDTO> {
new MetadataDTO { Name = "Category", Value="Chitchat" },
new MetadataDTO { Name = "Chitchat", Value = "begin" }
},
Context = new QnADTOContext
{
IsContextOnly = false,
Prompts = new List<PromptDTO>
{
new PromptDTO
{
DisplayOrder =1,
DisplayText= "Use REST",
QnaId=1
},
new PromptDTO
{
DisplayOrder =2,
DisplayText= "Use .NET NuGet package",
QnaId=2
},
}
}
},
},
Urls = urls
},
Update = null,
Delete = null
}); ;
// Loop while operation is success
updateOp = await MonitorOperation(client, updateOp);
}
MonitorOperationBilgi bankasını başarıyla güncelleştirmek için yukarıdaki koda başvuruda bulunulan işlevi eklediğinizden emin olun.
Bilgi Bankası indirin
Veritabanını Qnadocumentsdtolistesi olarak Indirmek Için downloadasync yöntemini kullanın. bu yöntemin sonucu bir dosya olmadığından, bu, Ayarlar sayfasından Soru-Cevap Oluşturma portalının dışarı aktarma ile eşdeğer değildir .
private static async Task DownloadKb(IQnAMakerClient client, string kbId)
{
var kbData = await client.Knowledgebase.DownloadAsync(kbId, EnvironmentType.Prod);
Console.WriteLine("KB Downloaded. It has {0} QnAs.", kbData.QnaDocuments.Count);
// Do something meaningful with data
}
Bilgi bankası yayımlama
PublishAsync yöntemini kullanarak bilgi bankası yayımlama. Bu, bilgi bankası kimliği tarafından başvurulan geçerli kayıtlı ve eğitilmiş modeli alır ve bunu uç noktanıza yayımlar. Bu, bilgi tabanınızı sorgulamak için gerekli bir adımdır.
private static async Task PublishKb(IQnAMakerClient client, string kbId)
{
await client.Knowledgebase.PublishAsync(kbId);
}
Sorgu çalışma zamanı anahtarını al
Bir bilgi bankası yayımlandıktan sonra, çalışma zamanının sorgusunu yapmak için sorgu çalışma zamanı anahtarı gerekir. Bu, özgün istemci nesnesini oluşturmak için kullanılan anahtarla aynı değildir.
EndpointKeysDTO sınıfını almak için EndpointKeys yöntemini kullanın.
Bilgi tabanını sorgulamak için nesnesinde döndürülen anahtar özelliklerden birini kullanın.
private static async Task<String> GetQueryEndpointKey(IQnAMakerClient client)
{
var endpointKeysObject = await client.EndpointKeys.GetKeysAsync();
return endpointKeysObject.PrimaryEndpointKey;
}
Bilgi tabanınızı sorgulamak için bir çalışma zamanı anahtarı gereklidir.
Yanıt oluşturmak için çalışma zamanının kimliğini doğrulama
Etkin öğrenmeden yanıt oluşturmak veya eğitmek için bilgi bankasında sorgu oluşturmak için bir QnAMakerRuntimeClient oluşturun.
var runtimeClient = new QnAMakerRuntimeClient(new EndpointKeyServiceClientCredentials(primaryQueryEndpointKey))
{ RuntimeEndpoint = queryingURL };
QnAMakerRuntimeClient kullanarak:
- bilgi bankasından yanıt al
- etkin öğrenme için bilgi bankasına yeni önerilen sorular göndermek için.
Bilgi bankasından yanıt oluşturma
RuntimeClient kullanarak yayımlanmış bir bilgi bankasından yanıt oluşturma. GenerateAnswerAsync yöntemi. Bu yöntem bilgi bankası kimliğini ve QueryDTO'sunu kabul eder. Sohbet botta kullanmak üzere QueryDTO'nun Üst ve Bağlam gibi ek özelliklerine erişin.
private static async Task GenerateAnswer(IQnAMakerRuntimeClient runtimeClient, string kbId)
{
var response = await runtimeClient.Runtime.GenerateAnswerAsync(kbId, new QueryDTO { Question = "How do I manage my knowledgebase?" });
Console.WriteLine("Endpoint Response: {0}.", response.Answers[0].Answer);
// Do something meaningful with answer
}
Bu, bilgi tabanını sorgulamaya örnek olarak basit bir örnektir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerini gözden geçirebilirsiniz.
Bilgi bankasını silme
Bilgi bankası kimliğinin parametresiyle DeleteAsync yöntemini kullanarak bilgi tabanını silin.
private static async Task DeleteKB(IQnAMakerClient client, string kbId)
{
await client.Knowledgebase.DeleteAsync(kbId);
}
Bir işlem durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemi tamamlamak için beklemek yerine bir işlem döndürülecek kadar zaman alır. Özgün yöntemin durumunu belirlemek üzere yoklama yapmak için işlemden işlem kimliğini (yeniden deneme mantığıyla) kullanın.
Yeniden deneme Task.Delay mantığının benzetimini yapmak için aşağıdaki kod bloğunda ve döngüsü kullanılır. Bunların kendi yeniden deneme mantığınız ile değiştirilmesi gerekir.
private static async Task<Operation> MonitorOperation(IQnAMakerClient client, Operation operation)
{
// Loop while operation is success
for (int i = 0;
i < 20 && (operation.OperationState == OperationStateType.NotStarted || operation.OperationState == OperationStateType.Running);
i++)
{
Console.WriteLine("Waiting for operation: {0} to complete.", operation.OperationId);
await Task.Delay(5000);
operation = await client.Operations.GetDetailsAsync(operation.OperationId);
}
if (operation.OperationState != OperationStateType.Succeeded)
{
throw new Exception($"Operation {operation.OperationId} failed to completed.");
}
return operation;
}
Uygulamayı çalıştırma
Uygulama dizininizin dotnet run komutuyla uygulamayı çalıştırın.
dotnet run
Bu örneğin kaynak kodu GitHub.
Node.js için Soru-Cevap Oluşturma istemci kitaplığını kullanın:
- Bilgi Bankası oluşturma
- Bilgi Bankası güncelleştirme
- Bilgi Bankası yayımlama
- Tahmin çalışma zamanı uç noktası anahtarını al
- Uzun süre çalışan görevi bekle
- Bilgi Bankası indirin
- Bilgi Bankası 'ndan bir yanıt alın
- Bilgi bankasını Sil
Başvuru belgeleri | Kitaplık kaynak kodu | Paket (NPM) | Node.js örnekleri
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
- Azure aboneliği- ücretsiz olarak bir tane oluşturun
- Node.jsgeçerli sürümü.
- Azure aboneliğiniz olduktan sonra, yazma anahtarınızı ve kaynağını almak için Azure portal soru-cevap oluşturma bir kaynak oluşturun. Dağıtıldıktan sonra Kaynağa Git' i seçin.
- Uygulamanızı Soru-Cevap Oluşturma API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve kaynak adına ihtiyacınız olacaktır. Anahtar ve kaynak adınızı sonraki hızlı başlangıçta aşağıdaki koda yapıştırın.
F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.
Ayarlanıyor
Yeni bir Node.js uygulaması oluşturma
Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu uygulamaya gidin.
mkdir qnamaker_quickstart && cd qnamaker_quickstart
npm init -yBir dosya ile bir düğüm uygulaması oluşturmak için komutunu çalıştırın package.json .
npm init -y
İstemci kitaplığını yükler
Aşağıdaki NPM paketlerini yükler:
npm install @azure/cognitiveservices-qnamaker
npm install @azure/cognitiveservices-qnamaker-runtime
npm install @azure/ms-rest-js
Uygulamanızın package.json dosyası bağımlılıklarla güncelleştirildi.
index.js adlı bir dosya oluşturun ve aşağıdaki kitaplıkları içeri aktarın:
const msRest = require("@azure/ms-rest-js");
const qnamaker = require("@azure/cognitiveservices-qnamaker");
const qnamaker_runtime = require("@azure/cognitiveservices-qnamaker-runtime");
Kaynağınızın Azure anahtarı ve kaynak adı için bir değişken oluşturun.
Abonelik anahtarı ve yazma anahtarını birbirinin yerine kullanıyoruz. Yazma anahtarı hakkında daha fazla ayrıntı için soru-cevap oluşturma anahtarlarıizleyin.
QNA_MAKER_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Yazma (abonelik) anahtarını ve Soru-Cevap Oluşturma uç noktasını bulmak için kaynak yönetimi altında anahtarlar ve uç nokta sayfası ' nı seçin.

- QNA_MAKER_RUNTIME_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.azurewebsites.net. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Çalışma zamanı uç noktasını bulmak için Otomasyon altında şablonu dışarı aktar sayfasını seçin.

- Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
const subscription_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
const endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
const runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";
Nesne modelleri
Soru-cevap oluşturma iki farklı nesne modeli kullanır:
- Qnamakerclient , Bilgi Bankası oluşturmak, yönetmek, yayımlamak ve indirmek için kullanılan nesnedir.
- Qnamakerruntime , Bilgi Bankası 'Nı GENERATEANSWER API 'siyle sorgulayan ve EĞIT API 'yi ( etkin öğrenmekapsamında) kullanarak önerilen yeni soruları gönderen nesnedir.
QnAMakerClient nesne modeli
Authoring Soru-Cevap Oluşturma Client, anahtarınızı içeren kimlik bilgilerinizi kullanarak Azure 'da kimlik doğrulayan bir Qnamakerclient nesnesidir.
İstemci oluşturulduktan sonra bilgi bankasını oluşturmak, yönetmek ve yayımlamak için bilgibankası 'nı kullanın.
Bir JSON nesnesi göndererek bilgi bankaınızı yönetin. Anında işlemler için bir yöntem genellikle durumu gösteren bir JSON nesnesi döndürür. Uzun süre çalışan işlemler için yanıt, işlem KIMLIĞIDIR. İsteğin durumunuöğrenmek için, işlem kimliğiyle Client. Operations. GetDetails yöntemini çağırın.
QnAMakerRuntimeClient nesne modeli
Tahmin Soru-Cevap Oluşturma istemcisi, geliştirme çalışma zamanı anahtarınızı içeren Microsoft. Rest. ServiceClientCredentials kullanarak Azure 'da kimlik doğrulaması yapan ve istemci yazma istemci çağrısından döndürülen bir QnAMakerRuntimeClient nesnesidir . Bilgi Bankası yayımlandıktan sonra EndpointKeys. getKeys .
Kod örnekleri
Bu kod parçacıkları, .NET için Soru-Cevap Oluşturma istemci kitaplığı ile aşağıdakilerin nasıl yapılacağını göstermektedir:
- Yazma istemcisinin kimliğini doğrulama
- Bilgi Bankası oluşturma
- Bilgi bankası yükleme
- Bilgi Bankası indirin
- Bilgi bankası yayımlama
- Bilgi bankasını silme
- Sorgu çalışma zamanı anahtarını al
- İşlemin durumunu al
- Sorgu çalışma zamanı istemcisinin kimliğini doğrulama
- Bilgi Bankası 'ndan bir yanıt oluşturun
Bilgi Bankası 'nı yazmak için istemcinin kimliğini doğrulama
Uç noktanız ve anahtarınızla bir istemci örneği oluşturun. Anahtarınızla bir ServiceClientCredentials nesnesi oluşturun ve bunu bir Qnamakerclient nesnesi oluşturmak için uç noktanızla birlikte kullanın.
const creds = new msRest.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': subscription_key } });
const qnaMakerClient = new qnamaker.QnAMakerClient(creds, endpoint);
const knowledgeBaseClient = new qnamaker.Knowledgebase(qnaMakerClient);
Bilgi bankası oluşturma
Bilgi Bankası, üç kaynaktan alınan Createkbdto nesnesine soru ve yanıt çiftlerini depolar:
- Düzenleme içeriği için QnADTO nesnesini kullanın.
- Meta verileri ve izleme istemlerini kullanmak için düzenleme bağlamını kullanın, çünkü bu veriler tek tek QnA çifti düzeyine eklenir.
- Dosyalar Için filedto nesnesini kullanın. Fileda, dosyaya erişmek için dosya adını ve genel URL 'YI içerir.
- URL 'ler için, genel olarak kullanılabilen URL 'leri temsil eden dizelerin bir listesini kullanın.
Oluşturma adımı, Bilgi Bankası 'nın özelliklerini de içerir:
defaultAnswerUsedForExtraction-Yanıt bulunamadığında döndürülen değerenableHierarchicalExtraction-ayıklanan QnA çiftleri arasında otomatik olarak istem ilişkileri oluşturlanguage-bir kaynağın ilk Bilgi Bankası oluşturulurken Azure Search dizininde kullanılacak dili ayarlayın.
Bilgi Bankası bilgileriyle Create yöntemini çağırın. Bilgi Bankası bilgileri temelde bir JSON nesnesidir.
Create yöntemi döndüğünde, durumu yoklamak için döndürülen işlem KIMLIĞINI wait_for_operation metoduna geçirin. Wait_for_operation yöntemi işlem tamamlandığında döndürür. resourceLocationYeni bilgi BANKASı kimliğini almak için döndürülen işlemin üstbilgi değerini ayrıştırın.
const createKnowledgeBase = async (qnaClient, kbclient) => {
console.log(`Creating knowledge base...`)
const qna1 = {
answer: "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
questions: ["How do I manage my knowledgebase?"],
metadata: [
{ name: "Category", value: "api" },
{ name: "Language", value: "REST" }
]
};
const qna2 = {
answer: "Yes, You can use our JS SDK on NPM for [authoring](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker), [query runtime](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker-runtime), and [the reference docs](https://docs.microsoft.com/en-us/javascript/api/@azure/cognitiveservices-qnamaker/?view=azure-node-latest) to manage your knowledge base.",
questions: ["How do I manage my knowledgebase?"],
metadata: [
{ name: "Category", value: "api" },
{ name: "Language", value: "JavaScript" }
]
};
const create_kb_payload = {
name: 'QnA Maker JavaScript SDK Quickstart',
qnaList: [
qna1,
qna2
],
urls: [],
files: [
/*{
fileName: "myfile.md",
fileUri: "https://mydomain/myfile.md"
}*/
],
defaultAnswerUsedForExtraction: "No answer found.",
enableHierarchicalExtraction: true,
language: "English"
};
const results = await kbclient.create(create_kb_payload)
if ( ! results._response.status.toString().startsWith("2")) {
console.log(`Create request failed - HTTP status ${results._response.status}`)
return
}
const operationResult = await wait_for_operation(qnaClient, results.operationId)
if (!operationResult || !operationResult.operationState || !(operationResult.operationState = "Succeeded") || !operationResult.resourceLocation) {
console.log(`Create operation state failed - HTTP status ${operationResult._response.status}`)
return
}
// parse resourceLocation for KB ID
const kbID = operationResult.resourceLocation.replace("/knowledgebases/", "");
return kbID;
}
wait_for_operationBir bilgi bankasını başarıyla oluşturmak için yukarıdaki koda başvuruda bulunulan işlevi eklediğinizden emin olun.
Bilgi bankası güncelleştirme
Bilgi Bankası KIMLIĞI ve güncelleştirme yöntemi için Add, Updateve Delete DTO nesnelerini içeren bir updatekboperationdto ile bir Bilgi Bankası güncelleştirebilirsiniz. DTOs Ayrıca temel olarak JSON nesneleridir. Güncelleştirme başarılı olup olmadığını öğrenmek için wait_for_operation yöntemini kullanın.
const updateKnowledgeBase = async (qnaClient, kbclient, kb_id) => {
console.log(`Updating knowledge base...`)
const urls = [
"https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
]
const qna3 = {
answer: "goodbye",
questions: [
"bye",
"end",
"stop",
"quit",
"done"
],
metadata: [
{ name: "Category", value: "Chitchat" },
{ name: "Chitchat", value: "end" }
]
};
const qna4 = {
answer: "Hello, please select from the list of questions or enter a new question to continue.",
questions: [
"hello",
"hi",
"start"
],
metadata: [
{ name: "Category", value: "Chitchat" },
{ name: "Chitchat", value: "begin" }
],
context: {
isContextOnly: false,
prompts: [
{
displayOrder: 1,
displayText: "Use REST",
qna: null,
qnaId: 1
},
{
displayOrder: 2,
displayText: "Use JS NPM package",
qna: null,
qnaId: 2
},
]
}
};
console.log(JSON.stringify(qna4))
// Add new Q&A lists, URLs, and files to the KB.
const kb_add_payload = {
qnaList: [
qna3,
qna4
],
urls: urls,
files: []
};
// Bundle the add, update, and delete requests.
const update_kb_payload = {
add: kb_add_payload,
update: null,
delete: null,
defaultAnswerUsedForExtraction: "No answer found. Please rephrase your question."
};
console.log(JSON.stringify(update_kb_payload))
const results = await kbclient.update(kb_id, update_kb_payload)
if ( ! results._response.status.toString().startsWith("2")) {
console.log(`Update request failed - HTTP status ${results._response.status}`)
return false
}
const operationResult = await wait_for_operation(qnaClient, results.operationId)
if (operationResult.operationState != "Succeeded") {
console.log(`Update operation state failed - HTTP status ${operationResult._response.status}`)
return false
}
console.log(`Update operation state ${operationResult._response.status} - HTTP status ${operationResult._response.status}`)
return true
}
wait_for_operationBilgi bankasını başarıyla güncelleştirmek için yukarıdaki koda başvuruda bulunulan işlevi dahil edin.
Bilgi Bankası indirin
Veritabanını Qnadocumentsdtolistesi olarak indirmek için Download metodunu kullanın. bu yöntemin sonucu bir TSV dosyası olmadığından, bu, Ayarlar sayfasından Soru-Cevap Oluşturma portalının dışarı aktarma ile eşdeğer değildir .
const downloadKnowledgeBase = async (KBclient, kb_id) => {
console.log(`Downloading knowledge base...`)
var kbData = await KBclient.download(kb_id, "Prod");
console.log(`Knowledge base downloaded. It has ${kbData.qnaDocuments.length} QnAs.`);
// Do something meaningful with data
}
Bilgi bankası yayımlama
Yayımla yöntemini kullanarak Bilgi Bankası 'nı yayımlayın. Bu, Bilgi Bankası KIMLIĞI tarafından başvurulan geçerli kaydedilmiş ve eğitilen modeli alır ve bir uç noktada bunu yayınlar. Yayımlamanın başarılı olduğunu doğrulamak için HTTP yanıt kodunu kontrol edin.
const publishKnowledgeBase = async (kbclient, kb_id) => {
console.log(`Publishing knowledge base...`)
const results = await kbclient.publish(kb_id)
if ( ! results._response.status.toString().startsWith("2")) {
console.log(`Publish request failed - HTTP status ${results._response.status}`)
return false
}
console.log(`Publish request succeeded - HTTP status ${results._response.status}`)
return true
}
Bilgi bankasına sorgu yapma
Sorgu çalışma zamanı anahtarını al
Bir Bilgi Bankası yayımlandıktan sonra, çalışma zamanını sorgulamak için sorgu çalışma zamanı anahtarına ihtiyacınız vardır. Bu, özgün istemci nesnesini oluşturmak için kullanılan anahtar değildir.
Endpointkeysdto sınıfına ulaşmak Için Endpointkeys. GetKeys metodunu kullanın.
Bilgi Bankası 'nı sorgulamak için nesnesinde döndürülen anahtar özelliklerden birini kullanın.
const getEndpointKeys = async (qnaClient) => {
console.log(`Getting runtime endpoint keys...`)
const runtimeKeysClient = await qnaClient.endpointKeys;
const results = await runtimeKeysClient.getKeys()
if ( ! results._response.status.toString().startsWith("2")) {
console.log(`GetEndpointKeys request failed - HTTP status ${results._response.status}`)
return null
}
console.log(`GetEndpointKeys request succeeded - HTTP status ${results._response.status} - primary key ${results.primaryEndpointKey}`)
return results.primaryEndpointKey
}
Yanıt oluşturmak için çalışma zamanının kimliğini doğrulama
Bilgi Bankası 'nı sorgulamak için bir QnAMakerRuntimeClient oluşturun ve bir yanıt oluşturun ya da etkin öğreninden eğitme yapın.
const queryRuntimeCredentials = new msRest.ApiKeyCredentials({ inHeader: { 'Authorization': 'EndpointKey ' + primaryQueryRuntimeKey } });
const runtimeClient = new qnamaker_runtime.QnAMakerRuntimeClient(queryRuntimeCredentials, runtime_endpoint);
Bilgilerden bir yanıt almak veya etkin öğrenmeiçin Bilgi Bankası 'na yeni önerilen sorular göndermek Için QnAMakerRuntimeClient komutunu kullanın.
Bilgi Bankası 'ndan bir yanıt oluşturun
RuntimeClient. Runtime. generateAnswer metodunu kullanarak yayımlanmış bir bilgi tabanından yanıt oluşturun. Bu yöntem, Bilgi Bankası KIMLIĞINI ve Querydto 'ıkabul eder. Daha fazla sorgu özelliklerine erişin, örneğin sohbet bot 'ta kullanmak üzere üst ve bağlam.
const generateAnswer = async (runtimeClient, runtimeKey, kb_id) => {
console.log(`Querying knowledge base...`)
const requestQuery = await runtimeClient.runtime.generateAnswer(
kb_id,
{
question: "How do I manage my knowledgebase?",
top: 1,
strictFilters: [
{ name: "Category", value: "api" }
]
}
);
console.log(JSON.stringify(requestQuery));
}
Bu, Bilgi Bankası 'nı sorgulayan basit bir örnektir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerinigözden geçirin.
Bilgi bankasını silme
Bilgi Bankası KIMLIĞI parametresiyle Delete metodunu kullanarak Bilgi Bankası 'nı silin.
const deleteKnowledgeBase = async (KBclient, kb_id) => {
console.log(`Deleting knowledge base...`)
const results = await KBclient.deleteMethod(kb_id)
if ( ! results._response.status.toString().startsWith("2")) {
console.log(`Delete operation state failed - HTTP status ${results._response.status}`)
return false
}
console.log(`Delete operation state succeeded - HTTP status ${results._response.status}`)
return true
}
İşlemin durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemin tamamlanmasını beklemek yerine bir işlem döndürülür. Özgün yöntemin durumunu öğrenmek için işlem kimliğini yoklamaya (yeniden deneme mantığı ile) kullanın.
Aşağıdaki kod bloğundaki Delaytimer çağrısı, yeniden deneme mantığının benzetimini yapmak için kullanılır. Bunu kendi yeniden deneme mantığınızla değiştirin.
const wait_for_operation = async (qnaClient, operation_id) => {
let state = "NotStarted"
let operationResult = undefined
while ("Running" === state || "NotStarted" === state) {
operationResult = await qnaClient.operations.getDetails(operation_id)
state = operationResult.operationState;
console.log(`Operation state - ${state}`)
await delayTimer(1000);
}
return operationResult;
}
const delayTimer = async (timeInMs) => {
return await new Promise((resolve) => {
setTimeout(resolve, timeInMs);
});
}
Uygulamayı çalıştırma
Uygulamayı node index.js uygulama dizininizdeki komutla çalıştırın.
node index.js
Bu örneğin kaynak kodu GitHubbulunabilir.
Python için Soru-Cevap Oluşturma istemci kitaplığını şu şekilde kullanın:
- Bilgi Bankası oluşturma
- Bilgi Bankası güncelleştirme
- Bilgi Bankası yayımlama
- Tahmin çalışma zamanı uç noktası anahtarını al
- Uzun süre çalışan görevi bekle
- Bilgi Bankası indirin
- Bilgi Bankası 'ndan bir yanıt alın
- Bilgi bankasını Sil
Başvuru belgeleri | Kitaplık kaynak kodu | Paket (Pypı) | Python örnekleri
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
Not
Bu belge, en son sürüm için geçerlidir. Python API 'sini en son sürümle kullanma hakkında bilgi edinmek için Python hızlı başlangıç sorusunabaşvurun.
- Azure aboneliği- ücretsiz olarak bir tane oluşturun
- Python 3.x
- Azure aboneliğiniz olduktan sonra, yazma anahtarınızı ve uç noktanızı almak için Azure portal bir soru-cevap oluşturma kaynağı oluşturun. Dağıtıldıktan sonra Kaynağa Git' i seçin.
- Uygulamanızı Soru-Cevap Oluşturma API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz.
F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.
Ayarlanıyor
İstemci kitaplığını yükler
Python yükledikten sonra, ile istemci kitaplığını yükleyebilirsiniz:
pip install azure-cognitiveservices-knowledge-qnamaker==0.2.0
Yeni bir Python uygulaması oluşturma
Adlı yeni bir Python dosyası oluşturun quickstart-file.py ve aşağıdaki kitaplıkları içeri aktarın.
import os
import time
from azure.cognitiveservices.knowledge.qnamaker.authoring import QnAMakerClient
from azure.cognitiveservices.knowledge.qnamaker.runtime import QnAMakerRuntimeClient
from azure.cognitiveservices.knowledge.qnamaker.authoring.models import QnADTO, MetadataDTO, CreateKbDTO, OperationStateType, UpdateKbOperationDTO, UpdateKbOperationDTOAdd, EndpointKeysDTO, QnADTOContext, PromptDTO
from azure.cognitiveservices.knowledge.qnamaker.runtime.models import QueryDTO
from msrest.authentication import CognitiveServicesCredentials
Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun.
Abonelik anahtarı ve yazma anahtarını birbirinin yerine kullanıyoruz. Yazma anahtarı hakkında daha fazla ayrıntı için soru-cevap oluşturma anahtarlarıizleyin.
QNA_MAKER_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Yazma (abonelik) anahtarını ve Soru-Cevap Oluşturma uç noktasını bulmak için kaynak yönetimi altında anahtarlar ve uç nokta sayfası ' nı seçin.

- QNA_MAKER_RUNTIME_ENDPOINT değeri biçimindedir
https://YOUR-RESOURCE-NAME.azurewebsites.net. Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağını bulun. Çalışma zamanı uç noktasını bulmak için Otomasyon altında şablonu dışarı aktar sayfasını seçin.

- Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
subscription_key = 'PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE'
authoring_endpoint = 'PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE'
runtime_endpoint = 'PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE'
Nesne modelleri
Soru-cevap oluşturma iki farklı nesne modeli kullanır:
- Qnamakerclient , Bilgi Bankası oluşturmak, yönetmek, yayımlamak ve indirmek için kullanılan nesnedir.
- Qnamakerruntime , Bilgi Bankası 'Nı GENERATEANSWER API 'siyle sorgulayan ve EĞIT API 'yi ( etkin öğrenmekapsamında) kullanarak önerilen yeni soruları gönderen nesnedir.
Bu örnek Bilgi Bankası 'nı kullanma
Bu hızlı başlangıçta Bilgi Bankası, 2 konuşma QnA çiftleriyle başlar. Bu, örneğin, bu örneği basitleştirmek ve Update yönteminde kullanmak için son derece öngörülebilir kimliklere sahip olmak üzere, izleme istemlerini yeni çiftlere yönelik sorularla ilişkilendirerek yapılır. Bu, planlı ve bu hızlı başlangıç için belirli bir sırada uygulandı.
Mevcut QnA çiftlerine bağlı olan izleme istemleriyle bilgi bankasını zaman içinde geliştirmeyi planlıyorsanız şunları seçebilirsiniz:
- Daha büyük knowledgetabanlar için, otomasyonu destekleyen bir metin düzenleyicisinde veya TSV aracında Bilgi Bankası 'nı yönetin, ardından bilgi bankasını bir güncelleştirmeyle birlikte tamamen değiştirin.
- Daha küçük knowledgeesaslarını için, izleme istemlerini tamamen Soru-Cevap Oluşturma portalında yönetin.
Bu hızlı başlangıçta kullanılan QnA çiftleri hakkında ayrıntılar:
- QnA çiftinin türleri-bu Bilgi Bankası 'nda, güncelleştirmeden sonra 2 tür QnA çifti bulunur: chitchat ve etki alanına özgü bilgiler. Bu, Bilgi Bankası 'nizin sohbet botu gibi bir konuşma uygulamasına bağlı olması durumunda tipik bir uygulamadır.
- Bilgi Bankası yanıtları meta veriler tarafından filtrelenebilir veya izleme istemleri kullanılarak bu hızlı başlangıç bunu göstermez. Bu dilden bağımsız generateAnswer örneklerini burayabakın.
- Yanıt metni markındır ve görüntüler (genel kullanıma açık internet tabanlı görüntüler), bağlantılar (herkese açık kullanılabilir URL 'Ler) ve madde işaretleri gibi çok sayıda Marku içerebilir. bu hızlı başlangıç bu kadar çok kullanılmaz.
QnAMakerClient nesne modeli
Authoring Soru-Cevap Oluşturma Client, anahtarınızı içeren Microsoft. Rest. ServiceClientCredentials kullanarak Azure 'da kimlik doğrulayan bir Qnamakerclient nesnesidir.
İstemci oluşturulduktan sonra bilgi bankasını oluşturmak, yönetmek ve yayımlamak için Bilgi Bankası özelliğini kullanın.
Bir JSON nesnesi göndererek bilgi bankaınızı yönetin. Anında işlemler için bir yöntem genellikle durumu gösteren bir JSON nesnesi döndürür. Uzun süre çalışan işlemler için yanıt, işlem KIMLIĞIDIR. İsteğin durumunuöğrenmek IÇIN işlem kimliğiyle birlikte Operations.get_details yöntemini çağırın.
QnAMakerRuntimeClient nesne modeli
Tahmin Soru-Cevap Oluşturma istemcisi, QnAMakerRuntimeClient geliştirme çalışma zamanı anahtarınızı Içeren Microsoft. Rest. ServiceClientCredentials kullanarak Azure 'da kimlik doğrulaması yapan ve istemci yazma istemci çağrısından döndürülen bir nesnedir . Bilgi Bankası yayımlandıktan sonra EndpointKeysOperations.get_keys.
generate_answerSorgu çalışma zamanından yanıt almak için yöntemini kullanın.
Bilgi Bankası 'nı yazmak için istemcinin kimliğini doğrulama
Uç noktanız ve anahtarınızla bir istemci örneği oluşturun. Anahtarınızla bir Biliveservicescredentials nesnesi oluşturun ve bir Qnamakerclient nesnesi oluşturmak için bunu uç noktanızla birlikte kullanın.
client = QnAMakerClient(endpoint=authoring_endpoint, credentials=CognitiveServicesCredentials(subscription_key))
Bilgi bankası oluşturma
Bilgi Bankası işlemleri nesnesi almak için istemci nesnesini kullanın.
Bilgi Bankası, üç kaynaktan alınan Createkbdto nesnesine soru ve yanıt çiftlerini depolar:
- Düzenleme içeriği için QnADTO nesnesini kullanın.
- Meta verileri ve izleme istemlerini kullanmak için düzenleme bağlamını kullanın, çünkü bu veriler tek tek QnA çifti düzeyine eklenir.
- Dosyalar Için filedto nesnesini kullanın. Fileda, dosyaya erişmek için dosya adını ve genel URL 'YI içerir.
- URL 'ler için, genel olarak kullanılabilen URL 'leri temsil eden dizelerin bir listesini kullanın.
Oluştur metodunu çağırın ve ardından döndürülen işlem kimliğini durum yoklamak için Operations. GetDetails metoduna geçirin.
Aşağıdaki kodun son satırı, Monitortoroperation 'dan alınan yanıtın Bilgi Bankası KIMLIĞINI döndürür.
def create_kb(client):
print ("Creating knowledge base...")
qna1 = QnADTO(
answer="Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
questions=["How do I manage my knowledgebase?"],
metadata=[
MetadataDTO(name="Category", value="api"),
MetadataDTO(name="Language", value="REST"),
]
)
qna2 = QnADTO(
answer="Yes, You can use our [Python SDK](https://pypi.org/project/azure-cognitiveservices-knowledge-qnamaker/) with the [Python Reference Docs](https://docs.microsoft.com/python/api/azure-cognitiveservices-knowledge-qnamaker/azure.cognitiveservices.knowledge.qnamaker?view=azure-python) to manage your knowledge base.",
questions=["Can I program with Python?"],
metadata=[
MetadataDTO(name="Category", value="api"),
MetadataDTO(name="Language", value="Python"),
]
)
urls = []
files = [
FileDTO(
file_name = "structured.docx",
file_uri = "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/qna-maker/data-source-formats/structured.docx"
)]
create_kb_dto = CreateKbDTO(
name="QnA Maker Python SDK Quickstart",
qna_list=[
qna1,
qna2
],
urls=urls,
files=[],
enable_hierarchical_extraction=True,
default_answer_used_for_extraction="No answer found.",
language="English"
)
create_op = client.knowledgebase.create(create_kb_payload=create_kb_dto)
create_op_monitor = _monitor_operation(client=client, operation=create_op)
# Get knowledge base ID from resourceLocation HTTP header
knowledge_base_ID = create_op_monitor.resource_location.replace("/knowledgebases/", "")
print("Created KB with ID: {}".format(knowledge_base_ID))
return knowledge_base_ID
_monitor_operationBir bilgi bankasını başarıyla oluşturmak için yukarıdaki koda başvuruda bulunulan işlevin dahil olduğundan emin olun.
Bilgi bankası güncelleştirme
Bilgi Bankası KIMLIĞI ve güncelleştirme yöntemi için Add, Updateve Delete DTO nesnelerini içeren bir updatekboperationdto ile bir Bilgi Bankası güncelleştirebilirsiniz. Güncelleştirme başarılı olup olmadığını öğrenmek için Operation. getDetail metodunu kullanın.
def update_kb(client, kb_id):
print ("Updating knowledge base...")
qna3 = QnADTO(
answer="goodbye",
questions=[
"bye",
"end",
"stop",
"quit",
"done"
],
metadata=[
MetadataDTO(name="Category", value="Chitchat"),
MetadataDTO(name="Chitchat", value="end"),
]
)
qna4 = QnADTO(
answer="Hello, please select from the list of questions or enter a new question to continue.",
questions=[
"hello",
"hi",
"start"
],
metadata=[
MetadataDTO(name="Category", value="Chitchat"),
MetadataDTO(name="Chitchat", value="begin"),
],
context = QnADTOContext(
is_context_only = False,
prompts = [
PromptDTO(
display_order =1,
display_text= "Use REST",
qna_id=1
),
PromptDTO(
display_order =2,
display_text= "Use .NET NuGet package",
qna_id=2
),
]
)
)
urls = [
"https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
]
update_kb_operation_dto = UpdateKbOperationDTO(
add=UpdateKbOperationDTOAdd(
qna_list=[
qna3,
qna4
],
urls = urls,
files=[]
),
delete=None,
update=None
)
update_op = client.knowledgebase.update(kb_id=kb_id, update_kb=update_kb_operation_dto)
_monitor_operation(client=client, operation=update_op)
print("Updated knowledge base.")
_monitor_operationBilgi bankasını başarıyla güncelleştirmek için yukarıdaki koda başvuruda bulunulan işlevi dahil edin.
Bilgi Bankası indirin
Veritabanını Qnadocumentsdtolistesi olarak indirmek için Download metodunu kullanın. bu yöntemin sonucu bir TSV dosyası olmadığından, bu, Ayarlar sayfasından Soru-Cevap Oluşturma portalının dışarı aktarma ile eşdeğer değildir .
def download_kb(client, kb_id):
print("Downloading knowledge base...")
kb_data = client.knowledgebase.download(kb_id=kb_id, environment="Prod")
print("Downloaded knowledge base. It has {} QnAs.".format(len(kb_data.qna_documents)))
Bilgi bankası yayımlama
Yayımla yöntemini kullanarak Bilgi Bankası 'nı yayımlayın. Bu, Bilgi Bankası KIMLIĞI tarafından başvurulan geçerli kaydedilmiş ve eğitilen modeli alır ve bir uç noktada bunu yayınlar.
def publish_kb(client, kb_id):
print("Publishing knowledge base...")
client.knowledgebase.publish(kb_id=kb_id)
print("Published knowledge base.")
Bilgi bankasına sorgu yapma
Sorgu çalışma zamanı anahtarını al
Bir Bilgi Bankası yayımlandıktan sonra, çalışma zamanını sorgulamak için sorgu çalışma zamanı anahtarına ihtiyacınız vardır. Bu, özgün istemci nesnesini oluşturmak için kullanılan anahtar değildir.
Endpointkeysdto sınıfına ulaşmak için EndpointKeysOperations.get_keys yöntemini kullanın.
Bilgi Bankası 'nı sorgulamak için nesnesinde döndürülen anahtar özelliklerden birini kullanın.
def getEndpointKeys_kb(client):
print("Getting runtime endpoint keys...")
keys = client.endpoint_keys.get_keys()
print("Primary runtime endpoint key: {}.".format(keys.primary_endpoint_key))
return keys.primary_endpoint_key
Yanıt oluşturmak için çalışma zamanının kimliğini doğrulama
Bilgi Bankası 'nı sorgulamak için bir Qnamakerruntimeclient oluşturun ve bir yanıt oluşturun ya da etkin öğreninden eğitme yapın.
runtimeClient = QnAMakerRuntimeClient(runtime_endpoint=runtime_endpoint, credentials=CognitiveServicesCredentials(queryRuntimeKey))
Bilgilerden bir yanıt almak veya etkin öğrenmeiçin Bilgi Bankası 'na yeni önerilen sorular göndermek Için QnAMakerRuntimeClient komutunu kullanın.
Bilgi Bankası 'ndan bir yanıt oluşturun
QnAMakerRuntimeClient.runtime.generate_answer yöntemi kullanarak yayımlanmış bir bilgi bankasında yanıt oluşturun. Bu yöntem, Bilgi Bankası KIMLIĞINI ve Querydto 'ıkabul eder. Daha fazla sorgu özelliklerine erişin, örneğin sohbet bot 'ta kullanmak üzere üst ve bağlam.
def generate_answer(client, kb_id, runtimeKey):
print ("Querying knowledge base...")
authHeaderValue = "EndpointKey " + runtimeKey
listSearchResults = client.runtime.generate_answer(kb_id, QueryDTO(question = "How do I manage my knowledgebase?"), dict(Authorization=authHeaderValue))
for i in listSearchResults.answers:
print(f"Answer ID: {i.id}.")
print(f"Answer: {i.answer}.")
print(f"Answer score: {i.score}.")
Bu, bilgi bankasını sorgulamaya yönelik basit bir örnektir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerinigözden geçirin.
Bilgi bankasını silme
Bilgi Bankası KIMLIĞI parametresiyle Delete metodunu kullanarak Bilgi Bankası 'nı silin.
def delete_kb(client, kb_id):
print("Deleting knowledge base...")
client.knowledgebase.delete(kb_id=kb_id)
print("Deleted knowledge base.")
İşlemin durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemin tamamlanmasını beklemek yerine bir işlem döndürülür. Özgün yöntemin durumunu öğrenmek için işlem KIMLIĞINI yoklamaya (yeniden deneme mantığı ile) kullanın.
Aşağıdaki kod bloğundaki setTimeout çağrısı, zaman uyumsuz kodun benzetimini yapmak için kullanılır. Bunu yeniden deneme mantığı ile değiştirin.
def _monitor_operation(client, operation):
for i in range(20):
if operation.operation_state in [OperationStateType.not_started, OperationStateType.running]:
print("Waiting for operation: {} to complete.".format(operation.operation_id))
time.sleep(5)
operation = client.operations.get_details(operation_id=operation.operation_id)
else:
break
if operation.operation_state != OperationStateType.succeeded:
raise Exception("Operation {} failed to complete.".format(operation.operation_id))
return operation
Uygulamayı çalıştırma
Hızlı başlangıç dosyanız üzerinde python komutuyla uygulamayı çalıştırın.
python quickstart-file.py
Bu örneğin kaynak kodu GitHub.
Java için Soru-Cevap Oluşturma kitaplığını kullanarak şunları yapmak için:
- Bilgi bankası oluşturma
- Bilgi bankası güncelleştirme
- Bilgi bankası yayımlama
- Tahmin çalışma zamanı uç nokta anahtarını al
- Uzun süre çalışan görevi bekleme
- Bilgi bankası indirme
- Bilgi bankasından yanıt al
- Bilgi bankası silme
Kitaplık kaynak kodu | Paket | Örnekler
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
- Azure aboneliği - Ücretsiz bir abonelik oluşturun
- JDK
- Azure aboneliğinize sahip olduktan sonra yazma anahtarınızı ve Soru-Cevap Oluşturma almak Azure portal kaynak oluşturun. Dağıtımdan sonra Kaynağa git'i seçin.
- Uygulamanıza api'sini bağlamak için, oluşturmakta olduğu kaynakta yer alan anahtara ve uç Soru-Cevap Oluşturma gerekir. Anahtarınızı ve uç noktanızı hızlı başlangıçta daha sonra aşağıdaki koda yapıştırın.
- Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını (
F0) kullanabilirsiniz.
Ayarlama
İstemci kitaplıklarını yükleme
Java'yi yükledikten sonra MVN Deposundan Maven kullanarak istemci kitaplıklarını yükleyebilirsiniz.
Yeni bir Java uygulaması oluşturma
adlı yeni bir dosya oluşturun quickstart.java ve aşağıdaki kitaplıkları içeri aktarın.
/* Download the following files.
* - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar
* - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.pom
* Move the downloaded .jar file to a folder named "lib" directly under the current folder.
* Rename the downloaded file to pom.xml.
* At the command line, run
* mvn dependency:copy-dependencies
* This will download the .jar files depended on by azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar to the folder "target/dependency" under the current folder. Move these .jar files to the "lib" folder as well.
*/
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.*;
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.models.*;
import java.io.*;
import java.lang.Object.*;
import java.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
import java.util.*;
import java.net.*;
Kaynağınıza azure uç noktası ve anahtarı için değişkenler oluşturun.
Abonelik anahtarını ve yazma anahtarını birbirinin yerine kullanırsınız. Anahtar yazma hakkında daha fazla bilgi için, Soru-Cevap Oluşturma.
Dosyanın QNA_MAKER_ENDPOINT
https://YOUR-RESOURCE-NAME.cognitiveservices.azure.combiçimindedir. Azure portal'a gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağı bulun. Kaynak yönetimi altında Anahtarlar ve Uç Nokta sayfasını seçerek Yazma (Abonelik) anahtarını bulun ve Uç Soru-Cevap Oluşturma seçin.

- Dosyanın QNA_MAKER_RUNTIME_ENDPOINT
https://YOUR-RESOURCE-NAME.azurewebsites.netbiçimindedir. Azure portal'a gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynağı bulun. Çalışma Zamanı Uç Noktasını bulmak için Otomasyon altında Şablonu Dışarı Aktar sayfasını seçin.

- Üretim için kimlik bilgilerinizi depolamak ve bu kimlik bilgilerine erişmek için güvenli bir yol kullanmayı göz önünde bulundurarak. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
private static String authoring_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
private static String authoring_endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
private static String runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";
Nesne modelleri
Soru-Cevap Oluşturma farklı nesne modeli kullanır:
- QnAMakerClient, bilgi bankası oluşturmak, yönetmek, yayımlamak ve indirmek için nesnedir.
- QnAMakerRuntime, GenerateAnswer API'si ile bilgi bankası sorgulama ve Eğitim API'sini kullanarak yeni önerilen sorular gönderme nesnesidir (etkin öğrenmenin bir parçası olarak).
Bu örnek Bilgi Bankası 'nı kullanma
Bu hızlı başlangıçta Bilgi Bankası, 2 konuşma QnA çiftleriyle başlar. Bu, örneğin, bu örneği basitleştirmek ve Update yönteminde kullanmak için son derece öngörülebilir kimliklere sahip olmak üzere, izleme istemlerini yeni çiftlere yönelik sorularla ilişkilendirerek yapılır. Bu, planlı ve bu hızlı başlangıç için belirli bir sırada uygulandı.
Mevcut QnA çiftlerine bağlı olan izleme istemleriyle bilgi bankasını zaman içinde geliştirmeyi planlıyorsanız şunları seçebilirsiniz:
- Daha büyük knowledgetabanlar için, otomasyonu destekleyen bir metin düzenleyicisinde veya TSV aracında Bilgi Bankası 'nı yönetin, ardından bilgi bankasını bir güncelleştirmeyle birlikte tamamen değiştirin.
- Daha küçük knowledgeesaslarını için, izleme istemlerini tamamen Soru-Cevap Oluşturma portalında yönetin.
Bu hızlı başlangıçta kullanılan QnA çiftleri hakkında ayrıntılar:
- QnA çiftinin türleri-bu Bilgi Bankası 'nda, güncelleştirmeden sonra 2 tür QnA çifti bulunur: chitchat ve etki alanına özgü bilgiler. Bu, Bilgi Bankası 'nizin sohbet botu gibi bir konuşma uygulamasına bağlı olması durumunda tipik bir uygulamadır.
- Bilgi Bankası yanıtları meta veriler tarafından filtrelenebilir veya izleme istemleri kullanılarak bu hızlı başlangıç bunu göstermez. Bu dilden bağımsız generateAnswer örneklerini burayabakın.
- Yanıt metni markındır ve görüntüler (genel kullanıma açık internet tabanlı görüntüler), bağlantılar (herkese açık kullanılabilir URL 'Ler) ve madde işaretleri gibi çok sayıda Marku içerebilir. bu hızlı başlangıç bu kadar çok kullanılmaz.
QnAMakerClient nesne modeli
yazma Soru-Cevap Oluşturma, anahtarınızı içeren MsRest::ServiceClientCredentials kullanarak Azure'da kimlik doğrulaması yapan bir QnAMakerClient nesnesidir.
İstemci oluşturulduktan sonra, bilgi tabanınızı oluşturmak, yönetmek ve yayımlamak için istemcinin Knowledgebases özelliğinin yöntemlerini kullanın.
Hemen yapılan işlemler için yöntem genellikle sonucu (varsa) döndürür. Uzun süre çalışan işlemler için yanıt bir Operation nesnesidir. İsteğin durumunu belirlemek için değeriyle getDetails operation.operationId yöntemini çağırma.
QnAMakerRuntimeClient nesne modeli
İstemcinin Soru-Cevap Oluşturma çalışma zamanı bir QnAMakerRuntimeClient nesnesidir.
Bilgi bankasınızı yazma istemcisini kullanarak yayımladikten sonra, bilgi bankasından yanıt almak için çalışma zamanı istemcisinin generateAnswer yöntemini kullanın.
QnAMakerRuntimeManager.authenticate çağırarak ve bir çalışma zamanı uç noktası anahtarı geçerek bir çalışma zamanı istemcisi oluşturun. Çalışma zamanı uç nokta anahtarını almak için getKeysçağrısı yapmak üzere yazma istemcisini kullanın.
Bilgi bankası yazma için istemcinin kimliğini doğrulama
Yazma uç noktanız ve abonelik anahtarınız ile bir istemci örneği.
/* Note QnAMakerManager.authenticate() does not set the baseUrl paramater value
* as the value for QnAMakerClient.endpoint, so we still need to call withEndpoint().
*/
QnAMakerClient authoring_client = QnAMakerManager.authenticate(authoring_key).withEndpoint(authoring_endpoint);
Knowledgebases kb_client = authoring_client.knowledgebases();
Operations ops_client = authoring_client.operations();
EndpointKeys keys_client = authoring_client.endpointKeys();
Bilgi bankası oluşturma
Bilgi bankası, üç farklı kaynakta bulunan CreateKbDTO nesnesi için soru ve yanıt çiftlerini depolar:
- Editoryal içerik için QnADTO nesnesini kullanın.
- Meta verileri ve takip istemlerini kullanmak için editoryal bağlamı kullanın çünkü bu veriler tek bir Soru-Cevap çifti düzeyinde eklenir.
- Dosyalar için FileDTO nesnesini kullanın. FileDTO, dosyaya ulaşmak için dosya adını ve genel URL'yi içerir.
- URL'ler için, genel kullanıma açık URL'leri temsil eden bir dize listesi kullanın.
Durumu yoklaması için create yöntemini çağırarak döndürülen işlem operationId özelliğini getDetails yöntemine iletir.
Aşağıdaki kodun son satırı bilgi bankası kimliğini döndürür.
public String create_kb () throws Exception {
System.out.println("Creating KB...");
String name = "QnA Maker FAQ from quickstart";
var metadata = new MetadataDTO()
.withName ("Category")
.withValue ("api");
List<MetadataDTO> metadata_list = Arrays.asList(new MetadataDTO[]{ metadata });
var qna = new QnADTO()
.withAnswer ("You can use our REST APIs to manage your knowledge base.")
.withQuestions ( Arrays.asList(new String[]{ "How do I manage my knowledgebase?" }))
.withMetadata (metadata_list);
List<QnADTO> qna_list = Arrays.asList(new QnADTO[]{ qna });
var urls = Arrays.asList(new String[]{ "https://docs.microsoft.com/en-in/azure/cognitive-services/qnamaker/faqs" });
var payload = new CreateKbDTO().withName(name).withQnaList(qna_list).withUrls(urls);
var result = kb_client.create(payload);
var kb_id = wait_for_operation(result);
System.out.println("Created KB with ID: " + kb_id + ".\n");
return kb_id;
}
Bilgi bankası güncelleştirme
Update'i çağırarak ve bilgi bankası kimliğini ve UpdateKbOperationDTO nesnesini geçerek bir bilgi bankası güncelleştirebilirsiniz. Bu nesne de şunları içerebilir:
Durum operationId yoklaması için döndürülen işlemi özelliğini getDetails yöntemine iletir.
public void update_kb (String kb_id) throws Exception {
System.out.println("Updating KB...");
var update = new UpdateKbOperationDTOUpdate().withName ("New KB name");
var payload = new UpdateKbOperationDTO().withUpdate((UpdateKbOperationDTOUpdate)update);
var result = kb_client.update(kb_id, payload);
wait_for_operation(result);
System.out.println("Updated KB.");
}
Bilgi bankası indirme
Veritabanını QnADocumentsDTOlistesi olarak indirmek için indirme yöntemini kullanın. Bu yöntem bir TSV dosyası Soru-Cevap Oluşturma bu yöntemin Ayarlar portaldan dışarı aktarma ile eşdeğer değildir.
public void download_kb(String kb_id) {
System.out.println("Downloading KB...");
var kb_data = kb_client.download(kb_id, EnvironmentType.PROD);
System.out.println("KB Downloaded. It has " + kb_data.qnaDocuments().size() + " question/answer sets.");
System.out.println("Downloaded KB.\n");
}
Bilgi bankası yayımlama
Yayımlama yöntemini kullanarak bilgi bankası yayımlama. Bu, bilgi bankası kimliği tarafından başvurulan geçerli kayıtlı ve eğitilmiş modeli alır ve bunu bir uç noktada yayımlar.
public void publish_kb(String kb_id) {
System.out.println("Publishing KB...");
kb_client.publish(kb_id);
System.out.println("KB published.\n");
}
Bilgi bankasından yanıt oluşturma
Bir bilgi bankası yayımlandıktan sonra, bilgi bankası sorgulamak için çalışma zamanı uç nokta anahtarı gerekir. Bu, yazma istemcisini oluşturmak için kullanılan abonelik anahtarıyla aynı değildir.
EndpointKeysDTO nesnesi almak için getKeys yöntemini kullanın.
QnAMakerRuntimeManager.authenticate çağırarak ve EndpointKeysDTO nesnesinden bir çalışma zamanı uç noktası anahtarı geçerek bir çalışma zamanı istemcisi oluşturun.
generateAnswer yöntemini kullanarak yayımlanmış bir bilgi bankasından yanıt oluşturma. Bu yöntem bilgi bankası kimliğini ve QueryDTO nesnesini kabul eder.
public void query_kb(String kb_id) {
System.out.println("Sending query to KB...");
var runtime_key = keys_client.getKeys().primaryEndpointKey();
QnAMakerRuntimeClient runtime_client = QnAMakerRuntimeManager.authenticate(runtime_key).withRuntimeEndpoint(runtime_endpoint);
var query = (new QueryDTO()).withQuestion("How do I manage my knowledgebase?");
var result = runtime_client.runtimes().generateAnswer(kb_id, query);
System.out.println("Answers:");
for (var answer : result.answers()) {
System.out.println(answer.answer().toString());
};
System.out.println();
}
Bu, bilgi bankası sorgulamaya basit bir örnektir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerini gözden geçirebilirsiniz.
Bilgi bankasını silme
Bilgi bankası kimliğinin parametresiyle delete yöntemini kullanarak bilgi bankasını silin.
public void delete_kb(String kb_id) {
System.out.println("Deleting KB...");
kb_client.delete(kb_id);
System.out.println("KB deleted.\n");
}
Bir işlem durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemi tamamlamak için beklemek yerine bir işlem döndürülecek kadar zaman alır. Özgün yöntemin durumunu belirlemek için yoklama (yeniden deneme mantığıyla) için işlemden işlem kimliğini kullanın.
public String wait_for_operation(Operation op) throws Exception {
System.out.println ("Waiting for operation to finish...");
Boolean waiting = true;
String result = "";
while (true == waiting) {
var op_ = ops_client.getDetails(op.operationId());
var state = op_.operationState();
if (OperationStateType.FAILED == state) {
throw new Exception("Operation failed.");
}
if (OperationStateType.SUCCEEDED == state) {
waiting = false;
// Remove "/knowledgebases/" from the resource location.
result = op_.resourceLocation().replace("/knowledgebases/", "");
}
if (true == waiting) {
System.out.println("Waiting 10 seconds for operation to complete...");
Thread.sleep(10000);
}
}
return result;
}
Uygulamayı çalıştırma
Uygulamanın ana yöntemi aşağıdaki şekildedir.
public static void main(String[] args) {
try {
Quickstart quickstart = new Quickstart();
String kb_id = quickstart.create_kb();
// quickstart.list_kbs();
quickstart.update_kb(kb_id);
quickstart.publish_kb(kb_id);
quickstart.download_kb(kb_id);
quickstart.query_kb(kb_id);
quickstart.delete_kb(kb_id);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
Uygulamayı aşağıdaki gibi çalıştırın. Bu, sınıf adının olduğunu ve bağımlılıkların geçerli klasörün Quickstart altında adlı bir alt klasörde olduğunu lib varsayıyor.
javac Quickstart.java -cp .;lib\*
java -cp .;lib\* Quickstart
Bu örneğin kaynak kodu GitHub.
Git için Soru-Cevap Oluşturma istemci kitaplığını kullanın:
- Bilgi Bankası oluşturma
- Bilgi Bankası güncelleştirme
- Bilgi Bankası yayımlama
- Tahmin çalışma zamanı uç noktası anahtarını al
- Uzun süre çalışan görevi bekle
- Bilgi Bankası indirin
- Yanıt alma
- Bilgi bankasını Sil
Başvuru (yazma) | Başvuru (çalışma zamanı) | Kitaplık kaynak kodu (yazma) | Kitaplık kaynak kodu (çalışma zamanı) | Örnekler
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
- Azure aboneliği- ücretsiz olarak bir tane oluşturun
- Git
- Azure aboneliğiniz olduktan sonra, yazma anahtarınızı ve uç noktanızı almak için Azure portal bir soru-cevap oluşturma kaynağı oluşturun. Dağıtıldıktan sonra Kaynağa Git' i seçin.
- Uygulamanızı Soru-Cevap Oluşturma API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir. Anahtarınızı ve uç noktanızı sonraki hızlı başlangıçta aşağıdaki koda yapıştırın.
F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.
Ayarlanıyor
Yeni bir go uygulaması oluşturma
Adlı yeni bir dosya oluşturun kb_sample.go ve aşağıdaki kitaplıkları içeri aktarın.
import (
"context"
"fmt"
"github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v4.0/qnamaker"
"github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v4.0/qnamakerruntime"
"github.com/Azure/go-autorest/autorest"
"log"
"strings"
"time"
)
Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun.
Önemli
Azure portal gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma kaynak için anahtar ve uç noktayı bulun. Kaynak yönetimi altında kaynağın anahtar ve uç nokta sayfasında yer alır.
Bilgi Bankası 'nizi oluşturmak için anahtarın tamamına ihtiyacınız vardır. Uç noktadan yalnızca kaynak adına ihtiyacınız vardır. Biçim https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com .
İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
var subscription_key string = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE"
var authoring_endpoint string = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE"
var runtime_endpoint string = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE"
Nesne modelleri
Soru-Cevap Oluşturma iki farklı nesne modeli kullanır:
- Qnamakerclient , Bilgi Bankası oluşturmak, yönetmek, yayımlamak ve indirmek için kullanılan nesnedir.
- Qnamakerruntime , Bilgi Bankası 'Nı GENERATEANSWER API 'siyle sorgulayan ve EĞIT API 'yi ( etkin öğrenmekapsamında) kullanarak önerilen yeni soruları gönderen nesnedir.
Bu örnek Bilgi Bankası 'nı kullanma
Bu hızlı başlangıçta Bilgi Bankası, 2 konuşma QnA çiftleriyle başlar. Bu, örneğin, bu örneği basitleştirmek ve Update yönteminde kullanmak için son derece öngörülebilir kimliklere sahip olmak üzere, izleme istemlerini yeni çiftlere yönelik sorularla ilişkilendirerek yapılır. Bu, planlı ve bu hızlı başlangıç için belirli bir sırada uygulandı.
Mevcut QnA çiftlerine bağlı olan izleme istemleriyle bilgi bankasını zaman içinde geliştirmeyi planlıyorsanız şunları seçebilirsiniz:
- Daha büyük knowledgetabanlar için, otomasyonu destekleyen bir metin düzenleyicisinde veya TSV aracında Bilgi Bankası 'nı yönetin, ardından bilgi bankasını bir güncelleştirmeyle birlikte tamamen değiştirin.
- Daha küçük knowledgeesaslarını için, izleme istemlerini tamamen Soru-Cevap Oluşturma portalında yönetin.
Bu hızlı başlangıçta kullanılan QnA çiftleri hakkında ayrıntılar:
- QnA çiftinin türleri-bu Bilgi Bankası 'nda, güncelleştirmeden sonra 2 tür QnA çifti bulunur: chitchat ve etki alanına özgü bilgiler. Bu, Bilgi Bankası 'nizin sohbet botu gibi bir konuşma uygulamasına bağlı olması durumunda tipik bir uygulamadır.
- Bilgi Bankası yanıtları meta veriler tarafından filtrelenebilir veya izleme istemleri kullanılarak bu hızlı başlangıç bunu göstermez. Bu dilden bağımsız generateAnswer örneklerini burayabakın.
- Yanıt metni markındır ve görüntüler (genel kullanıma açık internet tabanlı görüntüler), bağlantılar (herkese açık kullanılabilir URL 'Ler) ve madde işaretleri gibi çok sayıda Marku içerebilir. bu hızlı başlangıç bu kadar çok kullanılmaz.
QnAMakerClient nesne modeli
Bilgi bankasını oluşturmak, güncelleştirmek, yayımlamak, indirmek ve silmek için Knowledgebaseclient kullanın. Bu işlemler aşağıdaki bölümlerde ele alınmıştır.
Bilgi tabanları oluşturma ve güncelleştirme gibi uzun süren işlemlerin durumunu denetlemek için OperationsClient kullanın.
QnAMakerRuntimeClient nesne modeli
Bilgi tabanınızı yayımladıktan sonra, bilgi bankaınızı sorgulamak için Runtimeclient kullanın. Bu işlem bilgi bankasını sorgulamabölümünde ele alınmıştır.
Bilgi bankası oluşturma
Bilgi Bankası, üç kaynaktan alınan Createkbdto nesnesine soru ve yanıt çiftlerini depolar:
- Düzenleme içeriği için QnADTO nesnesini kullanın.
- Meta verileri ve izleme istemlerini kullanmak için düzenleme bağlamını kullanın, çünkü bu veriler tek tek QnA çifti düzeyine eklenir.
- Dosyalar Için filedto nesnesini kullanın. Fileda, dosyaya erişmek için dosya adını ve genel URL 'YI içerir.
- URL 'ler için, genel olarak kullanılabilen URL 'leri temsil eden dizelerin bir listesini kullanın.
Oluştur metodunu çağırın ve ardından operationId durumu yoklamak için döndürülen Işlemin özelliğini GetDetails yöntemine geçirin.
Aşağıdaki kodun son satırı Bilgi Bankası KIMLIĞINI döndürür.
// Create a knowledge base.
func create_kb () string {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewKnowledgebaseClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
name := "QnA Maker FAQ"
/*
The fields of QnADTO are pointers, and we cannot get the addresses of literal values,
so we declare helper variables.
*/
id := int32(0)
answer := "You can use our REST APIs to manage your Knowledge Base. See here for details: https://westus.dev.cognitive.microsoft.com/docs/services/58994a073d9e04097c7ba6fe/operations/58994a073d9e041ad42d9baa"
source := "Custom Editorial"
questions := []string{ "How do I programmatically update my Knowledge Base?" }
// The fields of MetadataDTO are also pointers.
metadata_name_1 := "category"
metadata_value_1 := "api"
metadata := []qnamaker.MetadataDTO{ qnamaker.MetadataDTO{ Name: &metadata_name_1, Value: &metadata_value_1 } }
qna_list := []qnamaker.QnADTO{ qnamaker.QnADTO{
ID: &id,
Answer: &answer,
Source: &source,
Questions: &questions,
Metadata: &metadata,
} }
urls := []string{}
files := []qnamaker.FileDTO{}
// The fields of CreateKbDTO are all pointers, so we get the addresses of our variables.
createKbPayload := qnamaker.CreateKbDTO{ Name: &name, QnaList: &qna_list, Urls: &urls, Files: &files }
// Create the KB.
kb_result, kb_err := client.Create (ctx, createKbPayload)
if kb_err != nil {
log.Fatal(kb_err)
}
// Wait for the KB create operation to finish.
fmt.Println ("Waiting for KB create operation to finish...")
// Operation.OperationID is a pointer, so we need to dereference it.
return wait_for_operation (*kb_result.OperationID)
}
Bilgi bankası güncelleştirme
Bilgi Bankası KIMLIĞI ve bir Updatekboperationdto nesnesinde güncelleştirme çağırarak ve geçirerek Bilgi Bankası 'nı güncelleştirebilirsiniz. Bu nesne, sırasıyla şunları içerebilir:
operationIdDurumu yoklamak için döndürülen işlemin özelliğini GetDetails yöntemine geçirin.
// Update a knowledge base.
func update_kb (kb_id string) {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewKnowledgebaseClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
// Add new Q&A lists, URLs, and files to the KB.
/*
The fields of QnADTO are pointers, and we cannot get the addresses of literal values,
so we declare helper variables.
*/
id := int32(1)
answer := "You can change the default message if you use the QnAMakerDialog. See this for details: https://docs.botframework.com/en-us/azure-bot-service/templates/qnamaker/#navtitle"
source := "Custom Editorial"
questions := []string{ "How can I change the default message from QnA Maker?" }
// The fields of MetadataDTO are also pointers.
metadata_name_1 := "category"
metadata_value_1 := "api"
metadata := []qnamaker.MetadataDTO{ qnamaker.MetadataDTO{ Name: &metadata_name_1, Value: &metadata_value_1 } }
qna_list := []qnamaker.QnADTO{ qnamaker.QnADTO{
ID: &id,
Answer: &answer,
Source: &source,
Questions: &questions,
Metadata: &metadata,
} }
urls := []string{}
files := []qnamaker.FileDTO{}
/*
The fields of UpdateKbOperationDTOAdd, updateKBUpdatePayload, updateKBDeletePayload,
and UpdateKbOperationDTO are all pointers, so we get the addresses of our variables.
*/
updateKBAddPayload := qnamaker.UpdateKbOperationDTOAdd{ QnaList: &qna_list, Urls: &urls, Files: &files }
// Update the KB name.
name := "New KB name"
updateKBUpdatePayload := qnamaker.UpdateKbOperationDTOUpdate { Name: &name }
// Delete the QnaList with ID 0.
ids := []int32{ 0 }
updateKBDeletePayload := qnamaker.UpdateKbOperationDTODelete { Ids: &ids }
// Bundle the add, update, and delete requests.
updateKbPayload := qnamaker.UpdateKbOperationDTO{ Add: &updateKBAddPayload, Update: &updateKBUpdatePayload, Delete: &updateKBDeletePayload }
// Update the KB.
kb_result, kb_err := client.Update (ctx, kb_id, updateKbPayload)
if kb_err != nil {
log.Fatal(kb_err)
}
// Wait for the KB update operation to finish.
fmt.Println ("Waiting for KB update operation to finish...")
// Operation.OperationID is a pointer, so we need to dereference it.
wait_for_operation (*kb_result.OperationID)
}
Bilgi Bankası indirin
Veritabanını Qnadocumentsdtolistesi olarak indirmek için Download metodunu kullanın. bu yöntemin sonucu bir TSV dosyası olmadığından, bu, Ayarlar sayfasından Soru-Cevap Oluşturma portalının dışarı aktarma ile eşdeğer değildir .
// Download a knowledge base.
func download_kb (kb_id string) {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewKnowledgebaseClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
result, kb_err := client.Download (ctx, kb_id, "Prod")
if kb_err != nil {
log.Fatal(kb_err)
}
fmt.Println ("KB " + kb_id + " downloaded. It contains " + string (len(*result.QnaDocuments)) + " question/answer sets.")
}
Bilgi bankası yayımlama
Yayımla yöntemini kullanarak Bilgi Bankası 'nı yayımlayın. Bu, Bilgi Bankası KIMLIĞI tarafından başvurulan geçerli kaydedilmiş ve eğitilen modeli alır ve bir uç noktada bunu yayınlar.
// Publish a knowledge base.
func publish_kb (kb_id string) {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewKnowledgebaseClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
_, kb_err := client.Publish (ctx, kb_id)
if kb_err != nil {
log.Fatal(kb_err)
}
fmt.Println ("KB " + kb_id + " published.")
}
Bilgi Bankası 'nı sorgulama
Bilgi Bankası yayımlandıktan sonra, bilgileri sorgulamak için çalışma zamanı uç noktası anahtarına ihtiyacınız vardır. Bu, yazma istemcisini oluşturmak için kullanılan abonelik anahtarıyla aynı değildir.
Bir EndpointKeysClient oluşturun ve bir endpointkeysdto nesnesine almak için GetKeys metodunu kullanın.
// Get runtime endpoint key.
func get_runtime_endpoint_key () string {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewEndpointKeysClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
result, err := client.GetKeys (ctx)
if err != nil {
log.Fatal(err)
}
return *result.PrimaryEndpointKey
}
Bilgi Bankası 'nı sorgulamak için bir Runtimeclient oluşturun ve generateanswer metodunu çağırın.
// Send a query to a knowledge base.
func query_kb (kb_id string) {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamakerruntime.NewRuntimeClient(runtime_endpoint)
runtime_key := get_runtime_endpoint_key()
// Set the runtime key on the client.
headers := make(map[string]interface{})
headers["Authorization"] = "EndpointKey " + runtime_key
client.Authorizer = autorest.NewAPIKeyAuthorizerWithHeaders(headers)
/*
The fields of QueryDTO are pointers, and we cannot get the addresses of literal values,
so we declare helper variables.
*/
question := "Is the QnA Maker service free?"
var answers int32
answers = 3
query := qnamakerruntime.QueryDTO {
Question: &question,
Top: &answers,
}
result, kb_err := client.GenerateAnswer (ctx, kb_id, query)
if kb_err != nil {
log.Fatal(kb_err)
}
fmt.Println ("Top answers:\n")
for _, answer := range *result.Answers {
fmt.Printf ("Answer: %s", *answer.Answer)
fmt.Printf ("Score: %f\n", *answer.Score)
}
}
Bu, Bilgi Bankası sorgulama basit bir örneğidir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerinigözden geçirin.
Bilgi bankasını silme
Bilgi Bankası KIMLIĞI parametresiyle Delete metodunu kullanarak Bilgi Bankası 'nı silin.
// Delete a knowledge base.
func delete_kb (kb_id string) {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
client := qnamaker.NewKnowledgebaseClient(authoring_endpoint)
// Set the subscription key on the client.
client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
_, kb_err := client.Delete (ctx, kb_id)
if kb_err != nil {
log.Fatal(kb_err)
}
fmt.Println ("KB " + kb_id + " delete.")
}
İşlemin durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemin tamamlanmasını beklemek yerine bir işlem döndürülür. Özgün yöntemin durumunu öğrenmek için işlem KIMLIĞINI yoklamaya (yeniden deneme mantığı ile) kullanın.
func wait_for_operation (operation_id string) string {
// Get the context, which is required by the SDK methods.
ctx := context.Background()
ops_client := qnamaker.NewOperationsClient(authoring_endpoint)
// Set the subscription key on the client.
ops_client.Authorizer = autorest.NewCognitiveServicesAuthorizer(subscription_key)
result := ""
done := false
for done == false {
op_result, op_err := ops_client.GetDetails (ctx, operation_id)
if op_err != nil {
log.Fatal(op_err)
}
// If the operation isn't finished, wait and query again.
if op_result.OperationState == "Running" || op_result.OperationState == "NotStarted" {
fmt.Println ("Operation is not finished. Waiting 10 seconds...")
time.Sleep (time.Duration(10) * time.Second)
} else {
done = true
fmt.Print ("Operation result: " + op_result.OperationState)
fmt.Println ()
if op_result.OperationState == "Failed" {
handle_error (op_result)
log.Fatal()
} else {
result = strings.ReplaceAll(*op_result.ResourceLocation, "/knowledgebases/", "")
}
}
}
return result
}
Hataları işleme
Aşağıdaki kod, SDK işlevlerinin döndürdüğü hataların nasıl işleneceğini gösterir.
// Helper function to handle errors.
func print_inner_error (error qnamaker.InnerErrorModel) {
if error.Code != nil {
fmt.Println (*error.Code)
}
if error.InnerError != nil {
print_inner_error (*error.InnerError)
}
}
// Helper function to handle errors.
func print_error_details (errors []qnamaker.Error) {
for _, err := range errors {
if err.Message != nil {
fmt.Println (*err.Message)
}
if err.Details != nil {
print_error_details (*err.Details)
}
if err.InnerError != nil {
print_inner_error (*err.InnerError)
}
}
}
// Helper function to handle errors.
func handle_error (result qnamaker.Operation) {
if result.ErrorResponse != nil {
response := *result.ErrorResponse
if response.Error != nil {
err := *response.Error
if err.Message != nil {
fmt.Println (*err.Message)
}
if err.Details != nil {
print_error_details (*err.Details)
}
if err.InnerError != nil {
print_inner_error (*err.InnerError)
}
}
}
}
Uygulamayı çalıştırma
Uygulamanın ana yöntemi aşağıda verilmiştir.
func main() {
fmt.Println ("Creating KB...")
kb_id := create_kb()
fmt.Println ()
list_kbs()
fmt.Println ()
fmt.Println ("Updating KB...")
update_kb (kb_id)
fmt.Println ()
fmt.Println ("Publishing KB...")
publish_kb (kb_id)
fmt.Println ()
fmt.Println ("Downloading KB...")
download_kb (kb_id)
fmt.Println ()
fmt.Println ("Querying KB...")
query_kb (kb_id)
fmt.Println()
fmt.Println ("Deleting KB...")
delete_kb (kb_id)
fmt.Println ()
}
Uygulamayı hızlı başlangıç dosyanızdaki go komutuyla çalıştırın.
go run kb_sample.go
Bu örnek için kaynak kodu GitHub bulunabilir
Ruby için Soru-Cevap Oluşturma kitaplığını kullanarak şunları yapmak için:
- Bilgi bankası oluşturma
- Bilgi bankası güncelleştirme
- Bilgi bankası yayımlama
- Tahmin çalışma zamanı uç nokta anahtarını al
- Uzun süre çalışan görevi bekleme
- Bilgi bankası indirme
- Yanıt alma
- Bilgi bankası silme
Kitaplık kaynak kodu (yazma) | Kitaplık kaynak kodu (çalışma zamanı) | Paket (yazma) | Paket (çalışma zamanı) | Ruby örnekleri
Not
1 Temmuz 2019 ' den sonra oluşturulan yeni kaynaklar özel alt etki alanı adları kullanır. Daha fazla bilgi ve bölgesel uç noktaların tamamen listesi için bkz. bilişsel Hizmetler Için özel alt etki alanı adları.
Önkoşullar
- Azure aboneliği - Ücretsiz bir abonelik oluşturun
- Ruby 2.x
- Azure aboneliğinize sahip olduktan sonra, yazma anahtarınızı Soru-Cevap Oluşturma uç Azure portal bir kaynak oluşturun. Dağıtımdan sonra Kaynağa git'i seçin.
- Uygulamanıza api'sini bağlamak için, oluşturmakta olduğu kaynakta yer alan anahtara ve uç Soru-Cevap Oluşturma gerekir. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz.
- Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını (
F0) kullanabilirsiniz.
Ayarlama
İstemci kitaplıklarını yükleme
Ruby'yi yükledikten sonra istemci kitaplıklarını şu şekilde yükleyebilirsiniz:
gem install azure_cognitiveservices_qnamaker
gem install azure_cognitiveservices_qnamakerruntime
Yeni bir Ruby uygulaması oluşturma
adlı yeni bir dosya oluşturun quickstart.rb ve aşağıdaki kitaplıkları içeri aktarın.
require 'azure_cognitiveservices_qnamaker'
require 'azure_cognitiveservices_qnamakerruntime'
include Azure::CognitiveServices::Qnamaker::V4_0::Models
include Azure::CognitiveServices::QnamakerRuntime::V4_0::Models
Kaynağınıza azure uç noktası ve anahtarı için değişkenler oluşturun.
Önemli
Azure portal'a gidin ve önkoşullarda oluşturduğunuz Soru-Cevap Oluşturma uç noktasını ve anahtarı bulun. Bunlar kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimi altında bulunur.
Bilgi tabanınızı oluşturmak için tüm anahtara ihtiyacınız vardır. Yalnızca uç noktanın kaynak adına ihtiyacınız var. Biçimi şu https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com şekildedir: .
Bitirilen anahtarı kodunuzdan kaldırmayı unutmayın ve hiçbir zaman herkese açık şekilde yayınlayamayabilirsiniz. Üretim için kimlik bilgilerinizi depolamak ve bu kimlik bilgilerine erişmek için güvenli bir yol kullanmayı göz önünde bulundurarak. Örneğin, Azure Anahtar Kasası güvenli anahtar depolama alanı sağlar.
subscription_key = 'PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE'
endpoint = 'PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE'
runtime_endpoint = 'PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE'
Nesne modelleri
Soru-Cevap Oluşturma iki farklı nesne modeli kullanır:
- QnAMakerClient, bilgi bankası oluşturmak, yönetmek, yayımlamak ve indirmek için nesnedir.
- QnAMakerRuntime, GenerateAnswer API'si ile bilgi bankası sorgulama ve Eğitim API'sini kullanarak yeni önerilen sorular gönderme nesnesidir (etkin öğrenmenin bir parçası olarak).
Bu örnek Bilgi Bankası 'nı kullanma
Bu hızlı başlangıçta Bilgi Bankası, 2 konuşma QnA çiftleriyle başlar. Bu, örneğin, bu örneği basitleştirmek ve Update yönteminde kullanmak için son derece öngörülebilir kimliklere sahip olmak üzere, izleme istemlerini yeni çiftlere yönelik sorularla ilişkilendirerek yapılır. Bu, planlı ve bu hızlı başlangıç için belirli bir sırada uygulandı.
Mevcut QnA çiftlerine bağlı olan izleme istemleriyle bilgi bankasını zaman içinde geliştirmeyi planlıyorsanız şunları seçebilirsiniz:
- Daha büyük knowledgetabanlar için, otomasyonu destekleyen bir metin düzenleyicisinde veya TSV aracında Bilgi Bankası 'nı yönetin, ardından bilgi bankasını bir güncelleştirmeyle birlikte tamamen değiştirin.
- Daha küçük knowledgeesaslarını için, izleme istemlerini tamamen Soru-Cevap Oluşturma portalında yönetin.
Bu hızlı başlangıçta kullanılan QnA çiftleri hakkında ayrıntılar:
- QnA çiftinin türleri-bu Bilgi Bankası 'nda, güncelleştirmeden sonra 2 tür QnA çifti bulunur: chitchat ve etki alanına özgü bilgiler. Bu, Bilgi Bankası 'nizin sohbet botu gibi bir konuşma uygulamasına bağlı olması durumunda tipik bir uygulamadır.
- Bilgi Bankası yanıtları meta veriler tarafından filtrelenebilir veya izleme istemleri kullanılarak bu hızlı başlangıç bunu göstermez. Bu dilden bağımsız generateAnswer örneklerini burayabakın.
- Yanıt metni markındır ve görüntüler (genel kullanıma açık internet tabanlı görüntüler), bağlantılar (herkese açık kullanılabilir URL 'Ler) ve madde işaretleri gibi çok sayıda Marku içerebilir. bu hızlı başlangıç bu kadar çok kullanılmaz.
QnAMakerClient nesne modeli
yazma Soru-Cevap Oluşturma, anahtarınızı içeren MsRest::ServiceClientCredentials kullanarak Azure'da kimlik doğrulaması yapan bir QnAMakerClient nesnesidir.
İstemci oluşturulduktan sonra, bilgi tabanınızı oluşturmak, yönetmek ve yayımlamak için istemcinin bilgi bankası özelliğinin yöntemlerini kullanın.
Hemen yapılan işlemler için yöntem genellikle sonucu (varsa) döndürür. Uzun süre çalışan işlemler için yanıt bir işlem nesnesidir. İsteğin operations.get_details belirlemek için operation.operation_id değeriyle birlikte operations.get_details yöntemini çağırma.
QnAMakerRuntimeClient nesne modeli
İstemcinin Soru-Cevap Oluşturma çalışma zamanı bir QnAMakerRuntimeClient nesnesidir.
Bilgi bankasınızı yazma istemcisini kullanarak yayımladikten sonra, bilgi bankasından bir yanıt runtime.generate_answer çalışma zamanı istemcisinin runtime.generate_answer yöntemini kullanın.
çağrısında generate_answer isteğe bağlı parametre için bir custom_headers karma değer girin. Bu karma bir anahtar ve Authorization bir değeri EndpointKey YOUR_ENDPOINT_KEY içermeli. YOUR_ENDPOINT_KEY değerini endpoint_keys.get_keys çağrısı yapmak için yazma istemcisini kullanın.
Bilgi bankası yazma için istemcinin kimliğini doğrulama
Yazma uç noktanız ve abonelik anahtarınız ile bir istemci örneği.
credentials = MsRestAzure::CognitiveServicesCredentials.new(subscription_key)
client = Azure::CognitiveServices::Qnamaker::V4_0::QnamakerClient.new(credentials)
client.endpoint = endpoint
Bilgi bankası oluşturma
Bilgi bankası, üç farklı kaynakta bulunan CreateKbDTO nesnesi için soru ve yanıt çiftlerini depolar:
- Editoryal içerik için QnADTO nesnesini kullanın.
- Meta verileri ve takip istemlerini kullanmak için editoryal bağlamı kullanın çünkü bu veriler tek tek QnA çift düzeyinde eklenir.
- Dosyalar için FileDTO nesnesini kullanın. FileDTO, dosya adını ve dosyaya ulaşmak için genel URL'yi içerir.
- URL'ler için, genel kullanıma açık URL'leri temsil eden bir dize listesi kullanın.
Durumu yoklaması için create yöntemini çağırarak döndürülen operation_id operations.get_details yönteminin özelliğini iletir.
Aşağıdaki kodun son satırı bilgi bankası kimliğini döndürür.
def create_kb(client)
print("Creating knowledge base...\n")
metadata_1 = MetadataDTO.new()
metadata_1.name = "Category"
metadata_1.value = "api"
metadata_2 = MetadataDTO.new()
metadata_2.name = "Language"
metadata_2.value = "REST"
qna1 = QnADTO.new()
qna1.answer = "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base."
qna1.questions = ["How do I manage my knowledgebase?"]
qna1.metadata = [metadata_1, metadata_2]
metadata_2 = MetadataDTO.new()
metadata_2.name = "Language"
metadata_2.value = "Ruby"
qna2 = QnADTO.new()
qna2.answer = "Yes, You can use our [Ruby SDK](https://rubygems.org/gems/azure_cognitiveservices_qnamaker) to manage your knowledge base."
qna2.questions = ["Can I program with Ruby?"]
qna2.metadata = [metadata_1, metadata_2]
create_kb_dto = CreateKbDTO.new()
create_kb_dto.name = "QnA Maker Ruby SDK Quickstart"
create_kb_dto.qna_list = [qna1, qna2]
operation = client.knowledgebase.create(create_kb_payload=create_kb_dto)
result = _monitor_operation(client, operation)
knowledge_base_ID = result.resource_location.sub! "/knowledgebases/", ""
print("Created KB with ID: #{knowledge_base_ID}\n")
return knowledge_base_ID
end
Bilgi bankası güncelleştirme
Knowledgebase.update'i çağırarak ve bilgi bankası kimliğini ve UpdateKbOperationDTO nesnesini geçerek bir bilgi bankası güncelleştirebilirsiniz. Bu nesne de şunları içerebilir:
Durum operation_id yoklaması için döndürülen işlemi özelliğini operations.get_details yöntemine iletir.
def update_kb(client, kb_id)
print("Updating knowledge base...\n")
metadata_1 = MetadataDTO.new()
metadata_1.name = "Category"
metadata_1.value = "Chitchat"
metadata_2 = MetadataDTO.new()
metadata_2.name = "Chitchat"
metadata_2.value = "end"
qna3 = QnADTO.new()
qna3.answer = "goodbye"
qna3.questions = ["bye", "end", "stop", "quit", "done"]
qna3.metadata=[metadata_1, metadata_2]
metadata_2 = MetadataDTO.new()
metadata_2.name = "Chitchat"
metadata_2.value = "begin"
prompt_1 = PromptDTO.new()
prompt_1.display_order = 1
prompt_1.display_text = "Use REST"
prompt_1.qna_id = 1
prompt_2 = PromptDTO.new()
prompt_2.display_order = 2
prompt_2.display_text = "Use .NET NuGet package"
prompt_2.qna_id = 2
context = QnADTOContext.new()
context.is_context_only = false
context.prompts = [prompt_1, prompt_2]
qna4 = QnADTO.new()
qna4.answer = "Hello, please select from the list of questions or enter a new question to continue."
qna4.questions = ["hello", "hi", "start"]
qna4.metadata=[metadata_1, metadata_2]
qna4.context = context
add = UpdateKbOperationDTOAdd.new()
add.qna_list = [qna3, qna4]
add.urls = ["https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"]
update_kb_operation_dto = UpdateKbOperationDTO.new()
update_kb_operation_dto.add = add
operation = client.knowledgebase.update(kb_id, update_kb_operation_dto)
_monitor_operation(client, operation)
print("Updated knowledge base.\n")
end
Bilgi bankası indirme
Veritabanını QnADocumentsDTOlistesi olarak indirmek için knowledgebase.download yöntemini kullanın. Bu yöntem, Soru-Cevap Oluşturma TSV dosyası Ayarlar portaldan dışarı aktarmayla eşdeğer değildir.
def download_kb(client, kb_id)
print("Downloading knowledge base...\n")
kb_data = client.knowledgebase.download(kb_id, "Prod")
print("Downloaded knowledge base. It has #{kb_data.qna_documents.length()} QnAs.\n")
end
Bilgi bankası yayımlama
knowledgebase.publish yöntemini kullanarak bilgi bankası yayımlama. Bu, bilgi bankası kimliği tarafından başvurulan geçerli kayıtlı ve eğitilmiş modeli alır ve bunu bir uç noktada yayımlar.
def publish_kb(client, kb_id)
print("Publishing knowledge base...\n")
client.knowledgebase.publish(kb_id)
print("Published knowledge base.\n")
end
Sorgu çalışma zamanı anahtarını al
Bir bilgi bankası yayımlandıktan sonra, bilgileri sorgulamak için çalışma zamanı uç nokta anahtarı gerekir. Bu, yazma istemcisini oluşturmak için kullanılan abonelik anahtarıyla aynı değildir.
EndpointKeysDTO nesnesi almak için endpoint_keys.get_keys yöntemini kullanın.
Bilgi tabanını sorgulamak için nesnesinde döndürülen anahtar özelliklerden birini kullanın.
def getEndpointKeys_kb(client)
print("Getting runtime endpoint keys...\n")
keys = client.endpoint_keys.get_keys()
print("Primary runtime endpoint key: #{keys.primary_endpoint_key}.\n")
return keys.primary_endpoint_key
end
Yanıt oluşturmak için çalışma zamanının kimliğini doğrulama
Etkin öğrenmeden yanıt oluşturmak veya eğitmek için bilgi bankasında sorgu oluşturmak için bir QnAMakerRuntimeClient oluşturun.
credentials = MsRestAzure::CognitiveServicesCredentials.new(subscription_key)
runtime_client = Azure::CognitiveServices::QnamakerRuntime::V4_0::QnamakerRuntimeClient.new(credentials)
runtime_client.runtime_endpoint = runtime_endpoint
Bilgiden yanıt almak veya etkin öğrenme için bilgi bankasına yeni önerilen sorular göndermek için QnAMakerRuntimeClient kullanın.
Bilgi bankasından yanıt oluşturma
RuntimeClient.runtime.generateAnswer yöntemini kullanarak yayımlanmış bir bilgi bankasından yanıt oluşturma. Bu yöntem bilgi bankası kimliğini ve QueryDTO'nun kabul eder. Sohbet botta kullanmak üzere Üst ve Bağlam gibi QueryDTO'nun ek özelliklerine erişin.
def generate_answer(client, kb_id, endpoint_key)
print("Querying knowledge base...\n")
query = QueryDTO.new()
query.question = "How do I manage my knowledgebase?"
headers = Hash.new
headers["Authorization"] = "EndpointKey #{endpoint_key}"
listSearchResults = client.runtime.generate_answer(kb_id, query, custom_headers:headers)
for i in listSearchResults.answers
print("Answer ID: #{i.id}.\n")
print("Answer: #{i.answer}.\n")
print("Answer score: #{i.score}.\n")
end
end
Bu, bilgi bankası sorgulamaya basit bir örnektir. Gelişmiş sorgulama senaryolarını anlamak için diğer sorgu örneklerini gözden geçirebilirsiniz.
Bilgi bankasını silme
Bilgi bankası kimliğinin parametresiyle knowledgebase.delete yöntemini kullanarak bilgi bankasını silin.
def delete_kb(client, kb_id)
print("Deleting knowledge base...\n")
client.knowledgebase.delete(kb_id)
print("Deleted knowledge base.\n")
end
Bir işlem durumunu al
Oluşturma ve güncelleştirme gibi bazı yöntemler, işlemi tamamlamak için beklemek yerine bir işlem döndürülecek kadar zaman alır. Özgün yöntemin durumunu belirlemek için yoklama (yeniden deneme mantığıyla) için işlemden işlem kimliğini kullanın.
def _monitor_operation(client, operation)
for i in 1..20
if ["NotStarted", "Running"].include?(operation.operation_state)
print("Waiting for operation: #{operation.operation_id} to complete.\n")
sleep(10)
operation = client.operations.get_details(operation.operation_id)
else
break
end
end
if operation.operation_state != "Succeeded"
raise Exception("Operation #{operation.operation_id} failed to complete.")
end
return operation
end
Uygulamayı çalıştırma
Uygulamanın ana yöntemi aşağıdaki şekildedir.
credentials = MsRestAzure::CognitiveServicesCredentials.new(subscription_key)
client = Azure::CognitiveServices::Qnamaker::V4_0::QnamakerClient.new(credentials)
client.endpoint = endpoint
kb_id = create_kb(client)
update_kb(client, kb_id)
publish_kb(client, kb_id)
download_kb(client, kb_id)
runtime_endpoint_key = getEndpointKeys_kb(client)
credentials = MsRestAzure::CognitiveServicesCredentials.new(subscription_key)
runtime_client = Azure::CognitiveServices::QnamakerRuntime::V4_0::QnamakerRuntimeClient.new(credentials)
runtime_client.runtime_endpoint = runtime_endpoint
generate_answer(runtime_client, kb_id, runtime_endpoint_key)
delete_kb(client, kb_id)
Hızlı başlangıç dosyanız üzerinde ruby komutuyla uygulamayı çalıştırın.
ruby quickstart.rb
Bu örneğin kaynak kodu GitHub.
Kaynakları temizleme
Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak için kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkilendirilmiş diğer tüm kaynakları da siler.