Přijetí aktivních otázek navržených učením v znalostní báze
Poznámka:
Služba QnA Maker se vyřadí z provozu 31. března 2025. Novější verze funkce pro otázky a odpovědi je teď dostupná jako součást jazyka Azure AI. Možnosti odpovídání na otázky v rámci služby Language Service najdete v tématu odpovědi 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í báze služby QnA Maker na zodpovězení otázek najdete v průvodci migrací.
Active Learning změní znalostní bázi nebo vyhledávací službu po schválení návrhu a uložení a trénování. 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 zapnout aktivní učení pro váš prostředek služby QnA Maker.
Zobrazení navrhovaných otázek
Pokud chcete zobrazit navrhované otázky, na stránce Upravit znalostní báze vyberte Možnosti zobrazení a pak vyberte Zobrazit aktivní návrhy učení. Tato možnost bude zakázaná, pokud neexistují žádné návrhy pro žádný z párů otázek a odpovědí.
Vyfiltrujte znalostní báze pomocí párů otázek a odpovědí, aby se zobrazily jenom návrhy výběrem možnosti Filtrovat podle návrhů.
Každý pár QnA navrhuje nové alternativy otázek se značkou zaškrtnutí,
✔
aby přijali otázku nebox
odmítli návrhy. Pokud chcete přidat otázku, vyberte značku zaškrtnutí.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.
Výběrem možnosti Uložit a Trénovat uložte změny do znalostní báze.
Výběrem možnosti Publikovat povolíte dostupnost změn z rozhraní GenerateAnswer API.
Když jsou clusterované 5 nebo více podobných dotazů, služba QnA Maker každých 30 minut navrhne alternativní otázky, které můžete přijmout nebo odmítnout.
Aktivní návrhy učení se ukládají do exportovaných znalostní báze
Když má vaše aplikace aktivní učení a exportujete ji, SuggestedQuestions
sloupec v souboru tsv uchovává aktivní výuková data.
Sloupec SuggestedQuestions
je objekt JSON s informacemi o implicitním autosuggested
a explicitním zpětné vazbě usersuggested
. Příkladem tohoto objektu JSON pro jednu otázku help
odeslanou uživatelem je:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
Když tuto aplikaci znovu naimportujete, aktivní učení bude dál shromažďovat informace a doporučovat návrhy pro vaše znalostní báze.
Tok architektury pro použití generateAnswer a trénování rozhraní API z robota
Robot nebo jiná klientská aplikace by k použití aktivního učení měla použít následující tok architektury:
Robot získá odpověď z znalostní báze pomocí rozhraní GenerateAnswer API s použitím
top
vlastnosti získat řadu odpovědí.Robot určuje explicitní zpětnou vazbu:
- Pomocí vlastní obchodní logiky vyfiltrujte nízké skóre.
- V robotovi nebo klientské aplikaci zobrazte seznam možných odpovědí na uživatele a získejte vybranou odpověď uživatele.
Robot odešle vybranou odpověď zpět do služby QnA Maker pomocí rozhraní API pro trénovací službu.
Získání několika odpovídajících odpovědí pomocí hlavní vlastnosti v požadavku GenerateAnswer
Při odesílání otázky do služby QnA Maker pro odpověď top
nastaví vlastnost textu JSON počet odpovědí, které se mají vrátit.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Použití vlastnosti skóre 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 prvních 3 otázky. score
Pomocí vlastnosti můžete analyzovat vzdálenost mezi skóre. Tento rozsah blízkosti je určen vaší 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á kontrola klientské aplikace v případech, kdy mají podobné skóre
Klientská aplikace zobrazí otázky s možností, že uživatel vybere jednu otázku , která nejvíce představuje jejich záměr.
Jakmile uživatel vybere některou z existujících otázek, klientská aplikace odešle volbu uživatele jako zpětnou vazbu pomocí rozhraní API pro trénování služby QnA Maker. Tato zpětná vazba dokončí aktivní smyčku zpětné vazby k učení.
Rozhraní Train API
Aktivní zpětná vazba k učení se odešle službě QnA Maker pomocí požadavku POST na trénovat 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 | Name | Type | Účel |
---|---|---|---|
Parametr trasy adresy URL | ID znalostní báze | string | Identifikátor GUID pro váš znalostní báze. |
Vlastní subdoména | Název prostředku QnAMaker | string | Název prostředku se používá 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 | string | Typ média textu odeslaného do rozhraní API. Výchozí hodnota je: application/json |
Hlavička | Autorizace | string | 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í |
Tělo JSON má několik nastavení:
Základní vlastnost JSON | Typ | Účel |
---|---|---|
feedbackRecords |
pole | Seznam zpětné vazby |
userId |
string | 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é. |
userQuestion |
string | Přesný text dotazu uživatele Povinný: |
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 bez textu 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 uložit data a pak odeslat mnoho záznamů do jednoho textu 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
Pokud se má dotaz uživatele použít k aktivnímu učení, musí kód služby Bot Framework volat rozhraní API pro trénování. Existují dva části kódu, které je potřeba napsat:
- Určení, jestli se má dotaz použít pro aktivní učení
- Odeslání dotazu zpět do rozhraní API pro trénování služby QnA Maker pro aktivní učení
V ukázce robota Azure byly obě tyto aktivity naprogramovány.
Příklad kódu jazyka C# pro trénování rozhraní API s využitím bot Frameworku 4.x
Následující kód ukazuje, jak odesílat informace zpět do služby QnA Maker pomocí rozhraní TRAIN API.
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 Node.js kódu pro trénování rozhraní API s využitím bot Frameworku 4.x
Následující kód ukazuje, jak odesílat informace zpět do služby QnA Maker pomocí rozhraní TRAIN API.
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žití aktivního učení najdete v tématu Osvědčené postupy.