bilgi bankası etkin öğrenme ile ilgili önerilen soruları kabul etme
Not
Soru-Cevap Oluşturma hizmeti 31 Mart 2025'te kullanımdan kaldırılıyor. Soru ve yanıtlama özelliğinin daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir. Dil Hizmeti'nin içindeki soru yanıtlama özellikleri için bkz . soru yanıtlama. 1 Ekim 2022'den itibaren yeni Soru-Cevap Oluşturma kaynakları oluşturamayacaksınız. Mevcut Soru-Cevap Oluşturma bilgi bankası soru yanıtlamaya geçirme hakkında bilgi için geçiş kılavuzuna bakın.
Etkin Öğrenme, öneriyi onayladıktan sonra Bilgi Bankası veya Arama Hizmeti'ni değiştirir, ardından kaydedip eğitebilirsiniz. Öneriyi onaylarsanız alternatif bir soru olarak eklenir.
Etkin öğrenmeyi açma
Önerilen soruları görmek için Soru-Cevap Oluşturma kaynağınız için etkin öğrenmeyi açmanız gerekir.
Önerilen soruları görüntüleme
Önerilen soruları görmek için Bilgi bankası Düzenle sayfasında Görünüm Seçenekleri'ni ve ardından Etkin öğrenme önerilerini göster'i seçin. Soru ve yanıt çiftlerinden herhangi biri için öneri yoksa bu seçenek devre dışı bırakılır.
Önerilere Göre Filtrele'yi seçerek yalnızca önerileri göstermek için bilgi bankası soru ve yanıt çiftleriyle filtreleyin.
Her Soru-Cevap çifti,
✔
soruyu kabul etmek için onay işareti olan yeni soru alternatiflerini veya önerileri reddetmek için birx
öneride bulunur. Soruyu eklemek için onay işaretini seçin.Bağlam araç çubuğunda Tümünü ekle veya Tümünü reddet'i seçerek tüm önerileri ekleyebilir veya silebilirsiniz.
Değişiklikleri bilgi bankası kaydetmek için Kaydet ve Eğit'i seçin.
Değişikliklerin GenerateAnswer API'sinden kullanılabilir olmasını sağlamak için Yayımla'yı seçin.
Her 30 dakikada bir 5 veya daha fazla benzer sorgu kümelendiğinde Soru-Cevap Oluşturma, kabul etmek veya reddetmek için alternatif sorular önerir.
Etkin öğrenme önerileri dışarı aktarılan bilgi bankası kaydedilir
Uygulamanızda etkin öğrenme etkinleştirildiğinde ve uygulamayı dışarı aktardığınızda, SuggestedQuestions
tsv dosyasındaki sütun etkin öğrenme verilerini korur.
SuggestedQuestions
sütunu örtük, autosuggested
ve açık usersuggested
geri bildirim bilgilerinin JSON nesnesidir. Kullanıcı tarafından gönderilen tek bir soru için bu JSON nesnesine help
örnek olarak şu verilebilir:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
Bu uygulamayı yeniden aktardığınızda, etkin öğrenme bilgi bankası için bilgi toplamaya ve öneriler önermeye devam eder.
Bottan GenerateAnswer ve Train API'lerini kullanmaya yönelik mimari akış
Bot veya başka bir istemci uygulaması, etkin öğrenmeyi kullanmak için aşağıdaki mimari akışı kullanmalıdır:
Bot, generateAnswer API'siyle bilgi bankası yanıtını alır ve bir dizi yanıt almak için özelliğini kullanır
top
.Bot, açık geri bildirimleri belirler:
- Kendi özel iş mantığınızı kullanarak düşük puanları filtreleyin.
- Botta veya istemci uygulamasında, kullanıcıya verilen olası yanıtların listesini görüntüleyin ve kullanıcının seçili yanıtını alın.
Bot, Eğitim API'siyle seçili yanıtı Soru-Cevap Oluşturma'ya geri gönderir.
Birkaç eşleşen yanıt almak için GenerateAnswer isteğindeki en üstteki özelliği kullanın
Soru-Cevap Oluşturma'ya yanıt için soru gönderirken, top
JSON gövdesinin özelliği döndürülecek yanıt sayısını ayarlar.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Kullanıcıya gösterilecek yanıtların listesini almak için score özelliğini iş mantığıyla birlikte kullanın
İstemci uygulaması (sohbet botu gibi) yanıtı aldığında, ilk 3 soru döndürülür. Puanlar score
arasındaki yakınlığı analiz etmek için özelliğini kullanın. Bu yakınlık aralığı kendi iş mantığınıza göre belirlenir.
{
"answers": [
{
"questions": [
"Wi-Fi Direct Status Indicator"
],
"answer": "**Wi-Fi Direct Status Indicator**\n\nStatus bar icons indicate your current Wi-Fi Direct connection status: \n\nWhen your device is connected to another device using Wi-Fi Direct, '$ \n\n+ *+ ' Wi-Fi Direct is displayed in the Status bar.",
"score": 74.21,
"id": 607,
"source": "Bugbash KB.pdf",
"metadata": []
},
{
"questions": [
"Wi-Fi - Connections"
],
"answer": "**Wi-Fi**\n\nWi-Fi is a term used for certain types of Wireless Local Area Networks (WLAN). Wi-Fi communication requires access to a wireless Access Point (AP).",
"score": 74.15,
"id": 599,
"source": "Bugbash KB.pdf",
"metadata": []
},
{
"questions": [
"Turn Wi-Fi On or Off"
],
"answer": "**Turn Wi-Fi On or Off**\n\nTurning Wi-Fi on makes your device able to discover and connect to compatible in-range wireless APs. \n\n1. From a Home screen, tap ::: Apps > e Settings .\n2. Tap Connections > Wi-Fi , and then tap On/Off to turn Wi-Fi on or off.",
"score": 69.99,
"id": 600,
"source": "Bugbash KB.pdf",
"metadata": []
}
]
}
Benzer puanlara sahip sorular olduğunda istemci uygulaması izlemesi
İstemci uygulamanız, kullanıcının amacını en çok temsil eden tek soruyu seçmesi için soruları bir seçenekle birlikte görüntüler.
Kullanıcı mevcut sorulardan birini seçtikten sonra istemci uygulaması Soru-Cevap Oluşturma Eğitim API'sini kullanarak kullanıcının seçimini geri bildirim olarak gönderir. Bu geri bildirim, etkin öğrenme geri bildirimi döngüsünü tamamlar.
API eğitme
Etkin öğrenme geri bildirimi Soru-Cevap Oluşturma'ya EĞITIM API'sinin POST isteğiyle gönderilir. API imzası:
POST https://<QnA-Maker-resource-name>.azurewebsites.net/qnamaker/knowledgebases/<knowledge-base-ID>/train
Authorization: EndpointKey <endpoint-key>
Content-Type: application/json
{"feedbackRecords": [{"userId": "1","userQuestion": "<question-text>","qnaId": 1}]}
HTTP isteği özelliği | Adı | Tip | Amaç |
---|---|---|---|
URL yol parametresi | Bilgi bankası kimliği | Dize | bilgi bankası için GUID. |
Özel alt etki alanı | QnAMaker kaynak adı | Dize | Kaynak adı, Soru-Cevap Oluşturma için özel alt etki alanı olarak kullanılır. Bu, bilgi bankası yayımladıktan sonra Ayarlar sayfasında kullanılabilir. olarak host listelenir. |
Üst bilgi | İçerik Türü | Dize | API'ye gönderilen gövdenin medya türü. Varsayılan değer: application/json |
Üst bilgi | Yetkilendirme | Dize | Uç nokta anahtarınız (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx) . |
Gövde Sonrası | JSON nesnesi | JSON | Eğitim geri bildirimi |
JSON gövdesinin çeşitli ayarları vardır:
Örnek bir JSON gövdesi şöyle görünür:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "<question-text>",
"qnaId": 1
}
]
}
Başarılı bir yanıt 204 durumunu döndürür ve JSON yanıt gövdesi döndürmez.
Birçok geri bildirim kaydını tek bir çağrıda toplu iş
Bot gibi istemci tarafı uygulamasında verileri depolayabilir ve ardından dizideki tek bir JSON gövdesinde feedbackRecords
birçok kayıt gönderebilirsiniz.
Örnek bir JSON gövdesi şöyle görünür:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "How do I ...",
"qnaId": 1
},
{
"userId": "2",
"userQuestion": "Where is ...",
"qnaId": 40
},
{
"userId": "3",
"userQuestion": "When do I ...",
"qnaId": 33
}
]
}
Bot framework örnek kodu
Kullanıcının sorgusunun etkin öğrenme için kullanılması gerekiyorsa bot çerçeve kodunuzun Train API'sini çağırması gerekir. Yazacak iki kod parçası vardır:
- Etkin öğrenme için sorgu kullanılması gerekip gerekmediğini belirleme
- Etkin öğrenme için sorguyu Soru-Cevap Oluşturma Eğitim API'sine geri gönderme
Azure Bot örneğinde bu etkinliklerin her ikisi de programlanmıştır.
Bot Framework 4.x ile API Eğitma için örnek C# kodu
Aşağıdaki kod, Eğitim API'siyle Soru-Cevap Oluşturma'ya bilgi göndermeyi göstermektedir.
public class FeedbackRecords
{
// <summary>
/// List of feedback records
/// </summary>
[JsonProperty("feedbackRecords")]
public FeedbackRecord[] Records { get; set; }
}
/// <summary>
/// Active learning feedback record
/// </summary>
public class FeedbackRecord
{
/// <summary>
/// User id
/// </summary>
public string UserId { get; set; }
/// <summary>
/// User question
/// </summary>
public string UserQuestion { get; set; }
/// <summary>
/// QnA Id
/// </summary>
public int QnaId { get; set; }
}
/// <summary>
/// Method to call REST-based QnAMaker Train API for Active Learning
/// </summary>
/// <param name="endpoint">Endpoint URI of the runtime</param>
/// <param name="FeedbackRecords">Feedback records train API</param>
/// <param name="kbId">Knowledgebase Id</param>
/// <param name="key">Endpoint key</param>
/// <param name="cancellationToken"> Cancellation token</param>
public async static void CallTrain(string endpoint, FeedbackRecords feedbackRecords, string kbId, string key, CancellationToken cancellationToken)
{
var uri = endpoint + "/knowledgebases/" + kbId + "/train/";
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(uri);
request.Content = new StringContent(JsonConvert.SerializeObject(feedbackRecords), Encoding.UTF8, "application/json");
request.Headers.Add("Authorization", "EndpointKey " + key);
var response = await client.SendAsync(request, cancellationToken);
await response.Content.ReadAsStringAsync();
}
}
}
Bot Framework 4.x ile API Eğitma için örnek Node.js kodu
Aşağıdaki kod, Eğitim API'siyle Soru-Cevap Oluşturma'ya bilgi göndermeyi göstermektedir.
async callTrain(stepContext){
var trainResponses = stepContext.values[this.qnaData];
var currentQuery = stepContext.values[this.currentQuery];
if(trainResponses.length > 1){
var reply = stepContext.context.activity.text;
var qnaResults = trainResponses.filter(r => r.questions[0] == reply);
if(qnaResults.length > 0){
stepContext.values[this.qnaData] = qnaResults;
var feedbackRecords = {
FeedbackRecords:[
{
UserId:stepContext.context.activity.id,
UserQuestion: currentQuery,
QnaId: qnaResults[0].id
}
]
};
// Call Active Learning Train API
this.activeLearningHelper.callTrain(this.qnaMaker.endpoint.host, feedbackRecords, this.qnaMaker.endpoint.knowledgeBaseId, this.qnaMaker.endpoint.endpointKey);
return await stepContext.next(qnaResults);
}
else{
return await stepContext.endDialog();
}
}
return await stepContext.next(stepContext.result);
}
En iyi yöntemler
Etkin öğrenmeyi kullanırken en iyi yöntemler için bkz . En iyi yöntemler.