Acceptera frågor om aktiv inlärning som föreslås i kunskapsbas
Kommentar
QnA Maker-tjänsten dras tillbaka den 31 mars 2025. En nyare version av fråge- och svarsfunktionen är nu tillgänglig som en del av Azure AI Language. Information om funktioner för frågesvar i språktjänsten finns i svar på frågor. Från och med den 1 oktober 2022 kommer du inte att kunna skapa nya QnA Maker-resurser. Information om hur du migrerar befintliga QnA Maker-kunskapsbas till frågesvar finns i migreringsguiden.
Active Learning ändrar kunskapsbasen eller söktjänsten när du har godkänt förslaget och sparar och tränar sedan. 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 väljer sedan Visa aktiva utbildningsförslag. Det här alternativet inaktiveras om det inte finns några förslag för något av fråge- och svarsparen.
Filtrera kunskapsbas med par med frågor och svar om du bara vill 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 enx
för att avvisa förslagen. Markera 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 kontextuella verktygsfältet.
Välj Spara och träna för att spara ändringarna i kunskapsbas.
Välj Publicera för att tillåta att ändringarna är tillgängliga från GenerateAnswer-API:et.
När 5 eller fler liknande frågor klustras, var 30:e minut, föreslår QnA Maker de alternativa frågor som du kan acceptera eller avvisa.
Aktiva inlärningsförslag sparas i den exporterade kunskapsbas
När din app har aktiv inlärning aktiverad och du exporterar appen SuggestedQuestions
behåller kolumnen i tsv-filen aktiva inlärningsdata.
Kolumnen SuggestedQuestions
är ett JSON-objekt med information om implicit, autosuggested
, och explicit feedback usersuggested
. Ett exempel på det här JSON-objektet för en enda användarskickad 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 kunskapsbas med GenerateAnswer-API:et
top
med hjälp av egenskapen för att få ett antal svar.Roboten avgör explicit feedback:
- Använd din egen anpassade affärslogik och filtrera bort låga poäng.
- I roboten eller klientprogrammet visar du en lista över möjliga svar till användaren och hämtar användarens valda svar.
Roboten skickar det valda svaret tillbaka till QnA Maker med tränings-API:et.
Använd den översta egenskapen i GenerateAnswer-begäran för att få flera matchande svar
När du skickar en fråga till QnA Maker för ett svar anger top
egenskapen för JSON-brödtexten antalet svar som ska returneras.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Använd egenskapen score tillsammans med affärslogik för att få en lista med 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ärheten mellan poängen. 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 enda fråga som mest representerar deras 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 train API POST-begäran. 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}]}
EGENSKAPEN HTTP-begäran | Namn | Type | Syfte |
---|---|---|---|
URL-vägparameter | Kunskapsbas-ID | sträng | GUID för din kunskapsbas. |
Anpassad underdomän | QnAMaker-resursnamn | sträng | Resursnamnet används som anpassad underdomän för din QnA Maker. Detta är tillgängligt på sidan Inställningar när du har publicerat kunskapsbas. Den visas som host . |
Header | Innehållstyp | sträng | Medietypen för brödtexten som skickas till API:et. Standardvärdet är: application/json |
Header | Auktorisering | sträng | Slutpunktsnyckeln (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx). |
Posta brödtext | JSON-objekt | JSON | Feedback om träning |
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. Obligatoriskt. |
qnaID |
Nummer | ID för frågan finns i GenerateAnswer-svaret. |
Ett exempel på en 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.
Skicka många feedbackposter till 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 matrisen feedbackRecords
.
Ett exempel på en 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 Bot Framework
Din robotramverkskod måste anropa tränings-API:et om användarens fråga ska användas för aktiv inlärning. Det finns två kodstycken att skriva:
- Avgöra om frågan ska användas för aktiv inlärning
- Skicka tillbaka frågan till QnA Maker Train API för aktiv inlärning
I Azure Bot-exemplet har båda dessa aktiviteter programmerats.
Exempel på C#-kod för Train API med Bot Framework 4.x
Följande kod visar hur du skickar tillbaka information till QnA Maker med train-API:et.
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 med Bot Framework 4.x
Följande kod visar hur du skickar tillbaka information till QnA Maker med train-API:et.
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 när du använder aktiv inlärning finns i Metodtips.