Aceitar perguntas sugeridas de aprendizagem ativa na base de conhecimento
Nota
O serviço QnA Maker será desativado no dia 31 de março de 2025. Uma versão mais recente do recurso de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure. Para obter os recursos de resposta a perguntas no Serviço Linguístico, consulte Resposta a perguntas. A partir de 1º de outubro de 2022, você não poderá criar novos recursos do QnA Maker. Para obter informações sobre como migrar bases de conhecimento existentes do QnA Maker para responder a perguntas, consulte o guia de migração.
O Ative Learning altera a Base de Dados de Conhecimento ou o Serviço de Pesquisa depois de aprovar a sugestão, depois de guardar e treinar. Se você aprovar a sugestão, ela será adicionada como uma pergunta alternativa.
Ativar a aprendizagem ativa
Para ver as perguntas sugeridas, você deve ativar a aprendizagem ativa para seu recurso QnA Maker.
Ver perguntas sugeridas
Para ver as perguntas sugeridas, na página Editar base de dados de conhecimento, selecione Opções de visualização e, em seguida, selecione Mostrar sugestões de aprendizagem ativa. Esta opção será desativada se não houver sugestões para qualquer um dos pares de perguntas e respostas.
Filtre a base de dados de conhecimento com pares de perguntas e respostas para mostrar apenas sugestões selecionando Filtrar por Sugestões.
Cada par QnA sugere as novas alternativas de perguntas com uma marca de seleção,
✔
, para aceitar a pergunta ou parax
rejeitar as sugestões. Selecione a marca de seleção para adicionar a pergunta.Você pode adicionar ou excluir todas as sugestões selecionando Adicionar tudo ou Rejeitar tudo na barra de ferramentas contextual.
Selecione Salvar e Treinar para salvar as alterações na base de dados de conhecimento.
Selecione Publicar para permitir que as alterações estejam disponíveis na API GenerateAnswer.
Quando 5 ou mais consultas semelhantes são agrupadas, a cada 30 minutos, o QnA Maker sugere as perguntas alternativas para você aceitar ou rejeitar.
As sugestões de aprendizagem ativa são salvas na base de dados de conhecimento exportada
Quando seu aplicativo tem a aprendizagem ativa habilitada e você exporta o aplicativo, a SuggestedQuestions
coluna no arquivo tsv retém os dados de aprendizagem ativos.
A SuggestedQuestions
coluna é um objeto JSON de informações de feedback implícito autosuggested
e explícito usersuggested
. Um exemplo desse objeto JSON para uma única pergunta enviada pelo help
usuário é:
[
{
"clusterHead": "help",
"totalAutoSuggestedCount": 1,
"totalUserSuggestedCount": 0,
"alternateQuestionList": [
{
"question": "help",
"autoSuggestedCount": 1,
"userSuggestedCount": 0
}
]
}
]
Quando você reimporta este aplicativo, o aprendizado ativo continua a coletar informações e recomendar sugestões para sua base de conhecimento.
Fluxo de arquitetura para usar APIs GenerateAnswer e Train de um bot
Um bot ou outro aplicativo cliente deve usar o seguinte fluxo de arquitetura para usar a aprendizagem ativa:
Bot obtém a resposta da base de dados de conhecimento com a API GenerateAnswer, usando a
top
propriedade para obter várias respostas.Bot determina feedback explícito:
- Usando sua própria lógica de negócios personalizada, filtre pontuações baixas.
- No bot ou aplicativo cliente, exiba a lista de respostas possíveis para o usuário e obtenha a resposta selecionada pelo usuário.
O Bot envia a resposta selecionada de volta para o QnA Maker com a API Train.
Use a propriedade top na solicitação GenerateAnswer para obter várias respostas correspondentes
Ao enviar uma pergunta ao QnA Maker para obter uma resposta, a top
propriedade do corpo JSON define o número de respostas a serem retornadas.
{
"question": "wi-fi",
"isTest": false,
"top": 3
}
Use a propriedade score junto com a lógica de negócios para obter uma lista de respostas para mostrar ao usuário
Quando o aplicativo cliente (como um bot de chat) recebe a resposta, as 3 principais perguntas são retornadas. Use a score
propriedade para analisar a proximidade entre as pontuações. Este intervalo de proximidade é determinado pela sua própria lógica de negócio.
{
"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": []
}
]
}
Acompanhamento do aplicativo cliente quando as perguntas têm pontuações semelhantes
Seu aplicativo cliente exibe as perguntas com uma opção para o usuário selecionar a única pergunta que mais representa sua intenção.
Depois que o usuário seleciona uma das perguntas existentes, o aplicativo cliente envia a escolha do usuário como feedback usando a API do QnA Maker Train. Este feedback completa o ciclo de feedback de aprendizagem ativa.
API de Preparação
O feedback de aprendizagem ativa é enviado ao QnA Maker com a solicitação Train API POST. A assinatura da API é:
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}]}
Propriedade de solicitação HTTP | Nome | Tipo | Finalidade |
---|---|---|---|
Parâmetro de rota de URL | ID da base de dados de conhecimento | string | O GUID para sua base de conhecimento. |
Subdomínio personalizado | Nome do recurso QnAMaker | string | O nome do recurso é usado como o subdomínio personalizado para o QnA Maker. Isso fica disponível na página Configurações depois de publicar a base de dados de conhecimento. Está listado como o host . |
Cabeçalho | Tipo de Conteúdo | string | O tipo de mídia do corpo enviado para a API. O valor padrão é: application/json |
Cabeçalho | Autorização | string | Sua chave de ponto de extremidade (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). |
Corpo dos Correios | Objeto JSON | JSON | O feedback da formação |
O corpo JSON tem várias configurações:
Propriedade do corpo JSON | Tipo | Finalidade |
---|---|---|
feedbackRecords |
matriz | Lista de comentários. |
userId |
string | O ID de utilizador da pessoa que aceita as perguntas sugeridas. O formato do ID de utilizador depende de si. Por exemplo, um endereço de e-mail pode ser um ID de usuário válido em sua arquitetura. Opcional. |
userQuestion |
string | Texto exato da consulta do usuário. Obrigatório. |
qnaID |
Número | ID da pergunta, encontrada na resposta GenerateAnswer. |
Um exemplo de corpo JSON se parece com:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "<question-text>",
"qnaId": 1
}
]
}
Uma resposta bem-sucedida retorna um status de 204 e nenhum corpo de resposta JSON.
Agrupe muitos registros de feedback em uma única chamada
No aplicativo do lado do cliente, como um bot, você pode armazenar os dados e, em seguida, enviar muitos registros em um único corpo JSON na feedbackRecords
matriz.
Um exemplo de corpo JSON se parece com:
{
"feedbackRecords": [
{
"userId": "1",
"userQuestion": "How do I ...",
"qnaId": 1
},
{
"userId": "2",
"userQuestion": "Where is ...",
"qnaId": 40
},
{
"userId": "3",
"userQuestion": "When do I ...",
"qnaId": 33
}
]
}
Código de exemplo da estrutura do Bot
Seu código de estrutura de bot precisa chamar a API Train, se a consulta do usuário deve ser usada para aprendizagem ativa. Há duas partes de código para escrever:
- Determinar se a consulta deve ser usada para aprendizagem ativa
- Enviar a consulta de volta para a API do QnA Maker Train para aprendizagem ativa
No exemplo de Bot do Azure, ambas as atividades foram programadas.
Exemplo de código C# para Train API com Bot Framework 4.x
O código a seguir ilustra como enviar informações de volta para o QnA Maker com a API 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();
}
}
}
Exemplo Node.js código para Train API com Bot Framework 4.x
O código a seguir ilustra como enviar informações de volta para o QnA Maker com a API 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);
}
Melhores práticas
Para conhecer as práticas recomendadas ao usar a aprendizagem ativa, consulte Práticas recomendadas.