Voorgestelde vragen voor actief leren accepteren in de Knowledge Base
Notitie
De QnA Maker-service wordt op 31 maart 2025 buiten gebruik gesteld. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language. Zie vraagantwoording voor vragen in de Language Service voor het beantwoorden van vragen. Vanaf 1 oktober 2022 kunt u geen nieuwe QnA Maker-resources maken. Raadpleeg de migratiehandleiding voor informatie over het migreren van bestaande QnA Maker-knowledge bases om vragen te beantwoorden.
Active Learning wijzigt de Knowledge Base of Search Service nadat u de suggestie hebt goedgekeurd en slaat en traint. Als u de suggestie goedkeurt, wordt deze toegevoegd als een alternatieve vraag.
Actief leren inschakelen
Als u voorgestelde vragen wilt zien, moet u actief leren inschakelen voor uw QnA Maker-resource.
Voorgestelde vragen weergeven
Als u de voorgestelde vragen wilt zien, selecteert u op de pagina Knowledge Base bewerken de optie Weergaveopties en selecteert u Actieve leersuggesties weergeven. Deze optie wordt uitgeschakeld als er geen suggesties aanwezig zijn voor een van de vraag- en antwoordparen.
Filter de knowledge base met vraag- en antwoordparen om alleen suggesties weer te geven door Filter by Suggestions te selecteren.
Elk QnA-paar stelt de nieuwe vraagalternatieven voor met een vinkje,
✔
om de vraag te accepteren of omx
de suggesties af te wijzen. Selecteer het vinkje om de vraag toe te voegen.U kunt alle suggesties toevoegen of verwijderen door alles toevoegen of alles negeren te selecteren op de contextuele werkbalk.
Selecteer Opslaan en trainen om de wijzigingen in de Knowledge Base op te slaan.
Selecteer Publiceren om toe te staan dat de wijzigingen beschikbaar zijn via de GenerateAnswer-API.
Wanneer 5 of meer vergelijkbare query's zijn geclusterd, worden in QnA Maker elke 30 minuten de alternatieve vragen voorgesteld die u kunt accepteren of weigeren.
Actieve leersuggesties worden opgeslagen in de geëxporteerde Knowledge Base
Wanneer uw app actief leren heeft ingeschakeld en u de app exporteert, behoudt de SuggestedQuestions
kolom in het tsv-bestand de actieve leergegevens.
De SuggestedQuestions
kolom is een JSON-object met informatie over impliciete, autosuggested
en expliciete usersuggested
feedback. Een voorbeeld van dit JSON-object voor één door de gebruiker ingediende vraag help
is:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
Wanneer u deze app opnieuw invoert, blijft het actieve leren informatie verzamelen en suggesties voor uw Knowledge Base aanbevelen.
Architectuurstroom voor het gebruik van GenerateAnswer en Train API's van een bot
Een bot of een andere clienttoepassing moet de volgende architectuurstroom gebruiken om actief leren te gebruiken:
Bot haalt het antwoord op uit de knowledge base met de GenerateAnswer-API, met behulp van de
top
eigenschap om een aantal antwoorden te krijgen.Bot bepaalt expliciete feedback:
- Filter lage scores met behulp van uw eigen aangepaste bedrijfslogica.
- Geef in de bot of clienttoepassing een lijst weer met mogelijke antwoorden op de gebruiker en haal het geselecteerde antwoord van de gebruiker op.
Bot stuurt het geselecteerde antwoord terug naar QnA Maker met de Train-API.
Gebruik de bovenste eigenschap in de GenerateAnswer-aanvraag om verschillende overeenkomende antwoorden te krijgen
Wanneer u een vraag indient bij QnA Maker voor een antwoord, stelt de top
eigenschap van de JSON-hoofdtekst het aantal antwoorden in dat moet worden geretourneerd.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Gebruik de score-eigenschap samen met bedrijfslogica om een lijst met antwoorden weer te geven om de gebruiker weer te geven
Wanneer de clienttoepassing (zoals een chatbot) het antwoord ontvangt, worden de drie belangrijkste vragen geretourneerd. Gebruik de score
eigenschap om de nabijheid tussen scores te analyseren. Dit nabijheidsbereik wordt bepaald door uw eigen bedrijfslogica.
{
"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": []
}
]
}
Opvolgen van clienttoepassingen wanneer vragen vergelijkbare scores hebben
Uw clienttoepassing geeft de vragen weer met een optie voor de gebruiker om de ene vraag te selecteren die het meest overeenkomt met hun intentie.
Zodra de gebruiker een van de bestaande vragen heeft geselecteerd, verzendt de clienttoepassing de keuze van de gebruiker als feedback met behulp van de QnA Maker Train-API. Deze feedback voltooit de actieve leerfeedbacklus.
API trainen
Actieve leerfeedback wordt verzonden naar QnA Maker met de POST-aanvraag voor de Train API. De API-handtekening is:
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-aanvraageigenschap | Name | Type | Doel |
---|---|---|---|
URL-routeparameter | Id van de Knowledge Base | tekenreeks | De GUID voor uw Knowledge Base. |
Aangepast subdomein | QnAMaker-resourcenaam | tekenreeks | De resourcenaam wordt gebruikt als het aangepaste subdomein voor uw QnA Maker. Dit is beschikbaar op de pagina Instellingen nadat u de Knowledge Base hebt gepubliceerd. Het wordt vermeld als de host . |
Koptekst | Inhoudstype | tekenreeks | Het mediatype van de hoofdtekst die naar de API is verzonden. De standaardwaarde is: application/json |
Koptekst | Autorisatie | tekenreeks | Uw eindpuntsleutel (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). |
Hoofdtekst posten | JSON-object | JSON | De trainingsfeedback |
De JSON-hoofdtekst heeft verschillende instellingen:
JSON-hoofdteksteigenschap | Type | Doel |
---|---|---|
feedbackRecords |
matrix | Lijst met feedback. |
userId |
tekenreeks | De gebruikers-id van de persoon die de voorgestelde vragen accepteert. De indeling van de gebruikers-id is aan u. Een e-mailadres kan bijvoorbeeld een geldige gebruikers-id in uw architectuur zijn. Optioneel. |
userQuestion |
tekenreeks | Exacte tekst van de query van de gebruiker. Vereist. |
qnaID |
Nummer | Id van vraag, gevonden in het antwoord GenerateAnswer. |
Een voorbeeld van een JSON-hoofdtekst ziet er als volgt uit:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "<question-text>",
"qnaId": 1
}
]
}
Een geslaagd antwoord retourneert een status van 204 en geen hoofdtekst van het JSON-antwoord.
Batch veel feedbackrecords in één gesprek
In de toepassing aan de clientzijde, zoals een bot, kunt u de gegevens opslaan en vervolgens veel records verzenden in één JSON-hoofdtekst in de feedbackRecords
matrix.
Een voorbeeld van een JSON-hoofdtekst ziet er als volgt uit:
{
"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-voorbeeldcode
Uw botframeworkcode moet de Train-API aanroepen als de query van de gebruiker moet worden gebruikt voor actief leren. Er zijn twee stukjes code om te schrijven:
- Bepalen of de query moet worden gebruikt voor actief leren
- Query terugsturen naar de QnA Maker Train-API voor actief leren
In het Azure Bot-voorbeeld zijn beide activiteiten geprogrammeerd.
Voorbeeld van C#-code voor train-API met Bot Framework 4.x
De volgende code illustreert hoe u informatie naar QnA Maker verzendt met de 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();
}
}
}
Voorbeeld van Node.js code voor train-API met Bot Framework 4.x
De volgende code illustreert hoe u informatie naar QnA Maker verzendt met de 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);
}
Aanbevolen procedures
Zie Aanbevolen procedures voor aanbevolen procedures bij het gebruik van actief leren.