Поделиться через


Использование нескольких моделей 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.

Необходимые компоненты

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

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

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

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

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 в каталоге когнитивных моделей примера.

  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 содержит инструкции по созданию, обучению и публикации база знаний.

Создание файла моментального снимка Orchestrator

Интерфейс командной строки для средства Orchestrator создает файл моментального снимка 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. Создание файла моментального снимка 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 к службам и SampleQnA службамHomeAutomationWeather. Конструкторы используют предоставленные значения для подключения к этим службам.

BotServices.cs

C# (архивировано)

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

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

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

bots\DispatchBot.cs

C# (архивировано)

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

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

bots\DispatchBot.cs

C# (архивировано)

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

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

Примечание.

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

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

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

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

  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является частью намерения 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 (archived)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator