Skip to content

ru Agent

dilyararimovna edited this page May 9, 2023 · 2 revisions

Что такое DeepPavlov Agent?

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

Документация

Архитектура

Исходный код

Ссылки

Почему мы используем DeepPavlov Agent

Текст взят из статьи на Medium

Диалоговая система обычно содержит модуль понимания естественного языка (NLU), который может включать в себя несколько моделей поиска нейронных сетей и графов знаний (KG). Сразу введем терминологию dp-агента и назовем NLU-компоненты диалоговой системы «аннотаторами». Кроме того, диалоговая система также включает в себя некоторые компоненты генерации ответов (назовем их «навыки»), которые могут быть простыми алгоритмами, основанными на правилах, использующими информацию от аннотаторов, нейронного поиска или генеративных моделей, которые потенциально требуют много времени для вывода и вычислительных ресурсов. Кроме того, некоторые нейронные модели не требуют ничего, кроме текущего высказывания пользователя и контекста диалога, содержащего несколько предыдущих высказываний. Однако следует отметить, что одним из самых популярных подходов к генерации в «Alexa Prize Challenge 4» была генерация ответов, основанных на знаниях. Это подразумевает не только текущее высказывание и контекст диалога, но и абзац знаний в качестве входных данных для нейронной модели. Такая информация может быть получена в Аннотаторах с использованием методов поиска знаний. Таким образом, извлечение знаний и генерация ответов стали последовательными процедурами.

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

Диалоговая система DREAM построена на библиотеке dp-agent. Это библиотека с открытым исходным кодом для создания сложных диалоговых систем и чат-ботов. Основной пайплайн dp-агента представлен на картинке ниже. Существуют основные группы компонентов: аннотаторы, навыки, аннотаторы-кандидаты, аннотаторы ответов и два основных компонента управления диалогом — селектор навыков и селектор ответов. Состояние диалога — это разделяемая память, содержащая всю информацию о диалоге, поскольку dp-agent подразумевает компоненты без состояния (они не хранят информацию о конкретных диалогах). Точек синхронизации всего две — Skill Selector и Response Selector. Все компоненты в других группах могут работать параллельно, а агент позволяет указать, какие сервисы требуются друг другу в конфигурационном файле.

Конвейер dp-agent асинхронный, т.е. запрос одного пользователя не блокирует агента, и не мешает агенту получать и обрабатывать запросы от других пользователей. Например, есть три компонента A, B и C, и для выполнения запроса к B и C требуется выход сервиса A. Итак, агент отправляет запрос к сервису A, и после получения результата от сервиса A он отправляет запросы к компонентам B и C. Если в этот момент агент получает новый запрос от другого пользователя, то агент отправляет запрос в сервис A, несмотря на то, что он не получил ответа от B и C за первый пользователь. Кстати, для некритичных компонентов в пайплайне можно установить таймаут ожидания ответа от них, чтобы сократить время ответа агента.

Каждый сервис развертывается в отдельном контейнере докеров. Кроме того, для самого агента и базы данных используются отдельные контейнеры (последняя — в случае локального запуска бота). Для разработки можно запустить диалоговую систему локально с помощью docker-compose, при использовании в продакшене мы используем Kubernetes. Поскольку диалоговая система DREAM сейчас требует много вычислительных ресурсов, мы развернули ее на нашем сервере и сделали доступной для разработчиков с помощью прокси. Итак, разработчики обычно запускают локально только контейнер агента, базу данных и интересующие модифицированные сервисы. Все остальные контейнеры заменяются небольшими, содержащими nginx, который отправляет запросы в систему на наших серверах.

Диалоговая система DREAM работала на ресурсах Amazon, во время Challenges обрабатывала 7 TPS (транзакций в секунду) за 1 минуту. Среднее время отклика составляло около 3,5–4 секунд. Основными недостатками развертывания DREAM были использование относительно медленной MongoDB для хранения состояния диалогов и набора инструментов для мониторинга и оптимизации нагрузки, которые требовали дальнейшего улучшения. Кроме того, мы хотим включить большие нейронные модели для генерации ответов, время вывода которых велико, но они используют только текущее высказывание и контекст диалога, чтобы их можно было запрашивать параллельно с аннотаторами и навыками.