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

  1. 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.

    Di bagian Edit portal, pilih Tampilkan Saran untuk melihat alternatif pertanyaan baru pembelajaran aktif.

  2. Filter pangkalan pengetahuan dengan pasangan pertanyaan dan jawaban untuk hanya menampilkan saran dengan memilih Filter menurut Saran.

    Gunakan tombol Filter menurut saran untuk melihat hanya alternatif pertanyaan yang disarankan pembelajaran aktif.

  3. Setiap pasangan tanya jawab menyarankan alternatif pertanyaan baru dengan tanda centang, , untuk menerima pertanyaan atau x untuk menolak saran. Pilih tanda centang untuk menambahkan pertanyaan.

    Pilih atau tolak alternatif pertanyaan yang disarankan pembelajaran aktif dengan memilih tanda centang hijau atau tanda hapus merah.

    Anda dapat menambahkan atau menghapus semua saran dengan memilih Tambahkan semua atau Tolak semua di toolbar kontekstual.

  4. Pilih Simpan dan Latih untuk menyimpan perubahan ke pangkalan pengetahuan.

  5. 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:

  1. Bot mendapatkan jawaban dari pangkalan pengetahuan dengan GenerateAnswer API, menggunakan properti top untuk mendapatkan sejumlah jawaban.

  2. 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.
  3. 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.

Langkah berikutnya