Přijetí otázek navržených k aktivnímu učení v znalostní báze

Poznámka

Služba QnA Maker se k 31. březnu 2025 vyřadí z provozu. V rámci jazyka Azure AI je teď k dispozici novější verze funkce otázek a odpovědí. Informace o možnostech odpovídání na otázky v rámci služby jazyka najdete v článku o odpovídání na otázky. Od 1. října 2022 nebudete moct vytvářet nové prostředky služby QnA Maker. Informace o migraci stávajících znalostních bází služby QnA Maker na zodpovězení otázek najdete v průvodci migrací.

Funkce Active Learning změní znalostní bázi nebo vyhledávací službu poté, co návrh schválíte, a pak ho uložíte a vytrénujete. Pokud návrh schválíte, přidá se jako alternativní otázka.

Aktivace aktivního učení

Pokud chcete zobrazit navrhované otázky, musíte pro prostředek služby QnA Maker zapnout aktivní učení .

Zobrazení navrhovaných otázek

  1. Pokud chcete zobrazit navrhované otázky, na stránce Upravit znalostní báze vyberte Možnosti zobrazení a pak vyberte Zobrazit návrhy aktivního učení. Tato možnost bude zakázaná, pokud neexistují žádné návrhy pro žádný z párů otázek a odpovědí.

    V části Upravit na portálu vyberte Zobrazit návrhy, aby se zobrazily nové alternativy otázek aktivní výuky.

  2. Výběrem možnosti Filtrovat podle návrhů vyfiltrujte znalostní báze s páry otázek a odpovědí tak, aby se zobrazovaly jenom návrhy.

    Pomocí přepínače Filtrovat podle návrhů zobrazíte jenom navrhované alternativy otázek pro aktivní výuku.

  3. Každá dvojice otázek a odpovědí navrhne nové alternativy otázek se zaškrtnutím , aby bylo možné otázku přijmout, nebo x odmítnout návrhy. Pokud chcete přidat otázku, vyberte značku zaškrtnutí.

    Výběrem zelené značky zaškrtnutí nebo červené značky odstranění vyberte nebo odmítněte navrhované alternativy otázek aktivního učení.

    Všechny návrhy můžete přidat nebo odstranit tak, že na kontextovém panelu nástrojů vyberete Přidat vše nebo Odmítnout vše.

  4. Vyberte Uložit a natrénovat a uložte změny do znalostní báze.

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

    Když se seskupí 5 nebo více podobných dotazů, QnA Maker každých 30 minut navrhne alternativní otázky, které můžete přijmout nebo odmítnout.

Návrhy aktivního učení se ukládají do exportovaných znalostní báze

Když je v aplikaci povolené aktivní učení a exportujete ji, SuggestedQuestions sloupec v souboru tsv zachová aktivní data učení.

Sloupec SuggestedQuestions je objekt JSON obsahující informace implicitní, autosuggesteda explicitní zpětné vazby usersuggested . Příklad tohoto objektu JSON pro jednu otázku odeslanou uživatelem help :

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

Když tuto aplikaci znovu naimportujete, aktivní výuka bude dál shromažďovat informace a doporučovat návrhy pro vaše znalostní báze.

Tok architektury pro použití rozhraní API GenerateAnswer a Train z robota

Robot nebo jiná klientská aplikace by k použití aktivního učení měla používat následující tok architektury:

  1. Robot získá odpověď od znalostní báze pomocí rozhraní GenerateAnswer API a pomocí top vlastnosti získá řadu odpovědí.

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

    • Pomocí vlastní obchodní logiky odfiltrujte nízká skóre.
    • V robotovi nebo klientské aplikaci zobrazte seznam možných odpovědí pro uživatele a získejte jeho vybranou odpověď.
  3. Robot odešle vybranou odpověď zpět do služby QnA Maker pomocí rozhraní Train API.

Pomocí vlastnosti top v požadavku GenerateAnswer získáte několik odpovídajících odpovědí.

Když QnA Maker odešle dotaz k odpovědi, vlastnost textu JSON nastaví počet odpovědí, top které se mají vrátit.

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

Použití vlastnosti score spolu s obchodní logikou k získání seznamu odpovědí k zobrazení uživatele

Když klientská aplikace (například chatbot) obdrží odpověď, vrátí se 3 hlavní otázky. score Pomocí vlastnosti analyzujte vzdálenost mezi skóre. Tento rozsah vzdálenosti je určen 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": []
        }
    ]
}

Následné kroky v klientských aplikacích v případech, kdy otázky mají podobné skóre

Vaše klientská aplikace zobrazí otázky s možností, aby uživatel vybral jednu otázku , která nejvíce vyjadřuje jeho záměr.

Jakmile uživatel vybere jednu z existujících otázek, klientská aplikace odešle výběr uživatele jako zpětnou vazbu pomocí rozhraní API pro trénování služby QnA Maker. Tato zpětná vazba dokončí smyčku aktivního učení zpětné vazby.

Rozhraní Train API

Zpětná vazba k aktivnímu učení se odešle do služby QnA Maker s požadavkem Post pro tréning rozhraní API. Podpis rozhraní API je:

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 QnAMakeru řetězec Název prostředku se použije jako vlastní subdoména služby QnA Maker. Tato možnost 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 odeslaného do rozhraní API. Výchozí hodnota je: application/json
Hlavička Autorizace řetězec Váš klíč koncového bodu (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Text příspěvku Objekt JSON JSON Zpětná vazba k trénování

Text JSON má několik nastavení:

Vlastnost textu 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 na vás. 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, které se nachází v odpovědi GenerateAnswer.

Příklad textu JSON vypadá takto:

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

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

Dávkování mnoha záznamů zpětné vazby do jednoho volání

V aplikaci na straně klienta, jako je robot, můžete data uložit a pak odeslat mnoho záznamů v jednom těle JSON v feedbackRecords poli.

Příklad textu 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
        }
    ]
}

Ukázkový kód služby Bot Framework

Kód architektury robota musí volat rozhraní API pro trénování, pokud se má dotaz uživatele použít k aktivnímu učení. Existují dvě části kódu, které je potřeba napsat:

  • Určení, jestli má být dotaz použit pro aktivní výuku
  • Odeslání dotazu zpět do rozhraní API pro trénování služby QnA Maker pro aktivní výuku

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

Příklad kódu jazyka C# pro trénování rozhraní API pomocí Bot Frameworku 4.x

Následující kód ukazuje, jak odeslat informace zpět do služby QnA Maker pomocí rozhraní API pro trénovací službu.

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 kódu Node.js pro trénování rozhraní API s využitím Bot Frameworku 4.x

Následující kód ukazuje, jak odeslat informace zpět do služby QnA Maker pomocí rozhraní API pro trénovací službu.

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