Menerima pertanyaan yang disarankan pembelajaran aktif di pangkalan pengetahuan
Catatan
Layanan QnA Maker akan dihentikan pada 31 Maret 2025. Versi kemampuan pertanyaan dan jawaban yang lebih baru sekarang tersedia sebagai bagian dari Bahasa Azure AI. Untuk kemampuan menjawab pertanyaan dalam Language Service, lihat jawaban pertanyaan. Mulai 1 Oktober 2022, Anda tidak dapat membuat sumber daya QnA Maker baru. Untuk informasi tentang memigrasikan pangkalan pengetahuan QnA Maker yang ada pada jawaban atas pertanyaan, lihat panduan migrasi.
Pembelajaran Aktif mengubah Pangkalan Pengetahuan atau Layanan Pencarian setelah Anda menyetujui saran, lalu menyimpan dan melatih. Jika Anda menyetujui saran, saran tersebut akan ditambahkan sebagai pertanyaan alternatif.
Mengaktifkan pembelajaran aktif
Untuk melihat pertanyaan yang disarankan, Anda harus mengaktifkan pembelajaran aktif untuk sumber daya QnA Maker Anda.
Menampilkan pertanyaan yang disarankan
Untuk melihat pertanyaan yang disarankan, di halaman Edit pangkalan pengetahuan, pilih Tampilkan Opsi, lalu pilih Tampilkan saran pembelajaran aktif. Opsi ini akan dinonaktifkan jika tidak ada saran yang ada untuk salah satu pasangan pertanyaan dan jawaban.
Filter pangkalan pengetahuan dengan pasangan pertanyaan dan jawaban untuk hanya menampilkan saran dengan memilih Filter menurut Saran.
Setiap pasangan tanya jawab menyarankan alternatif pertanyaan baru dengan tanda centang,
✔
, untuk menerima pertanyaan ataux
untuk menolak saran. Pilih tanda centang untuk menambahkan pertanyaan.Anda dapat menambahkan atau menghapus semua saran dengan memilih Tambahkan semua atau Tolak semua di toolbar kontekstual.
Pilih Simpan dan Latih untuk menyimpan perubahan ke pangkalan pengetahuan.
Pilih Terbitkan untuk mengizinkan perubahan tersedia dari GenerateAnswer API.
Saat 5 atau lebih kueri serupa dikelompokkan, setiap 30 menit, QnA Maker menyarankan pertanyaan alternatif bagi Anda untuk menerima atau menolak.
Saran pembelajaran aktif disimpan di pangkalan pengetahuan yang diekspor
Saat aplikasi Anda mengaktifkan pembelajaran aktif, dan Anda mengekspor aplikasi, kolom SuggestedQuestions
dalam file tsv mempertahankan data pembelajaran aktif.
Kolom SuggestedQuestions
adalah objek JSON informasi implisit, autosuggested
, dan eksplisit, umpan balik usersuggested
. Contoh objek JSON ini untuk satu pertanyaan yang diajukan pengguna help
adalah:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
Saat Anda mendeportasi ulang aplikasi ini, pembelajaran aktif terus mengumpulkan informasi dan merekomendasikan saran untuk pangkalan pengetahuan Anda.
Alur arsitektur untuk menggunakan GenerateAnswer dan Train API dari bot
Bot atau aplikasi klien lainnya harus menggunakan alur arsitektur berikut untuk menggunakan pembelajaran aktif:
Bot mendapatkan jawaban dari pangkalan pengetahuan dengan GenerateAnswer API, menggunakan properti
top
untuk mendapatkan sejumlah jawaban.Bot menentukan umpan balik eksplisit:
- Dengan menggunakan logika bisnis kustom Anda sendiri, filter skor rendah.
- Di bot atau aplikasi klien, tampilkan daftar kemungkinan jawaban untuk pengguna dan dapatkan jawaban yang dipilih pengguna.
Bot mengirim jawaban yang dipilih kembali ke QnA Maker dengan Train API.
Gunakan properti teratas dalam permintaan GenerateAnswer untuk mendapatkan beberapa jawaban yang cocok
Saat mengajukan pertanyaan ke QnA Maker untuk jawaban, properti top
isi JSON menetapkan jumlah jawaban untuk ditampilkan.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Gunakan properti skor bersama dengan logika bisnis guna mendapatkan daftar jawaban untuk menampilkan pengguna
Saat aplikasi klien (seperti bot obrolan) menerima respons, 3 pertanyaan teratas ditampilkan. Gunakan properti score
untuk menganalisis kedekatan antara skor. Rentang kedekatan ini ditentukan oleh logika bisnis Anda sendiri.
{
"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": []
}
]
}
Tindak lanjut aplikasi klien saat pertanyaan memiliki skor yang sama
Aplikasi klien Anda menampilkan pertanyaan dengan opsi bagi pengguna untuk memilih satu pertanyaan yang paling mewakili niat mereka.
Setelah pengguna memilih salah satu pertanyaan yang ada, aplikasi klien mengirimkan pilihan pengguna sebagai umpan balik menggunakan API QnA Maker Train. Umpan balik ini menyelesaikan perulangan umpan balik pembelajaran aktif.
Train API
Umpan balik pembelajaran aktif dikirim ke QnA Maker dengan permintaan Train API POST. Tanda tangan API adalah:
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}]}
Properti permintaan HTTP | Nama | Jenis | Tujuan |
---|---|---|---|
Parameter rute URL | ID pangkalan pengetahuan | string | GUID untuk pangkalan pengetahuan Anda. |
Subdomain kustom | Nama sumber daya QnAMaker | string | Nama sumber daya digunakan sebagai subdomain kustom untuk QnA Maker Anda. Ini tersedia di halaman Pengaturan setelah Anda menerbitkan pangkalan pengetahuan. Ini terdaftar sebagai host . |
Header | Jenis Konten | string | Jenis media isi yang dikirim ke API. Nilai defaultnya adalah: application/json |
Header | Authorization | string | Kunci titik akhir Anda (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). |
Isi Pos | Objek JSON | JSON | Umpan balik pelatihan |
Isi JSON memiliki beberapa pengaturan:
Properti isi JSON | Jenis | Tujuan |
---|---|---|
feedbackRecords |
array | Daftar umpan balik. |
userId |
string | ID pengguna orang yang menerima pertanyaan yang disarankan. Format ID pengguna terserah Anda. Misalnya, alamat email dapat menjadi ID pengguna yang valid di arsitektur Anda. Opsional. |
userQuestion |
string | Teks yang tepat dari kueri pengguna. Wajib diisi. |
qnaID |
angka | ID pertanyaan, ditemukan dalam respons GenerateAnswer. |
Contoh isi JSON terlihat seperti:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "<question-text>",
"qnaId": 1
}
]
}
Respons yang berhasil menampilkan status 204 dan tidak ada isi respons JSON.
Mengumpulkan banyak data umpan balik ke dalam satu panggilan
Di aplikasi sisi klien, seperti bot, Anda dapat menyimpan data, lalu mengirim banyak data dalam satu isi JSON dalam array feedbackRecords
.
Contoh isi JSON terlihat seperti:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "How do I ...",
"qnaId": 1
},
{
"userId": "2",
"userQuestion": "Where is ...",
"qnaId": 40
},
{
"userId": "3",
"userQuestion": "When do I ...",
"qnaId": 33
}
]
}
Kode sampel kerangka kerja bot
Kode kerangka kerja bot Anda perlu memanggil Train API, jika kueri pengguna harus digunakan untuk pembelajaran aktif. Ada dua potongan kode untuk ditulis:
- Menentukan apakah kueri harus digunakan untuk pembelajaran aktif
- Kirim kueri kembali ke API QnA Maker Train untuk pembelajaran aktif
Dalam sampel Azure Bot, kedua aktivitas ini telah diprogram.
Contoh kode C# untuk Train API dengan Bot Framework 4.x
Kode berikut menggambarkan cara mengirim informasi kembali ke QnA Maker dengan Train API.
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();
}
}
}
Contoh Node.js untuk Train API dengan Bot Framework 4.x
Kode berikut menggambarkan cara mengirim informasi kembali ke QnA Maker dengan Train API.
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);
}
Praktik terbaik
Untuk praktik terbaik saat menggunakan pembelajaran aktif, lihat Praktik terbaik.