Aktív tanulásra vonatkozó javasolt kérdések elfogadása a tudásbázis

Megjegyzés

A QnA Maker szolgáltatás 2025. március 31-én megszűnik. A kérdés- és válaszképesség újabb verziója már elérhető az Azure AI Language részeként. A Language Service-ben található kérdések megválaszolási képességeiről a kérdések megválaszolása című témakörben olvashat. 2022. október 1-től nem hozhat létre új QnA Maker-erőforrásokat. A meglévő QnA Maker-tudásbázisok kérdésre való migrálásával kapcsolatos információkért tekintse meg a migrálási útmutatót.

Az Active Learning a javaslat jóváhagyása után módosítja a tudásbázist vagy a keresőszolgáltatást, majd menti és betanulja őket. Ha jóváhagyja a javaslatot, az alternatív kérdésként lesz hozzáadva.

Az aktív tanulás bekapcsolása

A javasolt kérdések megtekintéséhez be kell kapcsolnia az aktív tanulást a QnA Maker-erőforráshoz.

Javasolt kérdések megtekintése

  1. A javasolt kérdések megtekintéséhez a Szerkesztés tudásbázis lapon válassza a Beállítások megtekintése, majd az Aktív tanulási javaslatok megjelenítése lehetőséget. Ez a beállítás le lesz tiltva, ha egyik kérdés- és válaszpárhoz sem érkezik javaslat.

    A portál Szerkesztés szakaszában válassza a Javaslatok megjelenítése lehetőséget az aktív tanulás új kérdés alternatíváinak megtekintéséhez.

  2. Szűrje a tudásbázis kérdés- és válaszpárokkal, hogy csak javaslatokat jelenítsen meg a Szűrés javaslatok szerint lehetőség kiválasztásával.

    A Szűrés javaslatok szerint kapcsolóval csak az aktív tanulás javasolt kérdés alternatíváit tekintheti meg.

  3. Minden QnA-pár egy pipával javasolja az új kérdések alternatíváit, hogy fogadja el a kérdést, vagy elutasítsa x a javaslatokat. Jelölje be a pipát a kérdés hozzáadásához.

    Válassza ki vagy utasítsa el az aktív tanulás javasolt kérdés alternatíváit a zöld pipa vagy a piros törlési jel kiválasztásával.

    Az összes javaslat hozzáadásához vagy törléséhez válassza az Összes hozzáadása vagy az Összes elvetése lehetőséget a környezeti eszköztáron.

  4. A tudásbázis módosításainak mentéséhez válassza a Mentés és betanítása lehetőséget.

  5. Válassza a Közzététel lehetőséget, hogy a módosítások elérhetők legyenek a GenerateAnswer API-ból.

    Ha 5 vagy több hasonló lekérdezés van fürtözve, 30 percenként, a QnA Maker javaslatot tesz a másodlagos kérdések elfogadására vagy elutasítására.

Az aktív tanulási javaslatok mentése az exportált tudásbázis

Ha az alkalmazás aktív tanulást engedélyez, és exportálja az alkalmazást, a SuggestedQuestions tsv-fájl oszlopa megőrzi az aktív tanulási adatokat.

Az SuggestedQuestions oszlop egy JSON-objektum, amely implicit, autosuggestedés explicit usersuggested visszajelzéseket tartalmaz. Erre a JSON-objektumra példa egyetlen felhasználó által elküldött kérdés help esetében a következő:

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

Az alkalmazás újraimportálásakor az aktív tanulás továbbra is gyűjt információkat, és javaslatokat tesz a tudásbázis.

Architektúrafolyamat a GenerateAnswer használatához és API-k robotból történő betanítása

A robotnak vagy más ügyfélalkalmazásnak az alábbi architektúrafolyamatot kell használnia az aktív tanulás használatához:

  1. A robot a GenerateAnswer API-val kapja meg a választ a tudásbázis, és a top tulajdonsággal számos választ kaphat.

  2. A robot explicit visszajelzést határoz meg:

    • A saját egyéni üzleti logikáját használva kiszűrheti az alacsony pontszámokat.
    • A robotban vagy az ügyfélalkalmazásban jelenítse meg a felhasználónak adott lehetséges válaszok listáját, és kérje le a felhasználó kiválasztott válaszát.
  3. A robot a kiválasztott választ visszaküldi a QnA Makernek a Train API-val.

