Akzeptieren von Fragevorschlägen des aktiven Lernens in der WissensdatenbankAccept active learning suggested questions in the knowledge base

Aktives Lernen ändert die Wissensdatenbank oder den Suchdienst, nachdem Sie den Vorschlag bestätigt und dann gespeichert und trainiert haben.Active Learning alters the Knowledge Base or Search Service after you approve the suggestion, then save and train. Wenn Sie den Vorschlag bestätigen, wird er als alternative Frage hinzugefügt.If you approve the suggestion it will be added as an alternate question.

Aktivieren des Features für aktives LernenTurn on active learning

Damit vorgeschlagene Fragen angezeigt werden, müssen Sie für Ihre QnA Maker-Ressource aktives Lernen aktivieren.In order to see suggested questions, you must turn on active learning for your QnA Maker resource.

Anzeigen vorgeschlagener FragenView suggested questions

  1. Um die vorgeschlagenen Fragen anzuzeigen, wählen Sie auf der Seite Bearbeiten der Wissensdatenbank Optionen anzeigen und danach Show active learning suggestions (Vorschläge für aktives Lernen anzeigen) aus.In order to see the suggested questions, on the Edit knowledge base page, select View Options, then select Show active learning suggestions.

    Wählen Sie im Bereich „Bearbeiten“ des Portals „Vorschläge anzeigen“ aus, um die Alternativen für neue Fragen des Features für aktives Lernen anzuzeigen.On the Edit section of the portal, select Show Suggestions in order to see the active learning's new question alternatives.

  2. Filtern Sie die Wissensdatenbank nach Frage-Antwort-Paaren, um nur Vorschläge anzuzeigen, indem Sie Nach Vorschlägen filtern auswählen.Filter the knowledge base with question and answer pairs to show only suggestions by selecting Filter by Suggestions.

    Verwenden Sie den Umschalter „Nach Vorschlägen filtern“, um nur die vom Feature für aktives Lernen vorgeschlagenen Alternativen für Fragen anzuzeigen.Use the Filter by suggestions toggle to view only the active learning's suggested question alternatives.

  3. Bei den einzelnen QnA-Paaren stehen für die vorgeschlagenen neuen Fragealternativen jeweils ein Häkchen () zum Akzeptieren der Frage und ein Kreuz (x) zum Ablehnen der Vorschläge zur Verfügung.Each QnA pair suggests the new question alternatives with a check mark, , to accept the question or an x to reject the suggestions. Aktivieren Sie das Häkchen, um die Frage hinzuzufügen.Select the check mark to add the question.

    Sie können die vorgeschlagenen die vom Feature für aktives Lernen vorgeschlagenen Alternativen für Fragen auswählen oder ablehnen, indem Sie auf das grüne Häkchen oder das rote Löschsymbol klicken.Select or reject active learning's suggested question alternatives by selecting the green check mark or red delete mark.

    Sie können alle Vorschläge hinzufügen oder löschen, indem Sie auf der kontextbezogenen Symbolleiste Alle hinzufügen oder Alle ablehnen auswählen.You can add or delete all suggestions by selecting Add all or Reject all in the contextual toolbar.

  4. Wählen Sie Speichern und trainieren aus, um die Änderungen an der Wissensdatenbank zu speichern.Select Save and Train to save the changes to the knowledge base.

  5. Wählen Sie Veröffentlichen aus, damit die Änderungen über die GenerateAnswer-API zur Verfügung stehen.Select Publish to allow the changes to be available from the GenerateAnswer API.

    Wenn mindestens fünf ähnliche Abfragen gruppiert wurden, schlägt Ihnen QnA Maker alle 30 Minuten die alternativen Fragen vor, die Sie dann akzeptieren oder ablehnen können.When 5 or more similar queries are clustered, every 30 minutes, QnA Maker suggests the alternate questions for you to accept or reject.

Architekturfluss für die Verwendung der GenerateAnswer- und der Trainings-API über einen BotArchitectural flow for using GenerateAnswer and Train APIs from a bot

Von einem Bot oder einer anderen Clientanwendung muss zur Verwendung des aktiven Lernens der folgende Architekturfluss verwendet werden:A bot or other client application should use the following architectural flow to use active learning:

