Voorgestelde vragen over actief leren accepteren in de Knowledge Base
Notitie
De QnA Maker-service wordt op 31 maart 2025 buiten gebruik gesteld. Er is nu een nieuwere versie van de vraag- en antwoordmogelijkheid beschikbaar als onderdeel van Azure AI Language. Zie Vragen beantwoorden voor mogelijkheden voor het beantwoorden van vragen binnen de Taalservice. Vanaf 1 oktober 2022 kunt u geen nieuwe QnA Maker-resources meer maken. Raadpleeg de migratiehandleiding voor informatie over het migreren van bestaande QnA Maker-knowledge bases om vragen te beantwoorden.
Met Actief leren wordt de Knowledge Base of zoekservice gewijzigd nadat u de suggestie hebt goedgekeurd en vervolgens opslaat 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 bewerkende optie Weergaveopties en selecteert u vervolgens Actieve leersuggesties weergeven. Deze optie wordt uitgeschakeld als er geen suggesties zijn voor een van de vraag- en antwoordparen.
Filter de Knowledge Base met vraag- en antwoordparen om alleen suggesties weer te geven door Filteren op suggesties te selecteren.
Elk QnA-paar stelt de nieuwe vraagalternatieven voor met een vinkje,
✔
, om de vraag te accepteren of eenx
om de suggesties te weigeren. Selecteer het vinkje om de vraag toe te voegen.U kunt alle suggesties toevoegen of verwijderen door Alles toevoegen of Alles negeren te selecteren in de contextuele werkbalk.
Selecteer Opslaan en trainen om de wijzigingen op te slaan in de Knowledge Base.
Selecteer Publiceren om toe te staan dat de wijzigingen beschikbaar zijn via de GenerateAnswer-API.
Wanneer er elke 30 minuten 5 of meer vergelijkbare query's worden geclusterd, stelt QnA Maker de alternatieve vragen voor die u kunt accepteren of afwijzen.
Actieve leersuggesties worden opgeslagen in de geëxporteerde Knowledge Base
Wanneer actief leren is ingeschakeld voor uw app 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 van impliciete, autosuggested
en expliciete feedback usersuggested
. Een voorbeeld van dit JSON-object voor één door de gebruiker ingediende vraag van 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 andere clienttoepassing moet de volgende architectuurstroom gebruiken om actief leren te gebruiken:
Bot haalt het antwoord op van de Knowledge Base met de GenerateAnswer-API, waarbij de
top
eigenschap wordt gebruikt om een aantal antwoorden te krijgen.Bot bepaalt expliciete feedback:
- Gebruik uw eigen aangepaste bedrijfslogica om lage scores uit te filteren.
- Geef in de bot of clienttoepassing een lijst weer met mogelijke antwoorden voor 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 eigenschap top in de GenerateAnswer-aanvraag om verschillende overeenkomende antwoorden te krijgen
Wanneer u een vraag naar QnA Maker indient 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 eigenschap score samen met bedrijfslogica om een lijst met antwoorden te krijgen 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 de bedoeling.
Zodra de gebruiker een van de bestaande vragen selecteert, verzendt de clienttoepassing de keuze van de gebruiker als feedback met behulp van de QnA Maker Train-API. Deze feedback voltooit de actieve feedbacklus voor leren.
API trainen
Actieve feedback over leren wordt verzonden naar QnA Maker met de POST-aanvraag 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}]}
Eigenschap HTTP-aanvraag | Naam | 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. Deze wordt vermeld als de host . |
Header | Content-Type | tekenreeks | Het mediatype van de hoofdtekst die naar de API is verzonden. De standaardwaarde is: application/json |
Header | Autorisatie | tekenreeks | Uw eindpuntsleutel (EndpointKey xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx). |
Berichttekst | 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. U kunt zelf de indeling van de gebruikers-id opgeven. 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 |
getal | 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 de status 204 en geen JSON-antwoordtekst.
Batch veel feedbackrecords in één aanroep
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
}
]
}
Voorbeeldcode van botframework
Uw bot-frameworkcode moet de Train-API aanroepen, als de query van de gebruiker moet worden gebruikt voor actief leren. Er zijn twee codefragmenten 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 API trainen met Bot Framework 4.x
De volgende code illustreert hoe u informatie terugstuurt naar QnA Maker 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 Node.js code voor API trainen met Bot Framework 4.x
De volgende code illustreert hoe u informatie terugstuurt naar QnA Maker 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 Best practices voor aanbevolen procedures bij het gebruik van actief leren.