Uso de QnA Maker para responder preguntasUse QnA Maker to answer questions

SE APLICA A: SíSDK v4 No SDK v3APPLIES TO: yesSDK v4 no SDK v3

QnA Maker proporciona una capa conversacional de preguntas y respuestas sobre los datos.QnA Maker provides a conversational question and answer layer over your data. 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.This allows your bot to send a question to the QnA Maker and receive an answer without needing to parse and interpret the question intent.

Uno de los requisitos básicos para crear su propia instancia del servicio QnA Maker es rellenarlo con preguntas y respuestas.One of the basic requirements in creating your own QnA Maker service is to populate it with questions and answers. 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.In many cases, the questions and answers already exist in content like FAQs or other documentation; other times, you may want to customize your answers to questions in a more natural, conversational way.

PrerrequisitosPrerequisites

Acerca de este ejemploAbout this sample

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.To use QnA Maker in your bot, you need to create a knowledge base in the QnA Maker portal, as shown in the next section. Después, el bot puede utilizar la base de conocimiento para responder a las preguntas del usuario.Your bot then can use the knowledge base to answer the user's questions.

Flujo de lógica de QnABot

Se llama a OnMessageActivityAsync para cada entrada del usuario recibida.OnMessageActivityAsync is called for each user input received. Cuando se le llama, accede a la información _configuration almacenada en el archivo appsetting.json del código de ejemplo para encontrar el valor para conectarse a su base de conocimiento preconfigurada de QnA Maker.When called, it accesses _configuration information stored within the sample code's appsetting.json file to find the value to connect to your pre-configured QnA Maker knowledge base.

La entrada del usuario se envía a la base de conocimiento y la mejor respuesta devuelta se muestra al usuario.The user's input is sent to your knowledge base and the best returned answer is displayed back to your user.

Creación de una instancia del servicio QnA Maker y publicación de una base de conocimientoCreate a QnA Maker service and publish a knowledge base

  1. Cree un servicio de QnA Maker.Create a QnA Maker service.
  2. Cree una base de conocimiento mediante el archivo smartLightFAQ. TSV situado en la carpeta CognitiveModels del proyecto de ejemplo.Create a knowledge base using the smartLightFAQ.tsv file located in the CognitiveModels folder of the sample project. Asigne un nombre a la base de conocimiento qna y use el archivo smartLightFAQ. TSV para rellenarla.Name your knowledge base qna, and use the smartLightFAQ.tsv file to populate it.

También puede usar estos pasos para tener acceso a sus propias bases de conocimiento de QnA Maker.You can also use these steps to access your own QnA Maker knowledge bases.

Nota

La documentación QnA Maker contiene instrucciones sobre cómo crear un servicio en Azure y crear, entrenar y publicar la base de conocimiento.The QnA Maker documentation has instructions on how to create a service in Azure and to create, train, and publish your knowledge base.

Obtención de valores para conectar el bot a la base de conocimientoObtain values to connect your bot to the knowledge base

  1. En el sitio de QnA Maker, seleccione la base de conocimiento.In the QnA Maker site, select your knowledge base.
  2. Con la base de conocimiento abierta, seleccione Configuración.With your knowledge base open, select the Settings. Anote el valor que se muestra en nombre de servicio.Record the value shown for service name. Este valor es útil para buscar la base de conocimiento apropiada en la interfaz del portal de QnA Maker.This value is useful for finding your knowledge base of interest when using the QnA Maker portal interface. No se utiliza para conectar la aplicación de bot a esta base de conocimiento.It is not used to connect your bot app to this knowledge base.
  3. Desplácese hacia abajo hasta encontrar Detalles de implementación y anote los siguientes valores de la solicitud HTTP de ejemplo de Postman:Scroll down to find Deployment details record the following values from the Postman sample HTTP request:
    • POST/knowledgebases/ <knowledge-base-id> /generateAnswerPOST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Organizar<your-host-url>Host: <your-host-url>
    • Autorización: EndpointKey<your-endpoint-key>Authorization: EndpointKey <your-endpoint-key>

La dirección URL del host comenzará con https:// y terminará con /qnamaker , como https://<hostname>.azure.net/qnamaker .Your host URL will start with https:// and end with /qnamaker, such as https://<hostname>.azure.net/qnamaker. El bot necesitará el identificador de la base de conocimiento, la dirección URL del host y la clave del punto de conexión para conectarse a la base de conocimiento de QnA Maker.Your bot will need the knowledge base ID, host URL, and endpoint key to connect to your QnA Maker knowledge base.

Actualización del archivo de configuraciónUpdate the settings file

En primer lugar, agregue la información necesaria para obtener acceso a la base de conocimiento, incluidos el nombre de host, la clave de punto de conexión y el identificador de base de conocimiento (kbId) en el archivo de configuración.First, add the information required to access your knowledge base including hostname, endpoint key and knowledge base ID (kbId) into the settings file. Estos son los valores que guardó en la pestaña Configuración en la base de conocimiento de QnA Maker.These are the values you saved from the Settings tab of your knowledge base in QnA Maker.

