Основы Microsoft Bot Framework

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Бот — это приложение, с которым пользователи взаимодействуют, общаясь с помощью текста, графики (карт или изображений) или речи. Azure AI Служба Bot — это облачная платформа. Он размещает боты и делает их доступными для каналов, таких как Microsoft Teams, Facebook или Slack.

Служба Bot Framework, которая является компонентом Служба Bot ИИ Azure, отправляет информацию между приложением, подключенным к боту пользователя, и ботом. Каждый канал может включать дополнительные сведения в действия, которые они отправляют. Прежде чем создавать боты, важно понять, как бот использует объекты действий для взаимодействия с пользователями.

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

activity diagram

Служба Bot Framework отправляет обновление беседы, когда сторона присоединяется к беседе. Например, при запуске беседы с эмулятором Bot Framework может появиться два действия обновления беседы (один для пользователя, присоединенного к беседе, и один для присоединения бота). Чтобы отличить эти действия обновления беседы, проверка, который включен в добавленное свойство действия.

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

Совет

В каждом канале реализован протокол Bot Framework, и как каждый канал делает это, может быть немного иначе. Например, некоторые каналы сначала отправляют действия обновления беседы, а некоторые отправляют действия обновления беседы после отправки первого действия сообщения. Канал может включать бота и пользователя в одно действие обновления беседы, а другой может отправлять два действия обновления беседы.

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

Пакет SDK Bot Framework

Пакет SDK Bot Framework позволяет создавать боты, которые могут размещаться в Служба Bot ИИ Azure. Служба определяет REST API и протокол действий для взаимодействия бота и каналов или пользователей. Пакет SDK основан на этом REST API и предоставляет абстракцию службы, чтобы сосредоточиться на логике беседы. Хотя вам не нужно понимать службу REST для использования пакета SDK, понимание некоторых его функций может оказаться полезным.

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

Примечание.

Поддержка функций, предоставляемых пакетом SDK и REST API, зависит от канала. Вы можете протестировать бота с помощью эмулятора Bot Framework, но также протестировать все функции бота на каждом канале, в котором планируется сделать бот доступным.

Взаимодействие включает обмен действиями, которые обрабатываются в поворотах.

Процедуры

Каждое взаимодействие между пользователем (или каналом) и ботом представлено как действие. Схема действий Bot Framework определяет действия, которые можно обменивать между пользователем или каналом и ботом. Действия могут представлять человеческий текст или речь, уведомления приложения к приложению, реакции на другие сообщения и т. д.

Очередность

При общении люди обычно говорят по очереди. Как правило, бот реагирует на вводимые пользователем данные. В пакете SDK Bot Framework ход состоит из входящего действия пользователя и всех действий, которые бот немедленно возвращает пользователю в ответ. Вы можете подумать о том, как обработка, связанная с ботом, получающим заданное действие.

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

Структура приложения Bot

Пакет SDK определяет класс бота , который обрабатывает логику беседы для приложения бота. Класс бота:

  • Распознает и интерпретирует входные данные пользователя.
  • Причины ввода и выполнения соответствующих задач.
  • Создает ответы о том, что бот делает или сделал.

Пакет SDK также определяет класс адаптера , который обрабатывает подключение к каналам. Адаптер:

  • Предоставляет метод обработки запросов из и методов для создания запросов к каналу пользователя.
  • Включает конвейер по промежуточного слоя, который включает обработку за пределами обработчика поворота бота.
  • Вызывает обработчик поворота бота и перехватывает ошибки, которые не обрабатываются в обработчике поворота.

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

A bot has connectivity and reasoning elements, and an abstraction for state