Verwenden der Eigenschaft „top“ in der GenerateAnswer-Anforderung, um mehrere passende Antworten abzurufenUse the top property in the GenerateAnswer request to get several matching answers

Wenn Sie eine Frage zur Beantwortung an QnA Maker senden, legt die Eigenschaft top im JSON-Text die Anzahl der zurückzugebenden Antworten fest.When submitting a question to QnA Maker for an answer, the top property of the JSON body sets the number of answers to return.

{
    "question": "wi-fi",
    "isTest": false,
    "top": 3
}

Verwenden der Eigenschaft „score“ in Kombination mit Geschäftslogik, um eine Liste mit Antworten abzurufen, die dem Benutzer angezeigt werden kannUse the score property along with business logic to get list of answers to show user

Wenn die Clientanwendung (beispielsweise ein Chatbot) die Antwort empfängt, werden die drei relevantesten Fragen zurückgegeben.When the client application (such as a chat bot) receives the response, the top 3 questions are returned. Verwenden Sie die Eigenschaft score, um die Nähe zwischen den Bewertungen zu analysieren.Use the score property to analyze the proximity between scores. Dieser Nähebereich wird durch Ihre eigene Geschäftslogik bestimmt.This proximity range is determined by your own business logic.

{
    "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": []
        }
    ]
}

Nachverfolgung durch die Clientanwendung bei Fragen mit ähnlicher BewertungClient application follow-up when questions have similar scores

Ihre Clientanwendung zeigt die Fragen an und gibt dem Benutzer die Möglichkeit, die am besten geeignete Frage auszuwählen.Your client application displays the questions with an option for the user to select the single question that most represents their intention.

Sobald der Benutzer eine der vorhandenen Fragen ausgewählt hat, sendet die Clientanwendung die Auswahl des Benutzers als Feedback mithilfe der Trainings-API von QnA Maker.Once the user selects one of the existing questions, the client application sends the user's choice as feedback using QnA Maker's Train API. Dieses Feedback vervollständigt die Feedbackschleifen des Features für aktives Lernen.This feedback completes the active learning feedback loop.

Trainings-APITrain API

Feedback zum Feature für aktives Lernen wird über eine POST-Anforderung der Trainings-API an QnA Maker gesendet.Active learning feedback is sent to QnA Maker with the Train API POST request. Die API-Signatur ist wie folgt:The API signature is:

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-AnforderungseigenschaftHTTP request property NameName typeType ZweckPurpose
URL-RoutenparameterURL route parameter Wissensdatenbank-IDKnowledge base ID Zeichenfolgestring GUID der Knowledge BaseThe GUID for your knowledge base.
Benutzerdefinierte UnterdomäneCustom subdomain Name der QnAMaker-RessourceQnAMaker resource name Zeichenfolgestring Der Ressourcenname wird als benutzerdefinierte Unterdomäne für Ihre QnA Maker verwendet.The resource name is used as the custom subdomain for your QnA Maker. Dieser Wert ist auf der Seite „Einstellungen“ verfügbar, nachdem Sie die Wissensdatenbank veröffentlicht haben.This is available on the Settings page after you publish the knowledge base. Sie wird als host aufgeführt.It is listed as the host.
HeaderHeader Content-TypeContent-Type Zeichenfolgestring Medientyp des an die API gesendeten TextsThe media type of the body sent to the API. Der Standardwert ist: application/jsonDefault value is: application/json
HeaderHeader AuthorizationAuthorization Zeichenfolgestring Ihr Endpunktschlüssel (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).Your endpoint key (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
PosttextPost Body JSON-ObjektJSON object JSONJSON Das Feedback zum TrainingThe training feedback

Der JSON-Text verfügt über mehrere Einstellungen:The JSON body has several settings:

JSON-TexteigenschaftJSON body property typeType ZweckPurpose
feedbackRecords arrayarray Liste des FeedbacksList of feedback.
userId Zeichenfolgestring Die Benutzer-ID der Person, die die vorgeschlagenen Fragen akzeptiert.The user ID of the person accepting the suggested questions. Das Format der Benutzer-ID bleibt Ihnen überlassen.The user ID format is up to you. Beispielsweise kann eine E-Mail-Adresse eine in Ihrer Architektur gültige Benutzer-ID sein.For example, an email address can be a valid user ID in your architecture. Optional.Optional.
userQuestion Zeichenfolgestring Exakter Text der Benutzerabfrage.Exact text of the user's query. Erforderlich.Required.
qnaID numbernumber Die ID der Frage in der GenerateAnswer-Antwort.ID of question, found in the GenerateAnswer response.

Ein JSON-Beispieltext sieht folgendermaßen aus:An example JSON body looks like:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "<question-text>",
            "qnaId": 1
        }
    ]
}