Si no está implementando esto para producción, los campos ID. de aplicación y contraseña de bot pueden dejarse en blanco.If you aren't deploying this for production, your bot's app ID and password fields can be left blank.

Nota

Para agregar una base de conocimiento de QnA Maker a una aplicación de bot existente, asegúrese de agregar títulos informativos para las entradas de QnA.To add a QnA Maker knowledge base into an existing bot application, be sure to add informative titles for your QnA entries. En esta sección, el valor "name" proporciona la clave necesaria para acceder a esta información desde la aplicación.The "name" value within this section provides the key required to access this information from within your app.

appsettings.jsonappsettings.json

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

Configuración de la instancia de QnA MakerSet up the QnA Maker instance

Primero, creamos un objeto para acceder a la base de conocimiento de QnA Maker.First, we create an object for accessing our QnA Maker knowledge base.

Asegúrese de que el paquete NuGet Microsoft.Bot.Builder.AI.QnA está instalado para el proyecto.Be sure that the Microsoft.Bot.Builder.AI.QnA NuGet package is installed for your project.

En QnABot.cs, en el método OnMessageActivityAsync, creamos una instancia de QnAMaker.In QnABot.cs, in the OnMessageActivityAsync method, we create a QnAMaker instance. La clase QnABot es también donde se introducen los nombres de la información de conexión, guardada en appsettings.json arriba.The QnABot class is also where the names of the connection information, saved in appsettings.json above, are pulled in. 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.If you have chosen different names for your knowledge base connection information in your settings file, be sure to update the names here to reflect your chosen name.

Bots/QnABot.csBots/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 botCalling QnA Maker from your bot

Cuando el bot necesite una respuesta de QnA Maker, llame a GetAnswersAsync() desde el código del bot para obtener la respuesta correcta en función del contexto actual.When your bot needs an answer from QnAMaker, call GetAnswersAsync() from your bot code to get the appropriate answer based on the current context. Si va a acceder a su propia base de conocimiento, cambie el mensaje de que no se encontraron respuestas que se muestra a continuación para proporcionar instrucciones útiles para los usuarios.If you are accessing your own knowledge base, change the no answers found message below to provide useful instructions for your users.

Bots/QnABot.csBots/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 botTest the bot

Ejecute el ejemplo localmente en la máquina.Run the sample locally on your machine. Si aún no lo ha hecho, instale Bot Framework Emulator.If you have not done so already, install the Bot Framework Emulator. Para obtener más instrucciones, consulte el archivo Léame para C# o JavaScript.For further instructions, refer to the readme file for C# or Javascript. o Python sample.or Python sample.

Inicie el emulador, conéctese al bot y envíe un mensaje como se muestra a continuación.Start the emulator, connect to your bot, and send a message as shown below.

ejemplo de prueba de qna

Información adicionalAdditional information

En el QnA Maker ejemplo Multiturn (C#, JavaScript, Python) se muestra cómo usar un cuadro de diálogo de QnA Maker para admitir la solicitud de seguimiento de QnA Maker y las características de aprendizaje activo.The QnA Maker multi-turn sample (C#, JavaScript, Python) shows how to use a QnA Maker dialog to support QnA Maker's follow-up prompt and active learning features.

  • QnA Maker admite avisos de seguimiento, también conocidos como avisos de múltiples turnos.QnA Maker supports follow-up prompts, also known as multi-turn prompts. 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.If the QnA Maker knowledge base requires an additional response from the user, QnA Maker sends context information that you can use to prompt the user. Esta información también se utiliza para realizar llamadas de seguimiento al servicio QnA Maker.This information is also used to make any follow-up calls to the QnA Maker service. En la versión 4.6, Bot Framework SDK agregó la compatibilidad con esta característica.In version 4.6, the Bot Framework SDK added support for this feature.

    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.To construct such a knowledge base, see the QnA Maker documentation on how to Use follow-up prompts to create multiple turns of a conversation.

  • QnA Maker también admite sugerencias de aprendizaje activo, lo que permite que la base de conocimiento mejore con el tiempo.QnA Maker also supports active learning suggestions, allowing the knowledge base to improve over time. El cuadro de diálogo QnA Maker admite comentarios explícitos para la característica de aprendizaje activo.The QnA Maker dialog supports explicit feedback for the active learning feature.

    Para habilitar esta característica en una base de conocimiento, consulte la documentación de QnA Maker sobre las sugerencias de aprendizaje activo.To enable this feature on a knowledge base, see the QnA Maker documentation on Active learning suggestions.

Pasos siguientesNext steps

QnA Maker se puede combinar con otros servicios de Cognitive Services para que el bot sea aún más eficaz.QnA Maker can be combined with other Cognitive Services, to make your bot even more powerful. La herramienta de distribución proporciona una forma de combinar QnA con Language Understanding (LUIS) en el bot.The Dispatch tool provides a way to combine QnA with Language Understanding (LUIS) in your bot.