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

se aplica a: SDK V4APPLIES TO: SDK v4

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 llama, accede a _configuration la información almacenada en elappsetting.jsdel código de ejemplo en el archivo para buscar el valor que se va a conectar a la base de conocimiento de QnA Maker preconfigurada.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 las QnA de la base de conocimiento 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 la pestaña configuración . Registre el valor que se muestra para el nombre del servicio.With your knowledge base open, select the SETTINGS tab. 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's not used to connect your bot app to this knowledge base.
  3. Desplácese hacia abajo para buscar los detalles de la implementación y registre los valores siguientes de la solicitud HTTP del ejemplo Postman:Scroll down to find Deployment details and record the following values from the Postman sample HTTP request:
    • POST/knowledgebases/ <knowledge-base-id> /generateAnswerPOST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Host: <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:// . Azure.net/qnamaker.Your host URL will start with https:// and end with /qnamaker, such as https://.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 de la base de conocimiento en 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 OnMessageActivityAsync método, cree una instancia de QnAMaker.In QnABot.cs, in the OnMessageActivityAsync method, create a QnAMaker instance. La QnABot clase también es donde se extraen los nombres de la información de conexión, guardados en appsettings.jsde 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 QnAMaker, llame al GetAnswersAsync método desde el código de bot para obtener la respuesta adecuada en función del contexto actual.When your bot needs an answer from QnAMaker, call the GetAnswersAsync method from your bot code to get the appropriate answer based on the current context. Si tiene acceso a su propia base de conocimiento, cambie el mensaje no se encontraron respuestas que aparece a continuación para proporcionar instrucciones útiles para los usuarios.If you're 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 todavía no lo ha hecho, instale el emulador de bot Framework.If you haven't done so already, install the Bot Framework Emulator. Para obtener más instrucciones, consulte el archivo Léame del ejemplo (C#, JavaScript, Python).For further instructions, refer to the sample's README (C#, JavaScript, Python).

Inicie el emulador, conéctese a su 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.