A GenerateAnswer-kérelem felső tulajdonságának használatával több egyező választ kaphat

Amikor kérdéseket küld a QnA Makernek, a top JSON-törzs tulajdonsága beállítja a visszaadandó válaszok számát.

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

Használja a score tulajdonságot az üzleti logikával együtt a válaszok listájának lekéréséhez a felhasználó megjelenítéséhez

Amikor az ügyfélalkalmazás (például egy csevegőrobot) megkapja a választ, a rendszer az első 3 kérdést adja vissza. score A tulajdonság használatával elemezheti a pontszámok közelségét. Ezt a közelségi tartományt a saját üzleti logikája határozza meg.

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

Az ügyfélalkalmazás nyomon követése, ha a kérdések hasonló pontszámokkal rendelkeznek

Az ügyfélalkalmazás megjeleníti a kérdéseket, és a felhasználó kiválaszthatja azt az egyetlen kérdést , amely a leginkább megfelel a szándékának.

Miután a felhasználó kiválasztotta a meglévő kérdések egyikét, az ügyfélalkalmazás visszajelzésként küldi el a felhasználó döntését a QnA Maker Train API használatával. Ez a visszajelzés befejezi az aktív tanulási visszajelzési ciklust.

API betanítása

Az aktív tanulási visszajelzéseket a QnA Maker az API POST betanítása kéréssel küldi el. Az API-aláírás a következő:

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-kérelem tulajdonság Név Típus Cél
URL-útvonal paramétere Tudásbázis azonosítója sztring A tudásbázis GUID azonosítója.
Egyéni altartomány QnAMaker-erőforrás neve sztring Az erőforrás neve lesz a QnA Maker egyéni altartománya. Ez a tudásbázis közzététele után a Beállítások lapon érhető el. A listában a hostkövetkező szerepel: .
Fejléc Content-Type sztring Az API-nak küldött törzs médiatípusa. Az alapértelmezett érték a következő: application/json
Fejléc Engedélyezés sztring A végpontkulcs (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Törzs utáni JSON-objektum JSON A betanítási visszajelzés

A JSON-törzs több beállításból áll:

JSON törzstulajdonság Típus Cél
feedbackRecords array Visszajelzések listája.
userId sztring A javasolt kérdéseket elfogadó személy felhasználói azonosítója. A felhasználói azonosító formátuma Önre tartozik. Az e-mail-cím például érvényes felhasználói azonosító lehet az architektúrában. Választható.
userQuestion sztring A felhasználó lekérdezésének pontos szövege. Kötelező.
qnaID szám A kérdés azonosítója a GenerateAnswer válaszban található.

Egy JSON-példatörzs a következőképpen néz ki:

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

A sikeres válasz 204-et ad vissza, és nincs JSON-válasz törzse.

Több visszajelzési rekord egyetlen hívásba való kötegetése

Az ügyféloldali alkalmazásban, például egy robotban tárolhatja az adatokat, majd számos rekordot elküldhet egyetlen JSON-törzsben a feedbackRecords tömbben.

Egy JSON-példatörzs a következőképpen néz ki:

{
    "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-mintakód

A robot keretrendszerkódjának meg kell hívnia a Train API-t, ha a felhasználó lekérdezését aktív tanuláshoz kell használni. Két kódrészletet kell írni:

  • Annak meghatározása, hogy a lekérdezést aktív tanuláshoz kell-e használni
  • Lekérdezés visszaküldése a QnA Maker Train API-nak aktív tanuláshoz

Az Azure Bot-mintában mindkét tevékenység be van programozva.

Példa C#-kód a Train API-ra a Bot Framework 4.x használatával

Az alábbi kód bemutatja, hogyan küldhet vissza információkat a QnA Makernek a Train API-val.

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élda Node.js Kód a Train API-hoz a Bot Framework 4.x használatával

Az alábbi kód bemutatja, hogyan küldhet vissza információkat a QnA Makernek a Train API-val.

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

Ajánlott eljárások

Az aktív tanulás használatakor ajánlott eljárásokért lásd: Ajánlott eljárások.

Következő lépések