Acceptera föreslagna frågor om aktiv inlärning i kunskapsbas

Anteckning

QnA Maker-tjänsten dras tillbaka den 31 mars 2025. En nyare version av funktionen för frågor och svar är nu tillgänglig som en del av Azure AI Language. Information om funktioner för frågesvar i språktjänsten finns i frågesvar. Från och med den 1 oktober 2022 kan du inte skapa nya QnA Maker-resurser. Information om hur du migrerar befintliga QnA Maker-kunskapsbaser till frågesvar finns i migreringsguiden.

Active Learning ändrar kunskapsbasen eller söktjänsten när du har godkänt förslaget och sparar och tränar sedan. Om du godkänner förslaget läggs det till som en alternativ fråga.

Aktivera aktiv inlärning

Om du vill se föreslagna frågor måste du aktivera aktiv inlärning för din QnA Maker-resurs.

Visa föreslagna frågor

  1. Om du vill se de föreslagna frågorna går du till sidan Redigera kunskapsbas, väljer Visa alternativ och sedan Visa aktiva utbildningsförslag. Det här alternativet inaktiveras om det inte finns några förslag för något av fråge- och svarsparen.

    I avsnittet Redigera i portalen väljer du Visa förslag för att se de nya frågealternativen för den aktiva inlärningen.

  2. Filtrera kunskapsbas med par med frågor och svar om du bara vill visa förslag genom att välja Filtrera efter förslag.

    Använd växlingsknappen Filtrera efter förslag om du bara vill visa den aktiva inlärningens föreslagna frågealternativ.

  3. Varje QnA-par föreslår de nya frågealternativen med en bockmarkering, , för att acceptera frågan eller en x för att avvisa förslagen. Markera kryssmarkeringen för att lägga till frågan.

    Markera eller avvisa alternativ för aktiv inlärnings föreslagna frågor genom att välja den gröna bockmarkeringen eller den röda borttagningsmarkeringen.

    Du kan lägga till eller ta bort alla förslag genom att välja Lägg till alla eller Avvisa alla i det sammanhangsbaserade verktygsfältet.

  4. Välj Spara och träna för att spara ändringarna i kunskapsbas.

  5. Välj Publicera för att tillåta att ändringarna blir tillgängliga från GenerateAnswer-API:et.

    När 5 eller fler liknande frågor är klustrade, var 30:e minut, föreslår QnA Maker de alternativa frågorna som du kan acceptera eller avvisa.

Aktiva inlärningsförslag sparas i den exporterade kunskapsbas

När din app har aktiv inlärning aktiverad och du exporterar appen SuggestedQuestions behåller kolumnen i tsv-filen aktiva inlärningsdata.

Kolumnen SuggestedQuestions är ett JSON-objekt med information om implicit, autosuggested, och explicit usersuggested feedback. Ett exempel på det här JSON-objektet för en enskild användarskickad fråga help är:

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

När du importerar om den här appen fortsätter den aktiva inlärningen att samla in information och rekommendera förslag för din kunskapsbas.

Arkitekturflöde för att använda GenerateAnswer och träna API:er från en robot

En robot eller ett annat klientprogram bör använda följande arkitekturflöde för att använda aktiv inlärning:

  1. Roboten får svaret från kunskapsbas med GenerateAnswer-API:et top med hjälp av egenskapen för att få ett antal svar.

  2. Roboten avgör explicit feedback:

    • Använd din egen anpassade affärslogik och filtrera bort låga poäng.
    • I roboten eller klientprogrammet visar du en lista över möjliga svar till användaren och hämtar användarens valda svar.
  3. Roboten skickar det valda svaret tillbaka till QnA Maker med tränings-API:et.

Använd den översta egenskapen i GenerateAnswer-begäran för att få flera matchande svar

När du skickar en fråga till QnA Maker för ett svar anger top egenskapen för JSON-brödtexten antalet svar som ska returneras.

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

Använd egenskapen score tillsammans med affärslogik för att hämta en lista över svar för att visa användaren

När klientprogrammet (till exempel en chattrobot) tar emot svaret returneras de tre vanligaste frågorna. Använd egenskapen score för att analysera närheten mellan poäng. Det här närhetsintervallet bestäms av din egen affärslogik.

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

Uppföljning av klientprogram när frågor har liknande poäng

Klientprogrammet visar frågorna med ett alternativ för användaren att välja den enda fråga som mest representerar deras avsikt.

När användaren har valt en av de befintliga frågorna skickar klientprogrammet användarens val som feedback med hjälp av QnA Maker Train API. Den här feedbacken slutför feedbackslingan för aktiv inlärning.

Tränings-API

Feedback om aktiv inlärning skickas till QnA Maker med train API POST-begäran. API-signaturen är:

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}]}
EGENSKAPEN HTTP-begäran Namn Typ Syfte
URL-vägparameter Kunskapsbas-ID sträng GUID för din kunskapsbas.
Anpassad underdomän QnAMaker-resursnamn sträng Resursnamnet används som anpassad underdomän för din QnA Maker. Detta är tillgängligt på sidan Inställningar när du har publicerat kunskapsbas. Den visas som host.
Huvud Content-Type sträng Medietypen för brödtexten som skickas till API:et. Standardvärdet är: application/json
Huvud Auktorisering sträng Slutpunktsnyckeln (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx).
Inläggstext JSON-objekt JSON Träningsfeedback

JSON-brödtexten har flera inställningar:

Egenskap för JSON-brödtext Typ Syfte
feedbackRecords matris Lista över feedback.
userId sträng Användar-ID för den person som accepterar de föreslagna frågorna. Användar-ID-formatet är upp till dig. En e-postadress kan till exempel vara ett giltigt användar-ID i din arkitektur. Valfritt.
userQuestion sträng Exakt text i användarens fråga. Krävs.
qnaID antal ID för frågan finns i GenerateAnswer-svaret.

Ett exempel på en JSON-brödtext ser ut så här:

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

Ett lyckat svar returnerar statusen 204 och ingen JSON-svarstext.

Skicka många feedbackposter till ett enda anrop

I programmet på klientsidan, till exempel en robot, kan du lagra data och sedan skicka många poster i en enda JSON-brödtext i matrisen feedbackRecords .

Ett exempel på en JSON-brödtext ser ut så hä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
        }
    ]
}

Exempelkod för Bot Framework

Din bot framework-kod måste anropa tränings-API:et om användarens fråga ska användas för aktiv inlärning. Det finns två kodavsnitt att skriva:

  • Avgöra om frågan ska användas för aktiv inlärning
  • Skicka tillbaka frågan till QnA Maker Train API för aktiv inlärning

I Azure Bot-exemplet har båda dessa aktiviteter programmerats.

Exempel på C#-kod för att träna API med Bot Framework 4.x

Följande kod illustrerar hur du skickar tillbaka information till QnA Maker med tränings-API:et.

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();
        }
    }
}

Exempel på Node.js kod för att träna API med Bot Framework 4.x

Följande kod illustrerar hur du skickar tillbaka information till QnA Maker med tränings-API:et.

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);
}

Bästa praxis

Metodtips när du använder aktiv inlärning finns i Metodtips.

Nästa steg