Uso de QnA Maker para responder preguntas

SE APLICA A: SDK v4

QnA Maker proporciona una capa conversacional de preguntas y respuestas sobre los datos. Esto permite que el bot envíe una pregunta a QnA Maker y reciba una respuesta sin tener que analizar e interpretar la intención de la pregunta.

Uno de los requisitos básicos para crear su propia instancia del servicio QnA Maker es rellenarlo con preguntas y respuestas. En muchos casos, las preguntas y respuestas ya existen en el contenido, como las preguntas más frecuentes u otra documentación; otras veces, es posible que quiera personalizar las respuestas a las preguntas de una manera más natural y conversacional.

Prerrequisitos

Acerca de este ejemplo

Para usar QnA Maker en el bot, debe crear una base de conocimiento en el portal de QnA Maker, tal como se muestra en la sección siguiente. A continuación, el bot puede usar el knowledge base para responder a las preguntas del usuario.

QnABot logic flow

Se llama a OnMessageActivityAsync para cada entrada del usuario recibida. Cuando se llama, obtiene acceso a _configuration la información almacenada en el archivo appsetting.json del código de ejemplo para buscar el valor para conectarse a la knowledge base de QnA Maker preconfigurada.

La entrada del usuario se envía a la base de conocimiento y la mejor respuesta devuelta se muestra al usuario.

Creación de una instancia del servicio QnA Maker y publicación de una base de conocimiento

  1. Cree un servicio QnA Maker.
  2. Cree un knowledge base con el archivo smartLightFAQ.tsv ubicado en la carpeta CognitiveModels del proyecto de ejemplo. Asigne un nombre al knowledge base qna y use el archivo smartLightFAQ.tsv para rellenarlo.

También puede usar estos pasos para acceder a sus propias bases de conocimiento de QnA Maker.

Nota

La documentación de QnA Maker incluye instrucciones sobre cómo crear un servicio en Azure y crear, entrenar y publicar el knowledge base.

Obtención de valores para conectar el bot a la base de conocimiento

  1. En el sitio de QnA Maker, seleccione la base de conocimiento.
  2. Con la knowledge base abierta, seleccione la pestaña CONFIGURACIÓN. Registre el valor que se muestra para el nombre del servicio. Este valor es útil para buscar la base de conocimiento apropiada en la interfaz del portal de QnA Maker. No se usa para conectar la aplicación de bot a esta knowledge base.
  3. Desplácese hacia abajo para buscar detalles de implementación y registre los siguientes valores de la solicitud HTTP de ejemplo de Postman:
    • POST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Host: <your-host-url>
    • Autorización: EndpointKey <your-endpoint-key>

La dirección URL del host comenzará con https:// y finalizará con /qnamaker, como https://<hostname>.azure.net/qnamaker. El bot necesitará el identificador de knowledge base, la dirección URL del host y la clave de punto de conexión para conectarse a la knowledge base de QnA Maker.

Actualización del archivo de configuración

En primer lugar, agregue la información necesaria para acceder a la knowledge base, incluido el nombre de host, la clave de punto de conexión y el identificador de knowledge base (kbId) en el archivo de configuración. Estos son los valores que guardó en la pestaña CONFIGURACIÓN de la knowledge base en QnA Maker.

Si no lo va a implementar para producción, el identificador de aplicación del bot y los campos de contraseña se pueden dejar en blanco.

Nota

Para agregar un knowledge base de QnA Maker a una aplicación de bot existente, asegúrese de agregar títulos informativos para las entradas de QnA. En esta sección, el valor "name" proporciona la clave necesaria para acceder a esta información desde la aplicación.

appsettings.json

{
  "MicrosoftAppType": "",
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "MicrosoftAppTenantId": "",
  "QnAKnowledgebaseId": "",
  "QnAEndpointKey": "",
  "QnAEndpointHostName": ""
}

Configuración de la instancia de QnA Maker

Primero, creamos un objeto para acceder a la base de conocimiento de QnA Maker.

Asegúrese de que el paquete NuGet Microsoft.Bot.Builder.AI.QnA está instalado para el proyecto.

En QnABot.cs, en el OnMessageActivityAsync método , cree una instancia de QnAMaker. La QnABot clase también es donde se extraen los nombres de la información de conexión, guardados en appsettings.json anteriores. Si ha elegido nombres diferentes para la información de conexión de la base de conocimiento en el archivo de configuración, asegúrese de actualizar los nombres aquí para que reflejen el nombre elegido.

Bots/QnABot.cs

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

Llamadas a QnA Maker desde el bot

Cuando el bot necesite una respuesta de QnAMaker, llame al método desde el GetAnswersAsync código del bot para obtener la respuesta adecuada en función del contexto actual. Si accede a su propia knowledge base, cambie el mensaje no encontrado a continuación para proporcionar instrucciones útiles para los usuarios.

Bots/QnABot.cs

var options = new QnAMakerOptions { Top = 1 };

// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext, options);
if (response != null && response.Length > 0)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}

Probar el bot

Ejecute el ejemplo localmente en la máquina. Si aún no lo ha hecho, instale el Bot Framework Emulator. Para obtener más instrucciones, consulte el ejemplo README (C#, JavaScript, Python).

Inicie el Emulator, conéctese al bot y envíe un mensaje como se muestra a continuación.

test qna sample

Información adicional

El ejemplo de varios turnos de QnA Maker (C#, JavaScript, Java, Python) muestra cómo usar un cuadro de diálogo de QnA Maker para admitir las características de seguimiento y aprendizaje activo de QnA Maker.

  • QnA Maker admite avisos de seguimiento, también conocidos como avisos de múltiples turnos. Si la base de conocimiento de QnA Maker requiere una respuesta adicional por parte del usuario, QnA Maker envía información de contexto que se puede usar para preguntar al usuario. Esta información también se utiliza para realizar llamadas de seguimiento al servicio QnA Maker. En la versión 4.6, Bot Framework SDK agregó la compatibilidad con esta característica.

    Para crear una base de conocimiento de este tipo, consulte la documentación de QnA Maker sobre cómo Usar avisos de seguimiento para crear varios turnos de una conversación.

  • QnA Maker también admite sugerencias de aprendizaje activas, lo que permite que el knowledge base mejore con el tiempo. El cuadro de diálogo QnA Maker admite comentarios explícitos para la característica de aprendizaje activo.

    Para habilitar esta característica en una knowledge base, consulte la documentación de QnA Maker sobre sugerencias de aprendizaje activo.

Pasos siguientes

QnA Maker se puede combinar con otros servicios de Cognitive Services para que el bot sea aún más eficaz. La herramienta de distribución proporciona una forma de combinar QnA con Language Understanding (LUIS) en el bot.