Share via


Voorgestelde vragen voor actief leren accepteren in de Knowledge Base

Notitie

De QnA Maker-service wordt op 31 maart 2025 buiten gebruik gesteld. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language. Zie vraagantwoording voor vragen in de Language Service voor het beantwoorden van vragen. Vanaf 1 oktober 2022 kunt u geen nieuwe QnA Maker-resources maken. Raadpleeg de migratiehandleiding voor informatie over het migreren van bestaande QnA Maker-knowledge bases om vragen te beantwoorden.

Active Learning wijzigt de Knowledge Base of Search Service nadat u de suggestie hebt goedgekeurd en slaat en traint. Als u de suggestie goedkeurt, wordt deze toegevoegd als een alternatieve vraag.

Actief leren inschakelen

Als u voorgestelde vragen wilt zien, moet u actief leren inschakelen voor uw QnA Maker-resource.

Voorgestelde vragen weergeven

  1. Als u de voorgestelde vragen wilt zien, selecteert u op de pagina Knowledge Base bewerken de optie Weergaveopties en selecteert u Actieve leersuggesties weergeven. Deze optie wordt uitgeschakeld als er geen suggesties aanwezig zijn voor een van de vraag- en antwoordparen.

    Selecteer In de sectie Bewerken van de portal suggesties weergeven om de nieuwe vraagalternatieven van de actieve training te bekijken.

  2. Filter de knowledge base met vraag- en antwoordparen om alleen suggesties weer te geven door Filter by Suggestions te selecteren.

    Gebruik de wisselknop Filteren op suggesties om alleen de voorgestelde vraagalternatieven van de actieve training weer te geven.

  3. Elk QnA-paar stelt de nieuwe vraagalternatieven voor met een vinkje, om de vraag te accepteren of om x de suggesties af te wijzen. Selecteer het vinkje om de vraag toe te voegen.

    Selecteer of negeer de voorgestelde vraagalternatieven van actief leren door het groene vinkje of het rode verwijderteken te selecteren.

    U kunt alle suggesties toevoegen of verwijderen door alles toevoegen of alles negeren te selecteren op de contextuele werkbalk.

  4. Selecteer Opslaan en trainen om de wijzigingen in de Knowledge Base op te slaan.

  5. Selecteer Publiceren om toe te staan dat de wijzigingen beschikbaar zijn via de GenerateAnswer-API.

    Wanneer 5 of meer vergelijkbare query's zijn geclusterd, worden in QnA Maker elke 30 minuten de alternatieve vragen voorgesteld die u kunt accepteren of weigeren.

Actieve leersuggesties worden opgeslagen in de geëxporteerde Knowledge Base

Wanneer uw app actief leren heeft ingeschakeld en u de app exporteert, behoudt de SuggestedQuestions kolom in het tsv-bestand de actieve leergegevens.

De SuggestedQuestions kolom is een JSON-object met informatie over impliciete, autosuggesteden expliciete usersuggested feedback. Een voorbeeld van dit JSON-object voor één door de gebruiker ingediende vraag help is:

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

Wanneer u deze app opnieuw invoert, blijft het actieve leren informatie verzamelen en suggesties voor uw Knowledge Base aanbevelen.

Architectuurstroom voor het gebruik van GenerateAnswer en Train API's van een bot

Een bot of een andere clienttoepassing moet de volgende architectuurstroom gebruiken om actief leren te gebruiken:

  1. Bot haalt het antwoord op uit de knowledge base met de GenerateAnswer-API, met behulp van de top eigenschap om een aantal antwoorden te krijgen.

  2. Bot bepaalt expliciete feedback:

    • Filter lage scores met behulp van uw eigen aangepaste bedrijfslogica.
    • Geef in de bot of clienttoepassing een lijst weer met mogelijke antwoorden op de gebruiker en haal het geselecteerde antwoord van de gebruiker op.
  3. Bot stuurt het geselecteerde antwoord terug naar QnA Maker met de Train-API.

Gebruik de bovenste eigenschap in de GenerateAnswer-aanvraag om verschillende overeenkomende antwoorden te krijgen

Wanneer u een vraag indient bij QnA Maker voor een antwoord, stelt de top eigenschap van de JSON-hoofdtekst het aantal antwoorden in dat moet worden geretourneerd.

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

Gebruik de score-eigenschap samen met bedrijfslogica om een lijst met antwoorden weer te geven om de gebruiker weer te geven

Wanneer de clienttoepassing (zoals een chatbot) het antwoord ontvangt, worden de drie belangrijkste vragen geretourneerd. Gebruik de score eigenschap om de nabijheid tussen scores te analyseren. Dit nabijheidsbereik wordt bepaald door uw eigen bedrijfslogica.

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

Opvolgen van clienttoepassingen wanneer vragen vergelijkbare scores hebben

Uw clienttoepassing geeft de vragen weer met een optie voor de gebruiker om de ene vraag te selecteren die het meest overeenkomt met hun intentie.

Zodra de gebruiker een van de bestaande vragen heeft geselecteerd, verzendt de clienttoepassing de keuze van de gebruiker als feedback met behulp van de QnA Maker Train-API. Deze feedback voltooit de actieve leerfeedbacklus.

API trainen

Actieve leerfeedback wordt verzonden naar QnA Maker met de POST-aanvraag voor de Train API. De API-handtekening 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-aanvraageigenschap Name Type Doel
URL-routeparameter Id van de Knowledge Base tekenreeks De GUID voor uw Knowledge Base.
Aangepast subdomein QnAMaker-resourcenaam tekenreeks De resourcenaam wordt gebruikt als het aangepaste subdomein voor uw QnA Maker. Dit is beschikbaar op de pagina Instellingen nadat u de Knowledge Base hebt gepubliceerd. Het wordt vermeld als de host.
Koptekst Inhoudstype tekenreeks Het mediatype van de hoofdtekst die naar de API is verzonden. De standaardwaarde is: application/json
Koptekst Autorisatie tekenreeks Uw eindpuntsleutel (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Hoofdtekst posten JSON-object JSON De trainingsfeedback

De JSON-hoofdtekst heeft verschillende instellingen:

JSON-hoofdteksteigenschap Type Doel
feedbackRecords matrix Lijst met feedback.
userId tekenreeks De gebruikers-id van de persoon die de voorgestelde vragen accepteert. De indeling van de gebruikers-id is aan u. Een e-mailadres kan bijvoorbeeld een geldige gebruikers-id in uw architectuur zijn. Optioneel.
userQuestion tekenreeks Exacte tekst van de query van de gebruiker. Vereist.
qnaID Nummer Id van vraag, gevonden in het antwoord GenerateAnswer.

Een voorbeeld van een JSON-hoofdtekst ziet er als volgt uit:

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

Een geslaagd antwoord retourneert een status van 204 en geen hoofdtekst van het JSON-antwoord.

Batch veel feedbackrecords in één gesprek

In de toepassing aan de clientzijde, zoals een bot, kunt u de gegevens opslaan en vervolgens veel records verzenden in één JSON-hoofdtekst in de feedbackRecords matrix.

Een voorbeeld van een JSON-hoofdtekst ziet er als volgt uit:

{
    "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-voorbeeldcode

Uw botframeworkcode moet de Train-API aanroepen als de query van de gebruiker moet worden gebruikt voor actief leren. Er zijn twee stukjes code om te schrijven:

  • Bepalen of de query moet worden gebruikt voor actief leren
  • Query terugsturen naar de QnA Maker Train-API voor actief leren

In het Azure Bot-voorbeeld zijn beide activiteiten geprogrammeerd.

Voorbeeld van C#-code voor train-API met Bot Framework 4.x

De volgende code illustreert hoe u informatie naar QnA Maker verzendt met de 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();
        }
    }
}

Voorbeeld van Node.js code voor train-API met Bot Framework 4.x

De volgende code illustreert hoe u informatie naar QnA Maker verzendt met de 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);
}

Aanbevolen procedures

Zie Aanbevolen procedures voor aanbevolen procedures bij het gebruik van actief leren.

Volgende stappen