Пакет SDK не требует использования определенного уровня приложения для отправки и получения веб-запросов. Bot Framework содержит шаблоны и примеры для ASP.NET (C#), restify (JavaScript) и aiohttp (Python). Однако вы можете использовать другой уровень приложений для приложения.

При создании бота с помощью пакета SDK вы предоставляете код для получения HTTP-трафика и перенаправит его в адаптер. Bot Framework предоставляет несколько шаблонов и примеров, которые можно использовать для разработки собственных ботов.

Примечание.

Пакеты SDK для JavaScript, C# и Python для Bot Framework по-прежнему будут поддерживаться, однако пакет SDK java отменяется с окончательной долгосрочной поддержкой, заканчивающейся в ноябре 2023 года. В этом репозитории будут выполняться только критически важные исправления безопасности и ошибок.

Существующие боты, созданные с помощью пакета SDK для Java, будут продолжать функционировать.

Для создания нового бота рекомендуется использовать Power Virtual Agent и ознакомиться с выбором подходящего решения чат-бота.

Дополнительные сведения см. в статье "Будущее создания бота".

Логика бота

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

Пакет SDK предоставляет несколько различных парадигм для управления логикой бота.

  • Обработчики действий предоставляют модель на основе событий, в которой входящие типы действий и подтипы являются событиями. Рассмотрим обработчик действий для ботов с ограниченными короткими взаимодействиями с пользователем.
    • Используйте обработчик действий и реализуйте обработчики для каждого типа действия или подтипа бота распознает и реагирует на них.
    • Используйте обработчик действий Teams для создания ботов, которые могут подключаться к каналу Teams. (Канал Teams требует, чтобы бот обрабатывал некоторые действия, связанные с каналом.)
  • Библиотека диалогов предоставляет модель на основе состояния для управления длительным диалогом с пользователем.
  • Реализуйте собственный класс бота и укажите собственную логику для обработки каждого поворота. Пример см. в том, как создать собственные запросы для сбора входных данных пользователей.

Адаптер бота

Адаптер имеет метод действия процесса для запуска поворота.

  • Он принимает текст запроса (полезные данные запроса, переведенные в действие) и заголовок запроса в качестве аргументов.
  • Он проверка, является ли заголовок проверки подлинности допустимым.
  • Он создает объект контекста для поворота. Объект контекста содержит сведения о действии.
  • Он отправляет объект контекста через конвейер ПО промежуточного слоя .
  • Затем он отправляет объект контекста обработчику поворота бота.

Адаптер также:

  • Форматирует и отправляет действия ответа. Эти ответы обычно представляют собой сообщения для пользователя, но также могут включать сведения, которые будут использоваться каналом пользователя напрямую.
  • Surfaces другие методы, предоставляемые REST API бота Подключение or, например обновление сообщения и удаление сообщения.
  • Перехват ошибок или исключений не появляется в противном случае.

Контекст поворота

Объект контекста шага предоставляет сведения о действии. К таким объектам относятся, например, идентификаторы канала, отправителя и получателя, а также другие необходимые данные для обработки действия. Кроме того, можно добавлять в объект контекста шага сведения при обработке шага на разных уровнях бота.

Контекст шага является одной из важнейших абстракций в пакете SDK. Он не только несет входящий трафик для всех компонентов ПО промежуточного слоя и логики приложения, но и предоставляет механизм, в котором компоненты по промежуточного слоя и логика бота могут отправлять исходящие действия.

ПО промежуточного слоя

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

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

В разделе по промежуточному по промежуточному слоя описывается по промежуточному слоям более подробно.

Состояние бота и хранилище

Как и в других веб-приложениях, бот по сути без отслеживания состояния. Состояние в боте следует той же парадигме, что и современные веб-приложения, и пакет SDK Bot Framework предоставляет уровни хранения и абстракции управления состояниями, чтобы упростить управление состояниями.

В разделе управления состоянием описываются эти функции состояния и хранилища.

Конечная точка обмена сообщениями и подготовка

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

Следуйте инструкциям из краткого руководства по созданию и тестированию простого эхо-бота .

Сведения об HTTP

Действия поступают в бот из службы Bot Framework через запросы HTTP POST. В ответ на входящий запрос POST бот возвращает код состояния HTTP 200. Действия, отправляемые из бота в канал, отправляются в отдельном запросе POST к службе Bot Framework. В ответ на него также поступает код состояния HTTP 200.

Протокол не указывает порядок, в котором выполняются эти запросы POST и их подтверждения. Но на распространенных платформах служб HTTP такие запросы обычно являются вложенными, то есть исходящий HTTP-запрос выполняется ботом в процессе обработки входящего HTTP-запроса. Этот шаблон показан на предыдущей схеме. Поскольку здесь есть два раздельных HTTP-подключения с откликами на них, модель безопасности должна учитывать оба из них.

Примечание.

Бот имеет 15 секунд, чтобы подтвердить вызов с состоянием 200 на большинстве каналов. Если бот не отвечает в течение 15 секунд, возникает ошибка HTTP GatewayTimeout (504).

Стек обработки действия

Давайте рассмотрим предыдущую схему последовательности с фокусом на поступлении действия сообщения.

Sequence diagram illustrating how an activity is processed by a bot.

Канал отправляет сообщение пользователя в Служба Bot ИИ Azure, а служба перенаправит сообщение в конечную точку обмена сообщениями бота. Ответ бота отправляется пользователю в область очереди.

В приведенном выше примере в ответ на действие сообщения бот отправляет другое действие сообщения, помещая в него текст из первого сообщения. Обработка начинается с поступления на веб-сервер запроса HTTP POST, в котором сведения о действии передаются в формате полезных данных JSON. Часто ASP.NET проекты используются для ботов C#, а для ботов JavaScript Node.js используется популярная платформа, например Express или restify.

Встроенный компонент пакета SDK, который называется адаптером, является ядром среды выполнения SDK. Действие передается в тексте запроса HTTP POST в формате JSON. Этот json десериализирован для создания объекта действия , который затем передается адаптеру через метод действия процесса. При получении действия адаптер создает turn context (контекст шага) и вызывает ПО промежуточного слоя.

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

Важно!

Поток, обрабатывающий основной бот, обращается к удалению объекта контекста после его завершения. Обязательно ожидайте параметр await любых вызовов активности, чтобы первичный поток дождался сгенерированного действия до завершения его работы и утилизации контекста включения. В противном случае, если ответ (или какой-либо из его обработчиков) после длительной паузы попытается воздействовать на объект контекста, может возникнуть ошибка Контекст был удален.

Шаблоны для ботов

Необходимо выбрать уровень приложения, используемый для приложения; Однако в Bot Framework есть шаблоны и примеры для ASP.NET (C#), restify (JavaScript) и aiohttp (Python). Документация написана, если вы используете одну из этих платформ, но пакет SDK не требует от вас. В кратком руководстве по созданию бота приведены инструкции по доступу и установке шаблонов.

Бот — это веб-приложение, и шаблоны предоставляются для каждой языковой версии пакета SDK. Все шаблоны предоставляют реализацию и адаптер конечной точки по умолчанию. Каждый шаблон включает:

  • Подготовка ресурсов
  • Реализация конечной точки HTTP для конкретного языка, которая направляет входящие действия в адаптер.
  • Объект адаптера
  • Объект бота

Основное различие между различными типами шаблонов — в объекте бота. Шаблоны:

  • Пустой бот
    • Включает обработчик действий, который приветствует пользователя к беседе, отправив сообщение hello world в первую очередь беседы.
  • Эхо-бот
    • Использует обработчик действий для приветствия пользователей и обратного ввода пользователей.
  • Основной бот
    • Объединяет множество функций пакета SDK и демонстрирует рекомендации для бота.
    • Использует обработчик действий для приветствия пользователей.
    • Использует диалоговое окно компонента и дочерние диалоги для управления беседой.
    • Диалоговые окна используют функции Распознавание речи (LUIS) и QnA Maker.

Примечание.

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 см. в разделе "Распознавание естественного языка".

Дополнительные сведения

Управление ресурсами бота

Вам потребуется управлять ресурсами для бота, например идентификатором приложения и паролем, а также сведениями для всех подключенных служб. При развертывании бота потребуется безопасный доступ к этой информации. Чтобы избежать сложности, большинство статей пакета SDK Bot Framework не описывают, как управлять этой информацией.

Адаптеры каналов

Пакет SDK также позволяет использовать адаптеры каналов, в которых сам адаптер дополнительно выполняет задачи, которые служба бота Подключение or service обычно выполняет для канала.

Пакет SDK предоставляет несколько адаптеров каналов на некоторых языках. Дополнительные адаптеры каналов доступны через репозитории Botkit и Community. Дополнительные сведения см. в таблице репозитория пакета SDK Bot Framework для каналов и адаптеров.

REST API бота Подключение or

Пакет SDK Bot Framework упаковывает и строится на основе REST API бота Подключение or. Если вы хотите понять базовые HTTP-запросы, поддерживающие пакет SDK, см. статьи о проверке подлинности Подключение or и связанных статьях. Действия, которые бот отправляет и получает, соответствуют схеме действий Bot Framework.

Следующие шаги