bilgi bankası etkin öğrenme ile ilgili önerilen soruları kabul edin
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. Soru-Cevap Oluşturma bilgi bankalarını 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 veya reddetmeniz 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 bilgilerini içeren bir 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ış
Bir bot veya başka bir istemci uygulaması, etkin öğrenmeyi kullanmak için aşağıdaki mimari akışı kullanmalıdır:
Bot yanıtı GenerateAnswer API'siyle bilgi bankası 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çtiği yanıtı 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ız tarafından 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": []
}
]
}
Soruların benzer puanlara sahip olduğu durumlarda istemci uygulaması izlemesi
İstemci uygulamanız soruları kullanıcının amacını en çok temsil eden tek soruyu seçmesine yönelik bir seçenekle birlikte görüntüler.
Kullanıcı mevcut sorulardan birini seçtikten sonra istemci uygulaması Soru-Cevap Oluşturma Eğitimi 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, Eğitim API'si POST isteğiyle Soru-Cevap Oluşturma'ya 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 | Tür | Amaç |
---|---|---|---|
URL yol parametresi | Bilgi bankası kimliği | string | bilgi bankası GUID değeri. |
Özel alt etki alanı | Soru-CevapMaker kaynak adı | string | 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 bulunur. olarak listelenir host . |
Üst bilgi | İçerik Türü | string | API'ye gönderilen gövdenin medya türü. Varsayılan değer: application/json |
Üst bilgi | Yetkilendirme | string | Uç nokta anahtarınız (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxx). |
Gövde Sonrası | JSON nesnesi | JSON | Eğitim geri bildirimi |
JSON gövdesinin çeşitli ayarları vardır:
JSON gövde özelliği | Tür | Amaç |
---|---|---|
feedbackRecords |
array | Geri bildirim listesi. |
userId |
string | Önerilen soruları kabul eden kişinin kullanıcı kimliği. Kullanıcı kimliği biçimi size aittir. Örneğin, bir e-posta adresi mimarinizde geçerli bir kullanıcı kimliği olabilir. İsteğe bağlı. |
userQuestion |
string | Kullanıcının sorgusunun tam metni. Gereklidir. |
qnaID |
sayı | Sorunun kimliği, GenerateAnswer yanıtında bulunur. |
Ö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 çerçevesi örnek kodu
Kullanıcının sorgusunun etkin öğrenme için kullanılması gerekiyorsa bot çerçeve kodunuzun Eğitim 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 nasıl bilgi gönderebilirsiniz?
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 EĞITIM API'si için örnek Node.js kodu
Aşağıdaki kod, Eğitim API'siyle Soru-Cevap Oluşturma'ya nasıl bilgi gönderebilirsiniz?
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.