Использование нескольких моделей LUIS и QnA с Orchestrator
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4
Примечание.
Azure AI QnA Maker будет прекращен 31 марта 2025 г. С 1 октября 2022 г. вы не сможете создавать новые ресурсы или базы знаний QnA Maker. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure.
Пользовательский ответ на вопросы, компонент языка искусственного интеллекта Azure, — это обновленная версия службы QnA Maker. Дополнительные сведения о поддержке вопросов и ответов в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
Примечание.
Распознавание речи (LUIS) будет прекращен 1 октября 2025 года. Начиная с 1 апреля 2023 года вы не сможете создавать новые ресурсы LUIS. Новая версия распознавания речи теперь доступна как часть языка ИИ Azure.
Распознавание речи (CLU) — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
Если бот использует несколько моделей Распознавание речи (LUIS) и база знаний QnA Maker, можно использовать Bot Framework Orchestrator, чтобы определить, какая модель LUIS или QnA Maker база знаний лучше всего соответствует входным данным пользователя. Вы можете использовать bf orchestrator
команду CLI для создания файла моментального снимка Orchestrator, а затем использовать файл моментального снимка для маршрутизации входных данных пользователя в правильную модель во время выполнения.
В этой статье описывается использование существующего база знаний QnA Maker с Orchestrator.
- Для новых ботов рекомендуется использовать функции ответа на вопросы и оркестрации функций языка ИИ Azure.
- Дополнительные сведения о Orchestrator см. в разделе "Распознавание намерений" с помощью Orchestrator в Composer.
- Дополнительные сведения о команде
bf orchestrator
см . в статье Bot Framework CLI README.
Необходимые компоненты
- Учетная запись luis.ai для создания приложений LUIS.
- Учетная запись QnA Maker и существующая база знаний QnA Maker.
- Копия NLP с примером Orchestrator в C# (архивированное) или JavaScript (архивированное).
- Базовые знания о ботах, LUIS и QnA Maker.
- Установите командную строку BF CLI.
Об этом примере
Этот пример основан на предопределенном наборе проектов LUIS и QnA Maker. Однако для использования QnA Maker в боте вам потребуется существующий база знаний на портале QnA Maker. После этого бот сможет использовать базу знаний, чтобы отвечать на вопросы пользователя.
Для разработки новых ботов рекомендуется использовать Copilot Studio. Если вам нужно создать новую база знаний для бота пакета SDK Bot Framework, ознакомьтесь со следующими статьями по службам ИИ Azure:
- Что такое ответ на вопросы?
- Создание бота с часто задаваемыми вопросами
- Клиентская библиотека ответов на вопросы Azure Cognitive Language Services для .NET
OnMessageActivityAsync
вызывается для каждого полученного блока данных, введенных пользователем. Этот модуль обнаруживает намерения пользователя с наивысшими оценками и передает результат в DispatchToTopIntentAsync
. DispatchToTopIntentAsync, в свою очередь, вызывает соответствующий обработчик приложения.
ProcessSampleQnAAsync
— вопросы и ответы о боте.ProcessWeatherAsync
—для запросов о погоде.ProcessHomeAutomationAsync
— для команд домашнего освещения.
Обработчик вызывает службу LUIS или QnA Maker и возвращает полученный результат пользователю.
Создание приложений LUIS
Прежде чем создать файл моментального снимка Orchestrator, вам потребуются приложения LUIS и база знаний QnA, созданные и опубликованные. Пример бота, на который ссылается в этой статье, использует следующие модели, включенные в пример NLP With Orchestrator в папке \CognitiveModels
:
Имя | Описание |
---|---|
HomeAutomation | Приложение LUIS распознает намерение обращения к службе автоматизации и данные о сущностях. |
Погода | Приложение LUIS распознает намерения, связанные с погодой и данными о расположении. |
QnAMaker | База данных QnA Maker предоставляет ответы на несколько простых вопросов о боте. |
Создание приложений LUIS
Создайте приложения LUIS из файла HomeAutomation и Weather .lu в каталоге когнитивных моделей примера.
Выполните следующую команду, чтобы импортировать, обучить и опубликовать приложение в рабочей среде.
bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
Запишите идентификаторы приложений, отображаемое имя, ключ разработки и расположение.
Дополнительные сведения см. в статье о создании приложения LUIS на портале LUIS и получении значений для подключения к приложению LUIS в разделе "Добавление распознавания естественного языка" боту и документации LUIS по обучению и публикации приложения в рабочей среде.
Получение значений для подключения бота к базе знаний
Примечание.
Azure AI QnA Maker будет прекращен 31 марта 2025 г. С 1 октября 2022 г. вы не сможете создавать новые ресурсы или базы знаний QnA Maker. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure.
Пользовательский ответ на вопросы, компонент языка искусственного интеллекта Azure, — это обновленная версия службы QnA Maker. Дополнительные сведения о поддержке вопросов и ответов в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
Вам нужен существующий база знаний и имя узла QnA Maker и ключ конечной точки.
Совет
Документация по QnA Maker содержит инструкции по созданию, обучению и публикации база знаний.
Создание файла моментального снимка Orchestrator
Интерфейс командной строки для средства Orchestrator создает файл моментального снимка Orchestrator для маршрутизации в правильное приложение LUIS или QnA Maker во время выполнения.
Установка последней поддерживаемой версии пакета Распространяемый компонент Visual C++
Откройте командную строку или окно терминала и измените каталоги на образец каталога.
Убедитесь, что у вас есть текущая версия npm и интерфейс командной строки Bot Framework.
npm i -g npm npm i -g @microsoft/botframework-cli
Скачивание файла базовой модели Orchestrator
mkdir model bf orchestrator:basemodel:get --out ./model
Создание файла моментального снимка Orchestrator
mkdir generated bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
Установка пакетов
Перед первым запуском приложения убедитесь, что установлены следующие пакеты NuGet:
- Microsoft.Bot.Builder
- Microsoft.Bot.Builder.AI.Luis
- Microsoft.Bot.Builder.AI.QnA
- Microsoft.Bot.Builder.AI.Orchestrator
Обновление файла appsettings.json вручную
После создания всех приложений службы вам нужно добавить сведения о них в файл appsettings.json. Исходный пример кода C# (архивированный) содержит пустой файл appsettings.json:
appsettings.json
Для каждой сущности ниже добавьте значения, которые вы записали ранее при выполнении этих инструкций:
"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>",
Когда все изменения будут внесены, сохраните файл.
Подключение к службам из бота
Чтобы подключиться к службам LUIS и QnA Maker, бот извлекает сведения из файла параметров.
В BotServices.cs сведения, содержащиеся в файле конфигурации appsettings.json, используются для подключения бота Orchestrator к службам и SampleQnA
службамHomeAutomation
Weather
. Конструкторы используют предоставленные значения для подключения к этим службам.
BotServices.cs
Вызов служб из бота
Для каждого ввода от пользователя логика бота передает входные данные пользователя в Orchestrator Распознаватель, находит первое возвращаемое намерение и использует эти сведения для вызова соответствующей службы для ввода.
В файле DispatchBot.cs всякий разOnMessageActivityAsync
, когда вызывается метод, мы проверяем входящие сообщения пользователя и получаем первое намерение от Распознавателя Оркестратора. Затем мы передаём правильный topIntent
recognizerResult
метод для вызова службы и возврата результата.
bots\DispatchBot.cs
Использование результатов распознавания
Когда распознаватель Orchestrator создает результат, он указывает, какая служба может наиболее правильно обработать речевой фрагмент. Код нашего бота направляет запрос в соответствующую службу и обрабатывает полученный от нее ответ. В зависимости от намерения , возвращенного из Orchestrator, этот код использует возвращаемое намерение для маршрутизации в правильную модель LUIS или службу QnA.
bots\DispatchBot.cs
ProcessWeatherAsync
Методы ProcessHomeAutomationAsync
используют входные данные пользователя, содержащиеся в контексте поворота, чтобы получить первое намерение и сущности из правильной модели LUIS.
Метод ProcessSampleQnAAsync
использует входные данные пользователя, содержащиеся в контексте поворота, для создания ответа из база знаний и отображения этого результата пользователю.
Примечание.
Если используется рабочее приложение, выбранные методы LUIS подключаются к соответствующей службе, передают введенные пользователем данные и обрабатывают возвращаемые LUIS данные о намерениях и сущностях.
Тестирование бота
В среде разработки откройте файл с пустым кодом. Запишите адрес localhost, отображаемый в адресной строке окна браузера, открываемого приложением:
https://localhost:<Port_Number>
Откройте эмулятор Bot Framework, нажмите кнопку "Открыть бот ".
В диалоговом окне "Открытие бота" введите URL-адрес конечной точки бота, например
http://localhost:3978/api/messages
. Щелкните Подключить.Ниже для справки приведены некоторые вопросы и команды, поддерживаемые в используемых для бота службах.
- QnA Maker
hi
,good morning
what are you
,what do you do
- LUIS (домашняя автоматизация)
turn on bedroom light
turn off bedroom light
make some coffee
- LUIS (погода)
whats the weather in redmond washington
what's the forecast for london
show me the forecast for nebraska
- QnA Maker
Маршрутизация высказываний пользователей в QnA Maker
В эмуляторе введите текст
hi
и отправьте высказывание. Бот отправляет этот запрос в Orchestrator и возвращает ответ, указывающий, какое дочернее приложение должно получить это высказывание для дальнейшей обработки.Выбрав
Orchestrator Recognition Trace
строку в журнале, можно просмотреть ответ JSON в эмуляторе. Результат Orchestrator отображается в инспекторе.{ "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" }
Так как речевой фрагмент,
hi
является частью намерения QnAMaker Оркестратора и выбирается в качествеtopScoringIntent
бота второй запрос, на этот раз в приложение QnA Maker с тем же речевым фрагментом.QnAMaker Trace
Выберите строку в журнале эмулятора. Результат QnA Maker отображается в инспекторе.{ "questions": [ "hi", "greetings", "good morning", "good evening" ], "answer": "Hello!", "score": 1, "id": 96, "source": "QnAMaker.tsv", "metadata": [], "context": { "isContextOnly": false, "prompts": [] } }
[Python (archived)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator