Использование нескольких моделей 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), функция языка ИИ Azure, — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе Распознавание естественной речи.

Если бот использует несколько моделей Распознавание речи (LUIS) и базы знаний QnA Maker, вы можете использовать Bot Framework Orchestrator, чтобы определить, какая модель LUIS или QnA Maker база знаний лучше всего соответствует входным данным пользователя. Вы можете использовать bf orchestrator команду CLI, чтобы создать файл Orchestrator snapshot, а затем использовать файл snapshot для маршрутизации пользовательских входных данных в правильную модель во время выполнения.

В этой статье описывается использование существующего база знаний QnA Maker с Orchestrator.

Предварительные требования

Об этом примере

Этот пример основан на предопределенном наборе проектов LUIS и QnA Maker. Однако для использования QnA Maker в боте вам потребуется существующая база знаний на портале QnA Maker. После этого бот сможет использовать базу знаний, чтобы отвечать на вопросы пользователя.

Для разработки новых ботов рекомендуется использовать Power Virtual Agents. Если вам нужно создать новую база знаний для бота пакета SDK Bot Framework, ознакомьтесь со следующими статьями о службах ИИ Azure:

Схема классов C#.

OnMessageActivityAsync вызывается для каждого полученного блока данных, введенных пользователем. Этот модуль обнаруживает намерения пользователя с наивысшими оценками и передает результат в DispatchToTopIntentAsync. DispatchToTopIntentAsync, в свою очередь, вызывает соответствующий обработчик приложения.

  • ProcessSampleQnAAsync — для вопросов с часто задаваемыми вопросами о ботах.
  • ProcessWeatherAsync —для запросов о погоде.
  • ProcessHomeAutomationAsync — для команд домашнего освещения.

Обработчик вызывает службу LUIS или QnA Maker и возвращает полученный результат пользователю.

Создание приложений LUIS

Перед созданием файла Orchestrator snapshot необходимо создать и опубликовать приложения LUIS и базы знаний QnA. Пример бота, упоминаемого в этой статье, использует следующие модели, включенные в пример NLP With Orchestrator в папке \CognitiveModels :

Имя Описание
HomeAutomation Приложение LUIS распознает намерение обращения к службе автоматизации и данные о сущностях.
Weather Приложение LUIS распознает намерения, связанные с погодой и данными о расположении.
QnA Maker База данных QnA Maker предоставляет ответы на несколько простых вопросов о боте.

Создание приложений LUIS

Создайте приложения LUIS из LU-файлов HomeAutomation и Weather в каталоге cognitive models примера.

  1. Выполните следующую команду, чтобы импортировать, обучить и опубликовать приложение в рабочей среде.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Запишите идентификаторы приложений, отображаемые имена, ключ разработки и расположение.

Дополнительные сведения см. в статьях Создание приложения 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 содержатся инструкции по созданию, обучению и публикации база знаний.

Создание файла snapshot Orchestrator

Интерфейс CLI для средства Orchestrator создает файл snapshot Orchestrator для маршрутизации в правильное приложение LUIS или QnA Maker во время выполнения.

  1. Установка последней поддерживаемой версии пакета Распространяемый компонент Visual C++

  2. Откройте командную строку или окно терминала и измените каталоги на пример каталога.

  3. Убедитесь, что у вас установлена текущая версия npm и интерфейс командной строки Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Скачивание файла базовой модели Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Создание файла snapshot 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

C# (архивный)

Для каждой сущности ниже добавьте значения, которые вы записали ранее при выполнении этих инструкций:

"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 к службам HomeAutomation, Weather и SampleQnA . Конструкторы используют предоставленные значения для подключения к этим службам.

BotServices.cs

C# (архивный)

Вызов служб из бота

Для каждого ввода от пользователя логика бота передает пользовательский ввод в Распознаватель Orchestrator, находит первое возвращенное намерение и использует эти сведения для вызова соответствующей службы для ввода.

В файле DispatchBot.cs при каждом OnMessageActivityAsync вызове метода мы проверка входящее сообщение пользователя и получаем основное намерение от Распознавателя Orchestrator. Затем мы передаем topIntent и в recognizerResult правильный метод, чтобы вызвать службу и вернуть результат.

bots\DispatchBot.cs

C# (архивный)

Использование результатов распознавания

Когда распознаватель Orchestrator выдает результат, он указывает, какая служба может наиболее правильно обработать речевой фрагмент. Код нашего бота направляет запрос в соответствующую службу и обрабатывает полученный от нее ответ. В зависимости от намерения , возвращенного из Orchestrator, этот код использует возвращенное намерение для маршрутизации в правильную модель LUIS или службу QnA.

bots\DispatchBot.cs

C# (архивный)

Методы ProcessHomeAutomationAsync и ProcessWeatherAsync используют входные данные пользователя, содержащиеся в контексте шага, для получения основных намерений и сущностей из правильной модели LUIS.

Метод ProcessSampleQnAAsync использует входные данные пользователя, содержащиеся в контексте шага, для создания ответа на основе база знаний и отображения этого результата пользователю.

Примечание

Если используется рабочее приложение, выбранные методы LUIS подключаются к соответствующей службе, передают введенные пользователем данные и обрабатывают возвращаемые LUIS данные о намерениях и сущностях.

Тестирование бота

  1. В среде разработки откройте файл с пустым кодом. Запишите адрес localhost , отображаемый в адресной строке окна браузера, открытого приложением: https://localhost:<Port_Number>.

  2. Откройте Bot Framework Emulator, нажмите кнопку Открыть бот.

  3. В диалоговом окне Открытие бота введите URL-адрес конечной точки бота, например http://localhost:3978/api/messages. Нажмите кнопку Соединить.

  4. Ниже для справки приведены некоторые вопросы и команды, поддерживаемые в используемых для бота службах.

    • 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

  1. В эмуляторе введите текст hi и отправьте речевой фрагмент. Бот отправляет этот запрос в Orchestrator и возвращает ответ, указывающий, какое дочернее приложение должно получить этот речевой фрагмент для дальнейшей обработки.

  2. 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, является частью намерения Orchestrator QnAMaker и выбран в качестве topScoringIntent, бот выполнит второй запрос, на этот раз к приложению QnA Maker, с тем же речевым фрагментом.

  3. 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 (архив)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator