Přijetí dotazů na aktivní učení ve znalostní bázi Knowledge Base

Poznámka

K dispozici je nová verze otázky a funkce pro příjem jako součást služby Azure pro rozpoznávání jazyka. Další informace najdete v tématu dokumentace k jazykovým službám Azure pro rozpoznávání. Možnosti pro zodpovězení otázek v rámci jazykové služby najdete v tématu s odpovědí na otázky. Informace o migraci stávajících základů znalostní báze najdete v Průvodci migrací.

služba Active Učení mění znalostní bázi nebo Search Service po schválení návrhu a pak ho uloží a vyškolí. Pokud schválíte návrh, přidá se jako alternativní otázka.

Aktivace aktivního učení

Chcete-li zobrazit navrhované otázky, je nutné zapnout službu Active Learning pro váš QnA maker prostředek.

Zobrazit navrhované otázky

  1. Chcete-li zobrazit navrhované otázky, na stránce Upravit znalostní bázi vyberte možnost Zobrazit možnosti a pak vyberte možnost Zobrazit návrhy aktivního učení. Tato možnost bude zakázána, pokud nejsou k dispozici žádné návrhy pro všechny páry otázek a odpovědí.

    V části Upravit na portálu vyberte možnost Zobrazit návrhy, aby se zobrazily nové alternativy otázek aktivního učení.

  2. Vyfiltrujte znalostní bázi dvojice otázek a odpovědí, abyste zobrazili jenom návrhy, a to tak, že vyberete filtrovat podle návrhů.

    Pomocí přepínače filtrovat podle návrhů můžete zobrazit jenom navrhované alternativní otázky pro aktivní učení.

  3. Každý pár QnA navrhuje nové alternativy dotazů s zaškrtnutím, k přijetí otázky nebo x k zamítnutí návrhů. Kliknutím na značku zaškrtnutí přidejte otázku.

    Zaškrtněte nebo zrušte výběr alternativních otázek pro aktivní učení, a to tak, že vyberete zelenou značku zaškrtnutí nebo červenou značku DELETE.

    Všechny návrhy můžete přidat nebo odstranit výběrem možnosti Přidat vše nebo Odmítnout vše na kontextovém panelu nástrojů.

  4. Kliknutím na Uložit a výuka uložte změny ve znalostní bázi.

  5. Vyberte publikovat , pokud chcete, aby byly změny dostupné z rozhraní GenerateAnswer API.

    V případě, že je 5 nebo více podobných dotazů clusterovaných, QnA Maker každých 30 minut návrhy alternativních otázek, které můžete přijmout nebo odmítnout.

Aktivní návrhy kurzů se ukládají do exportované znalostní báze.

Když má vaše aplikace aktivní učení a exportujete aplikaci, SuggestedQuestions sloupec v souboru TSV uchová aktivní výuková data.

SuggestedQuestionsSloupec je objekt JSON s informacemi o implicitní, autosuggested a explicitní usersuggested zpětné vazbě. Příkladem tohoto objektu JSON pro jednu otázku odeslanou uživatelem help je:

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

Když znovu naimportujete tuto aplikaci, aktivní učení nadále shromažďuje informace a doporučuje návrhy vaší znalostní báze.

Postup architektury pro používání rozhraní API pro GenerateAnswer a vlak z robota

Robot nebo jiná klientská aplikace by se měli pomocí tohoto toku architektury použít k používání aktivního učení:

  1. Robot získá odpověď ze znalostní báze s rozhraním API GenerateAnswer a pomocí top vlastnosti získá několik odpovědí.

  2. Robot určí explicitní zpětnou vazbu:

    • Pomocí vlastní obchodní logikyvyfiltrujte nízká skóre.
    • V robotu nebo klientské aplikaci můžete zobrazit seznam možných odpovědí na uživatele a získat zvolenou odpověď uživatele.
  3. Robot pošle vybranou odpověď zpátky do QnA maker s využitím rozhraní API pro vlaky.

Použijte vlastnost Top v žádosti GenerateAnswer k získání několika vyhovujících odpovědí.

Při odesílání otázky QnA Maker pro odpověď top nastaví vlastnost těla zprávy JSON počet odpovědí, které se mají vrátit.

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

K získání seznamu odpovědí pro zobrazení uživatele použijte vlastnost skóre spolu s obchodní logikou.

Když klientská aplikace (například robota v programu chat) obdrží odpověď, vrátí se 3 Nejčastější dotazy. Vlastnost slouží score k analýze blízkosti výsledků. Tento rozsah blízkosti je určený vaší vlastní obchodní logikou.

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

Sledování klientských aplikací, když mají dotazy podobné skóre

Klientská aplikace zobrazí otázky s možností, jak uživateli vybrat jedinou otázku , která nejvíc představuje svůj záměr.

Jakmile uživatel vybere jednu z existujících otázek, klientská aplikace pošle možnost výběru uživatele jako zpětnou vazbu pomocí rozhraní QnA Maker API pro analýzu. Tato zpětná vazba dokončí smyčku aktivního výukového zpětné vazby.

Rozhraní Train API

Zpětná vazba k aktivnímu učení se pošle QnA Maker s žádostí POST API pro vlak. Podpis rozhraní API:

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}]}
Vlastnost požadavku HTTP Název Typ Účel
Parametr trasy adresy URL ID znalostní báze řetězec Identifikátor GUID znalostní báze
Vlastní subdoména Název prostředku Qnamakerem řetězec Název prostředku se používá jako vlastní subdoména pro váš QnA Maker. tato stránka je k dispozici na stránce Nastavení po publikování znalostní báze. Je uveden jako host .
Hlavička Typ obsahu řetězec Typ média těla odesílaného do rozhraní API Výchozí hodnota je: application/json
Hlavička Autorizace řetězec Klíč koncového bodu (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Tělo příspěvku Objekt JSON JSON Váš názor na školení

Tělo JSON má několik nastavení:

Vlastnost těla zprávy JSON Typ Účel
feedbackRecords array Seznam zpětné vazby
userId řetězec ID uživatele osoby, která přijímá navrhované otázky. Formát ID uživatele je až vám. Například e-mailová adresa může být platným ID uživatele ve vaší architektuře. Nepovinný parametr.
userQuestion řetězec Přesný text dotazu uživatele. Povinná hodnota.
qnaID číslo ID otázky nalezené v odpovědi GenerateAnswer

Ukázkový text JSON vypadá takto:

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

Úspěšná odpověď vrátí stav 204 a text odpovědi JSON.

Batch mnoho záznamů zpětné vazby do jednoho volání

V aplikaci na straně klienta, jako je robot, můžete ukládat data a potom do pole poslat mnoho záznamů v jednom těle JSON feedbackRecords .

Ukázkový text JSON vypadá takto:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "How do I ...",
            "qnaId": 1
        },
        {
            "userId": "2",
            "userQuestion": "Where is ...",
            "qnaId": 40
        },
        {
            "userId": "3",
            "userQuestion": "When do I ...",
            "qnaId": 33
        }
    ]
}

Vzorový kód pro bot Framework

Pokud se má dotaz uživatele použít pro aktivní učení, váš kód rozhraní bot Framework musí volat rozhraní API pro analýzu. Existují dva části kódu pro zápis:

  • Určení, jestli se má dotaz použít pro aktivní učení
  • Poslat dotaz zpátky na QnA Maker API pro školení pro aktivní učení

V ukázce Azure botbyly obě tyto aktivity naprogramované.

Příklad kódu jazyka C# pro rozhraní Train API s Bot Framework 4.x

Následující kód ukazuje, jak odeslat informace zpět do QnA Maker pomocí rozhraní 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();
        }
    }
}

Příklad Node.js kódu rozhraní Train API s Bot Framework 4.x

Následující kód ukazuje, jak odeslat informace zpět do QnA Maker pomocí rozhraní 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);
}

Osvědčené postupy

Osvědčené postupy při používání aktivního učení najdete v tématu Osvědčené postupy.

Další kroky