Acceptera föreslagna frågor för aktiv inlärning i kunskapsbasen
Anteckning
En nyare version av funktionen för frågor och svar är nu tillgänglig som en del av Azure Cognitive Service for Language. Mer information finns i Azure Cognitive Service för språkdokumentation. Om du vill ha funktioner för frågesvar i Language Service kan du se frågesvar . Information om hur du migrerar befintliga kunskapsbaser finns i migreringsguiden.
Active Learning ändrar kunskapsbasen eller söktjänsten när du har godkänt förslaget och sparar och tränar. Om du godkänner förslaget läggs det till som en alternativ fråga.
Aktivera aktiv inlärning
Om du vill se föreslagna frågor måste du aktivera aktiv inlärning för din QnA Maker resurs.
Visa föreslagna frågor
Om du vill se de föreslagna frågorna går du till sidan Redigera kunskapsbas, väljer Visa alternativ och sedan Visa aktiva utbildningsförslag. Det här alternativet inaktiveras om det inte finns några förslag på något av paren med frågor och svar.
Filtrera kunskapsbasen med par med frågor och svar för att endast visa förslag genom att välja Filtrera efter förslag.
Varje QnA-par föreslår de nya frågealternativen med en bockmarkering, , för att
✔acceptera frågan eller en för att avvisaxförslagen. Välj bockmarkeringen för att lägga till frågan.Du kan lägga till eller ta bort alla förslag genom att välja Lägg till alla eller Avvisa alla i det sammanhangsbaserade verktygsfältet.
Välj Spara och träna för att spara ändringarna i kunskapsbasen.
Välj Publicera för att tillåta att ändringarna är tillgängliga från API:et GenerateAnswer.
När fem eller fler liknande frågor grupperas var 30:e minut föreslår QnA Maker alternativa frågor som du kan godkänna eller avvisa.
Förslag på aktiv inlärning sparas i den exporterade kunskapsbasen
När din app har aktiv inlärning aktiverad och du exporterar appen behåller kolumnen i SuggestedQuestions tsv-filen aktiva inlärningsdata.
Kolumnen SuggestedQuestions är ett JSON-objekt med information om autosuggested implicit, och explicit usersuggested feedback. Ett exempel på det här JSON-objektet för en enskild användarskickade fråga help är:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
När du importerar om den här appen fortsätter den aktiva inlärningen att samla in information och rekommendera förslag för din kunskapsbas.
Arkitekturflöde för att använda GenerateAnswer och träna API:er från en robot
En robot eller ett annat klientprogram bör använda följande arkitekturflöde för att använda aktiv inlärning:
Roboten får svaret från kunskapsbasen med API:et GenerateAnswer och använder egenskapen för att få ett antal
topsvar.Roboten fastställer explicit feedback:
- Filtrera bort låga poäng med hjälp avdin egen anpassade affärslogik.
- I roboten eller klientprogrammet visar du en lista över möjliga svar till användaren och hämtar användarens valda svar.
Roboten skickar valt svar tillbaka till QnA Maker med API:et Train.
Använd den översta egenskapen i generateAnswer-begäran för att få flera matchande svar
När du skickar en fråga QnA Maker att få ett svar anger egenskapen för top JSON-brödtexten antalet svar som ska returneras.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Använd poängegenskapen tillsammans med affärslogik för att hämta en lista över svar för att visa användaren
När klientprogrammet (till exempel en chattrobot) får svaret returneras de tre vanligaste frågorna. Använd egenskapen score för att analysera närhet mellan poäng. Det här närhetsintervallet bestäms av din egen affärslogik.
{
"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": []
}
]
}
Uppföljning av klientprogram när frågor har liknande poäng
Klientprogrammet visar frågorna med ett alternativ för användaren att välja den enskilda fråga som mest representerar användarens avsikt.
När användaren har valt en av de befintliga frågorna skickar klientprogrammet användarens val som feedback med hjälp av QnA Maker Train API. Den här feedbacken slutför feedbackslingan för aktiv inlärning.
Tränings-API
Feedback om aktiv inlärning skickas till QnA Maker med BEGÄRAN om att träna API:et. API-signaturen är:
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}]}
| Egenskap för HTTP-begäran | Namn | Typ | Syfte |
|---|---|---|---|
| Url-vägparameter | Kunskapsbas-ID | sträng | GUID för kunskapsbasen. |
| Anpassad underdomän | QnAMaker-resursnamn | sträng | Resursnamnet används som den anpassade underdomänen för din QnA Maker. Detta är tillgängligt på Inställningar när du har publicerat kunskapsbasen. Den visas som host . |
| Huvud | Content-Type | sträng | Medietypen för brödtexten som skickas till API:et. Standardvärdet är: application/json |
| Huvud | Auktorisering | sträng | Din slutpunktsnyckel (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). |
| Inläggstext | JSON-objekt | JSON | Feedback om utbildningen |
JSON-brödtexten har flera inställningar:
| JSON-brödtextegenskap | Typ | Syfte |
|---|---|---|
feedbackRecords |
matris | Lista över feedback. |
userId |
sträng | Användar-ID för den person som godkänner de föreslagna frågorna. Användar-ID-formatet är upp till dig. En e-postadress kan till exempel vara ett giltigt användar-ID i din arkitektur. Valfritt. |
userQuestion |
sträng | Exakt text i användarens fråga. Krävs. |
qnaID |
antal | ID för frågan, som finns i Svaret GenerateAnswer. |
Ett exempel på JSON-brödtext ser ut så här:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "<question-text>",
"qnaId": 1
}
]
}
Ett lyckat svar returnerar statusen 204 och ingen JSON-svarstext.
Batcha många feedbackposter i ett enda anrop
I programmet på klientsidan, till exempel en robot, kan du lagra data och sedan skicka många poster i en enda JSON-brödtext i feedbackRecords matrisen.
Ett exempel på JSON-brödtext ser ut så här:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "How do I ...",
"qnaId": 1
},
{
"userId": "2",
"userQuestion": "Where is ...",
"qnaId": 40
},
{
"userId": "3",
"userQuestion": "When do I ...",
"qnaId": 33
}
]
}
Exempelkod för botramverk
Din robotramverkskod måste anropa API:et Train om användarens fråga ska användas för aktiv inlärning. Det finns två koddelar att skriva:
- Avgöra om frågan ska användas för aktiv inlärning
- Skicka tillbaka frågan till api:QnA Maker train för aktiv inlärning
I Azure Bot-exemplethar båda dessa aktiviteter programmerats.
Exempel på C#-kod för Träna API med Bot Framework 4.x
Följande kod illustrerar hur du skickar information tillbaka till QnA Maker med API:et Train.
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();
}
}
}
Exempel Node.js kod för Train API with Bot Framework 4.x
Följande kod illustrerar hur du skickar information tillbaka till QnA Maker med API:et Train.
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);
}
Bästa praxis
Metodtips för aktiv inlärning finns i Metodtips.


