Dela via


Acceptera frågor om aktiv inlärning som föreslås i kunskapsbas

Kommentar

QnA Maker-tjänsten dras tillbaka den 31 mars 2025. En nyare version av fråge- och svarsfunktionen är nu tillgänglig som en del av Azure AI Language. Information om funktioner för frågesvar i språktjänsten finns i svar på frågor. Från och med den 1 oktober 2022 kommer du inte att kunna skapa nya QnA Maker-resurser. Information om hur du migrerar befintliga QnA Maker-kunskapsbas 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 väljer 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 den aktiva inlärningens nya frågealternativ.

  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 alternativ för den aktiva inlärningens föreslagna frågor.

  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 bockmarkeringen för att lägga till frågan.

    Markera eller avvisa alternativ för aktiv inlärnings föreslagna frågor genom att markera 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 kontextuella 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 är tillgängliga från GenerateAnswer-API:et.

    När 5 eller fler liknande frågor klustras, var 30:e minut, föreslår QnA Maker de alternativa frågor 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 feedback usersuggested . Ett exempel på det här JSON-objektet för en enda 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 få en lista med svar för att visa användaren

När klientprogrammet (till exempel en chattrobot) får svaret returneras de tre vanligaste frågorna. Använd egenskapen score för att analysera närheten mellan poängen. 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 Type 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.
Header Innehållstyp sträng Medietypen för brödtexten som skickas till API:et. Standardvärdet är: application/json
Header Auktorisering sträng Slutpunktsnyckeln (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx).
Posta brödtext JSON-objekt JSON Feedback om träning

JSON-brödtexten har flera inställningar:

JSON-brödtextegenskap Typ Syfte
feedbackRecords matris Lista över feedback.
userId sträng Användar-ID för den person som godkänner 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. Obligatoriskt.
qnaID Nummer 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 robotramverkskod måste anropa tränings-API:et om användarens fråga ska användas för aktiv inlärning. Det finns två kodstycken 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 Train API med Bot Framework 4.x

Följande kod visar hur du skickar tillbaka information till QnA Maker med train-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 Node.js kod för Train API med Bot Framework 4.x

Följande kod visar hur du skickar tillbaka information till QnA Maker med train-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