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

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

    Portalın Düzenle bölümünde, etkin öğrenmenin yeni soru alternatiflerini görmek için Önerileri Göster'i seçin.

  2. Önerilere Göre Filtrele'yi seçerek yalnızca önerileri göstermek için bilgi bankası soru ve yanıt çiftleriyle filtreleyin.

    Yalnızca etkin öğrenmenin önerilen soru alternatiflerini görüntülemek için Önerilere göre filtrele iki durumlu düğmesini kullanın.

  3. Her Soru-Cevap çifti, soruyu kabul etmek için onay işareti olan yeni soru alternatiflerini veya önerileri reddetmek için bir x öneride bulunur. Soruyu eklemek için onay işaretini seçin.

    Yeşil onay işaretini veya kırmızı silme işaretini seçerek etkin öğrenmenin önerilen soru alternatiflerini seçin veya reddedin.

    Bağlam araç çubuğunda Tümünü ekle veya Tümünü reddet'i seçerek tüm önerileri ekleyebilir veya silebilirsiniz.

  4. Değişiklikleri bilgi bankası kaydetmek için Kaydet ve Eğit'i seçin.

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

  1. Bot yanıtı GenerateAnswer API'siyle bilgi bankası alır ve bir dizi yanıt almak için özelliğini kullanırtop.

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

Sonraki adımlar