Eine erfolgreiche Antwort gibt den Status 204 und einen JSON-Antworttext zurück.A successful response returns a status of 204 and no JSON response body.

Zusammenfassen zahlreicher Feedbackdatensätze in einem einzelnen AufrufBatch many feedback records into a single call

Sie können die Daten in der clientseitigen Anwendung (etwa in einem Bot) speichern und dann mithilfe des Arrays feedbackRecords zahlreiche Datensätze in einem einzelnen JSON-Text senden.In the client-side application, such as a bot, you can store the data, then send many records in a single JSON body in the feedbackRecords array.

Ein JSON-Beispieltext sieht folgendermaßen aus:An example JSON body looks like:

{
    "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-BeispielcodeBot framework sample code

Ihr Bot Framework-Code muss die Trainings-API aufrufen, wenn die Abfrage des Benutzers für aktives Lernen verwendet werden soll.Your bot framework code needs to call the Train API, if the user's query should be used for active learning. Es müssen zwei Codekomponenten geschrieben werden:There are two pieces of code to write:

  • Bestimmen, ob die Abfrage für aktives Lernen verwendet werden sollDetermine if query should be used for active learning
  • Zurücksenden der Abfrage an die Trainings-API für aktives Lernen von QnA MakerSend query back to QnA Maker's Train API for active learning

Im Azure-Botbeispiel wurden beide Aktivitäten programmiert.In the Azure Bot sample, both of these activities have been programmed.

C#-Beispielcode für die Trainings-API mit Bot Framework 4.xExample C# code for Train API with Bot Framework 4.x

Der folgende Code veranschaulicht das Zurücksenden von Informationen an QnA Maker mithilfe der Trainings-API.The following code illustrates how to send information back to QnA Maker with the 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();
        }
    }
}

Node.js-Beispielcode für die Trainings-API mit Bot Framework 4.xExample Node.js code for Train API with Bot Framework 4.x

Der folgende Code veranschaulicht das Zurücksenden von Informationen an QnA Maker mithilfe der Trainings-API.The following code illustrates how to send information back to QnA Maker with the 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);
}

Aktives Lernen wird in der exportierten Wissensdatenbank gespeichert.Active learning is saved in the exported knowledge base

Wenn aktives Lernen für Ihre App aktiviert ist Sie die App exportieren, enthält die Spalte SuggestedQuestions in der TSV-Datei die Daten für aktives Lernen.When your app has active learning enabled, and you export the app, the SuggestedQuestions column in the tsv file retains the active learning data.

Die Spalte SuggestedQuestions ist ein JSON-Objekt mit Informationen zu implizitem (autosuggested) und explizitem (usersuggested) Feedback.The SuggestedQuestions column is a JSON object of information of implicit, autosuggested, and explicit, usersuggested feedback. Ein Beispiel für dieses JSON-Objekt für eine einzelne, vom Benutzer übermittelte Bitte um help ist:An example of this JSON object for a single user-submitted question of help is:

[
    {
        "clusterHead": "help",
        "totalAutoSuggestedCount": 1,
        "totalUserSuggestedCount": 0,
        "alternateQuestionList": [
            {
                "question": "help",
                "autoSuggestedCount": 1,
                "userSuggestedCount": 0
            }
        ]
    }
]

Wenn Sie diese App erneut importieren, erfasst das aktive Lernen weiterhin Informationen und empfiehlt Vorschläge für Ihre Wissensdatenbank.When you reimport this app, the active learning continues to collect information and recommend suggestions for your knowledge base.

Bewährte MethodenBest practices

Bewährte Methoden bei der Verwendung des Features für aktives Lernen finden Sie unter Best Practices.For best practices when using active learning, see Best practices.

Nächste SchritteNext steps