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
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.
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.
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ítsax
a javaslatokat. Jelölje be a pipát a kérdés hozzáadásához.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.
A tudásbázis módosításainak mentéséhez válassza a Mentés és betanítása lehetőséget.
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:
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.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.
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 host kö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.