Uso de varios modelos de LUIS y QnA con Orchestrator
SE APLICA A: SDK v4
Nota:
Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.
La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.
Nota:
Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.
Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.
Si un bot usa varios modelos de Language Understanding (LUIS) y bases de conocimiento de QnA Maker, puede usar Bot Framework Orchestrator para determinar qué modelo de LUIS o base de conocimiento de QnA Maker coinciden mejor con la entrada del usuario. Puede usar el comando de la bf orchestrator
CLI para crear un archivo de instantáneas de Orchestrator y, a continuación, usar el archivo de instantáneas para enrutar la entrada del usuario al modelo correcto en tiempo de ejecución.
En este artículo se describe cómo usar una base de conocimiento de QnA Maker existente con Orchestrator.
- En el caso de los nuevos bots, considere la posibilidad de usar las características de flujo de trabajo de respuesta a preguntas y orquestación del lenguaje azure AI.
- Para obtener más información sobre Orchestrator, consulte Reconocimiento de intenciones con Orchestrator en Composer.
- Para obtener más información sobre el
bf orchestrator
comando, consulte Léame de la CLI de Bot Framework.
Requisitos previos
- Una cuenta de luis.ai para crear aplicaciones de LUIS.
- Una cuenta de QnA Maker y una base de conocimiento de QnA Maker existente.
- Una copia del NLP con el ejemplo de Orchestrator en C# (archivado) o JavaScript (archivado).
- Base de conocimiento de conceptos básicos de bots, LUIS y QnA Maker.
- Instale la CLI de BF de la línea de comandos.
Acerca de este ejemplo
Este ejemplo se basa en un conjunto predefinido de proyectos de LUIS y QnA Maker. Sin embargo, para usar QnA Maker en el bot, necesita una base de conocimiento existente en el portal de QnA Maker . Después, el bot puede utilizar la base de conocimiento para responder a las preguntas del usuario.
Para el nuevo desarrollo de bots, considere la posibilidad de usar Copilot Studio. Si necesita crear una base de conocimiento para un bot de SDK de Bot Framework, consulte los siguientes artículos sobre los servicios de Azure AI:
- ¿Qué es la respuesta a preguntas?
- Creación de un bot de preguntas frecuentes
- Biblioteca cliente de respuesta a preguntas de Azure Cognitive Language Services para .NET
Se llama a OnMessageActivityAsync
para cada entrada del usuario recibida. Este módulo busca la intención del usuario con mayor puntuación y pasa el resultado a DispatchToTopIntentAsync
. DispatchToTopIntentAsync, a su vez, llama al controlador de aplicación adecuado.
ProcessSampleQnAAsync
: para preguntas más frecuentes sobre bots.ProcessWeatherAsync
-para las consultas sobre el tiempo.ProcessHomeAutomationAsync
-para los comandos de iluminación doméstica.
El controlador llama al servicio LUIS o QnA Maker y devuelve el resultado generado al usuario.
Creación de aplicaciones de LUIS
Para poder crear un archivo de instantáneas de Orchestrator, necesita aplicaciones de LUIS y bases de conocimiento de QnA creadas y publicadas. El bot de ejemplo al que se hace referencia en este artículo usa los siguientes modelos, incluidos con el ejemplo NLP With Orchestrator en la \CognitiveModels
carpeta :
Nombre | Descripción |
---|---|
HomeAutomation | Una aplicación LUIS que reconoce una intención de automatización de dispositivos del hogar con datos de la entidad asociada. |
Tiempo | Una aplicación de LUIS que reconoce las intenciones relacionadas con el tiempo con datos de ubicación. |
QnAMaker | Una instancia de Knowledge Base de QnA Maker que proporciona respuestas a preguntas sencillas sobre el bot. |
Crear las aplicaciones de LUIS
Cree aplicaciones de LUIS desde los archivos HomeAutomation y Weather .lu en el directorio de modelos cognitivos del ejemplo.
Ejecute el siguiente comando para importar, entrenar y publicar la aplicación en el entorno de producción.
bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
Registre los identificadores de aplicación, los nombres para mostrar, la clave de creación y la ubicación.
Para obtener más información, consulte creación de una aplicación de LUIS en el portal de LUIS y Obtención de valores para conectarse a la aplicación de LUIS en Incorporación de comprensión del lenguaje natural al bot y la documentación de LUIS sobre cómo entrenar y publicar una aplicación en el entorno de producción.
Obtención de valores para conectar el bot a la base de conocimiento
Nota:
Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.
La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.
Necesita una base de conocimiento existente y el nombre de host y la clave de punto de conexión de QnA Maker.
Sugerencia
La documentación de QnA Maker contiene instrucciones sobre cómo crear, entrenar y publicar una base de conocimiento.
Creación del archivo de instantáneas de Orchestrator
La interfaz de la CLI de la herramienta Orchestrator crea el archivo de instantánea de Orchestrator para el enrutamiento a la aplicación de LUIS o QnA Maker correcta en tiempo de ejecución.
Instalación de la versión más reciente compatible del paquete Redistribuible de Visual C++
Abra un símbolo del sistema o una ventana de terminal y cambie los directorios al directorio de ejemplo.
Asegúrese de que tiene la versión actual de npm y la CLI de Bot Framework.
npm i -g npm npm i -g @microsoft/botframework-cli
Descarga del archivo de modelo base de Orchestrator
mkdir model bf orchestrator:basemodel:get --out ./model
Creación del archivo de instantáneas de Orchestrator
mkdir generated bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
Instalación de paquetes
Antes de ejecutar esta aplicación por primera vez, asegúrese de que hay varios paquetes NuGet instalados:
- Microsoft.Bot.Builder
- Microsoft.Bot.Builder.AI.Luis
- Microsoft.Bot.Builder.AI.QnA
- Microsoft.Bot.Builder.AI.Orchestrator
Actualización manual del archivo appsettings.json
Una vez creadas todas las aplicaciones de servicio, la información de cada una de ellas debe agregarse al archivo "appsettings.json". El ejemplo inicial para el código de C# (archivado) contiene un archivo appsettings.json vacío:
appsettings.json
Para cada una de las entidades que se muestran a continuación, agregue los valores que ha registrado antes en estas instrucciones:
"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",
"LuisHomeAutomationAppId": "<app-id-for-home-automation-app>",
"LuisWeatherAppId": "<app-id-for-weather-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",
Cuando se hayan realizado todos los cambios, guarde este archivo.
Conexión a los servicios desde el bot
Para conectarse a los servicios luis y QnA Maker, el bot extrae información del archivo de configuración.
En BotServices.cs, la información contenida en el archivo de configuración appsettings.json se usa para conectar el bot de Orchestrator a los HomeAutomation
Weather
servicios y SampleQnA
. Los constructores utilizan los valores que proporcionó para conectarse a estos servicios.
BotServices.cs
Llamada a los servicios desde el bot
Para cada entrada del usuario, la lógica del bot pasa la entrada del usuario a Orchestrator Recognizer, busca la intención de retorno superior y usa esa información para llamar al servicio adecuado para la entrada.
En el archivo DispatchBot.cs cada vez que se llama al OnMessageActivityAsync
método , comprobamos el mensaje de usuario entrante y obtenemos la intención superior de Orchestrator Recognizer. A continuación, pasamos y topIntent
recognizerResult
al método correcto para llamar al servicio y devolver el resultado.
bots\DispatchBot.cs
Trabajo con los resultados de reconocimiento
Cuando el reconocedor de Orchestrator genera un resultado, indica qué servicio puede procesar la expresión de forma más adecuada. El código de este bot enruta la solicitud al servicio correspondiente y, a continuación, resume la respuesta del servicio que llama. Dependiendo de la intención devuelta de Orchestrator, este código usa la intención devuelta para enrutar al modelo de LUIS correcto o al servicio QnA.
bots\DispatchBot.cs
Los ProcessHomeAutomationAsync
métodos y ProcessWeatherAsync
usan la entrada del usuario contenida en el contexto de turno para obtener la intención y las entidades principales del modelo de LUIS correcto.
El ProcessSampleQnAAsync
método usa la entrada del usuario contenida en el contexto de turno para generar una respuesta a partir de la base de conocimiento y mostrar ese resultado al usuario.
Nota:
Si se tratara de una aplicación de producción, aquí es donde los métodos LUIS seleccionados se conectarían al servicio especificado, pasarían la entrada del usuario y procesarían los datos de intención y entidad de LUIS devueltos.
Pruebe su bot
Con el entorno de desarrollo, inicie el código de ejemplo. Anote la dirección localhost que se muestra en la barra de direcciones de la ventana del explorador abierta por la aplicación:
https://localhost:<Port_Number>
.Abra Bot Framework Emulator y haga clic en el botón Abrir bot .
En el cuadro de diálogo Abrir un bot , escriba la dirección URL del punto de conexión del bot, como
http://localhost:3978/api/messages
. Haga clic en Conectar.Como referencia, estas son algunas de las preguntas y los comandos que están cubiertos por los servicios creados para el bot:
- QnA Maker
hi
,good morning
what are you
,what do you do
- LUIS (automatización doméstica)
turn on bedroom light
turn off bedroom light
make some coffee
- LUIS (tiempo)
whats the weather in redmond washington
what's the forecast for london
show me the forecast for nebraska
- QnA Maker
Enrutamiento de la expresión de usuario a QnA Maker
En el emulador, escriba el texto
hi
y envíe la expresión. El bot envía esta consulta a Orchestrator y obtiene una respuesta que indica qué aplicación secundaria debe obtener esta expresión para su posterior procesamiento.Al seleccionar la
Orchestrator Recognition Trace
línea en el registro, puede ver la respuesta JSON en el emulador. El resultado del orquestador se muestra en el Inspector.{ "type": "trace", "timestamp": "2021-05-01T06:26:04.067Z", "serviceUrl": "http://localhost:58895", "channelId": "emulator", "from": { "id": "36b2a460-aa43-11eb-920f-7da472b36492", "name": "Bot", "role": "bot" }, "conversation": { "id": "17ef3f40-aa46-11eb-920f-7da472b36492|livechat" }, "recipient": { "id": "5f8c6123-2596-45df-928c-566d44426556", "role": "user" }, "locale": "en-US", "replyToId": "1a3f70d0-aa46-11eb-8b97-2b2a779de581", "label": "Orchestrator Recognition", "valueType": "OrchestratorRecognizer", "value": { "text": "hi", "alteredText": null, "intents": { "QnAMaker": { "score": 0.9987310956576168 }, "HomeAutomation": { "score": 0.3402091165577196 }, "Weather": { "score": 0.24092200496795158 } }, "entities": {}, "result": [ { "Label": { "Type": 1, "Name": "QnAMaker", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.9987310956576168, "ClosestText": "hi" }, { "Label": { "Type": 1, "Name": "HomeAutomation", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.3402091165577196, "ClosestText": "make some coffee" }, { "Label": { "Type": 1, "Name": "Weather", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.24092200496795158, "ClosestText": "soliciting today's weather" } ] }, "name": "OrchestratorRecognizerResult", "id": "1ae65f30-aa46-11eb-8b97-2b2a779de581", "localTimestamp": "2021-04-30T23:26:04-07:00" }
Dado que la expresión ,
hi
, forma parte de la intención QnAMaker de Orchestrator y está seleccionada comotopScoringIntent
, el bot realizará una segunda solicitud, esta vez en la aplicación QnA Maker, con la misma expresión.Seleccione la
QnAMaker Trace
línea en el registro del emulador. El resultado de QnA Maker se muestra en Inspector.{ "questions": [ "hi", "greetings", "good morning", "good evening" ], "answer": "Hello!", "score": 1, "id": 96, "source": "QnAMaker.tsv", "metadata": [], "context": { "isContextOnly": false, "prompts": [] } }
[Python (archivado)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator