Сдача проектной работы 5

В этом уроке вы познакомитесь с проектной работой пятого спринта. Это поможет вам оценить её сложность и распланировать своё время.
🔍 Обратите внимание: вам не нужно выполнять эти задания прямо сейчас. Можете пропустить этот урок и перейти к изучению теории. В конце спринта будет отдельный урок для сдачи проекта: там мы повторим задания и дадим форму, через которую нужно отправить решение.

Описание бизнес-проблемы

Ваша задача — разработать и интегрировать интеллектуального ассистента в веб-приложение. Проект выходит за рамки простого создания чат-бота и включает полную цепочку разработки и развёртывания решения в продакшн-среду.
Вы начнёте с загрузки готового веб-приложения из репозитория, представляющего собой основу вашего проекта. Это приложение уже готово к работе с внешними сервисами, и вам нужно расширить его возможности, интегрировав в него интеллектуального ассистента.
В качестве платформы для создания и настройки ассистента вы будете использовать Rasa (платформа для построения диалоговых систем, чат-ботов и AI-ассистенотов). За счёт подключения LLM модели вы сделаете ассистента умным.
После того как ассистент будет настроен и запущен, вы интегрируете его с React-приложением через API. Основное внимание будет уделено работе ассистента с текстовыми запросами, распознаванию намерений и предоставлению персонализированных ответов на основе обученной модели. Завершающим этапом работы станет внесение изменений в виртуальную машину с помощью Terraform.

Подробная инструкция

Выполнять проектную работу вы будете в Yandex Cloud.
🔍 Вам не нужно самостоятельно оплачивать облачные ресурсы. Наши партнёры из Yandex Cloud выдали вам грант — его хватит, чтобы выполнить практические задания.
Проверьте свою почту: вам должно было прийти письмо с промокодом. Если вы не можете найти письмо, проверьте папки спама и рассылки. Если его там нет — обратитесь к куратору.
Это не стартовый грант, который Yandex Cloud выдаёт всем новым пользователям, а дополнительный. Подробнее о разных видах грантов можно почитать в документации.
Обратите внимание: чтобы гранта точно хватило, нужно контролировать расход грантовых средств! Это можно делать с помощью бюджета и уведомлений, которые настраиваются в разделе «Биллинг». Детали — в документации.
Прежде чем приступить к практике, активируйте промокод по инструкции ниже.
Инструкция как активировать промокод.pdf
☝️ Настройте виртуальную машину с параметрами — 2 ядра и 8 ГБ оперативной памяти.

Задание 1. Подготовка среды разработки

Выполните следующие шаги:
  1. Установите IDE в рабочую среду.
  2. Загрузите проект приложения из репозитория.
  3. Внимательно изучите React-компоненты приложения.

Задание 2. Развёртывание веб-приложения

  1. Загрузите и установите все необходимые зависимости npm install.
  2. Соберите проект npm run build.
  3. Запустите проект npm run start.
Результатом этого шага должно быть запущенное приложение ассистента в браузере.
Это ещё не всё. Вам нужно подключить приложение к самой платформе.

Задание 3. Установка и настройка окружения

Предварительно установите:
  • Python (3.7-3.10): Rasa работает с версиями Python 3.7 и выше, но ниже 3.11.
  • pip — менеджер пакетов Python, который будет использоваться для установки Rasa.
  • Virtualenv (рекомендуется): использование виртуальной среды для изоляции окружения и зависимостей проекта.
  1. Убедитесь, что pip установлен. Выполните команду:
    python -m ensurepip --upgrade
  2. Установите virtualenv, если он ещё не установлен:
    pip install virtualenv
  3. Создайте виртуальное окружение:
    python -m venv rasa_env
  4. Активируйте виртуальное окружение:
    source rasa_env/bin/activate

Задание 4. Установка Rasa

  1. Установите Rasa через pip:
    pip install rasa
  2. Установите библиотеку Transformers для работы с предобученными LLM моделями, такими как BERT, GPT:
    pip install transformers
  3. Проверьте, что Rasa и окружение установлено, выполните команду:
    rasa --version
    Если установка прошла успешно, то вы увидите похожее:
    Rasa Version      :         3.6.20
    Minimum Compatible Version: 3.5.0
    Rasa SDK Version  :         3.6.2
    Python Version    :         3.10.15

Задание 5. Настройка Rasa и подключение модели

После установки Rasa инициализируйте новый проект Rasa, который создаст структуру вашего проекта:
rasa init

Задание 6. Адаптация модели и платформы под русский язык

Для обработки русского языка и использования предобученных моделей, таких как BERT, нужно правильно настроить пайплайн в config.yml. Мы используем модель BERT из ранее установленного пакета transformers.
☝️В отличие от английского, где слова легко разделяются пробелами, в русском языке некоторые слова могут быть сложными для стандартной токенизации. Пригодятся специальные токенизаторы для русского языка. Мы рекомендуем JiebaTokenizer.
Файл config.yml:

YML

language: ru

pipeline:
- name: WhitespaceTokenizer                # Токенизатор, разделяющий текст по пробелам
- name: RegexFeaturizer                    # Извлечение признаков с помощью регулярных выражений
- name: LexicalSyntacticFeaturizer         # Лексико-синтаксический анализатор
- name: CountVectorsFeaturizer             # Извлечение признаков по частоте слов
  analyzer: "char_wb"                      # Символьные N-граммы
  min_ngram: 1
  max_ngram: 2                             # Уменьшены размеры N-грамм для ускорения

# Подключение предобученной модели трансформера (BERT)
- name: "LanguageModelFeaturizer"
  model_name: "bert"                       # Модель BERT для русского языка
  model_weights: "bert-base-cased"          # Весы модели BERT
  cache_dir: null

- name: DIETClassifier                      # Классификатор на базе DIET
  epochs: 1                                 # Минимальное количество эпох обучения
  transformer_size: 32                      # Минимальный размер слоя трансформера
  number_of_transformer_layers: 1           # Один слой трансформера
  use_masked_language_model: false          # Отключено для ускорения
  batch_strategy: "balanced"
  hidden_layers_sizes:
    text: [32]                              # Минимальные скрытые слои

- name: EntitySynonymMapper                 # Маппер синонимов сущностей
- name: ResponseSelector                    # Минимальный выбор ответа
  epochs: 1                                 # Минимальное количество эпох обучения

policies:
  - name: MemoizationPolicy
    max_history: 2                          # Минимальная история
  - name: RulePolicy
  - name: TEDPolicy
    max_history: 2                          # Минимальное количество шагов в истории
    epochs: 1                               # Минимальное количество эпох обучения
    constrain_similarities: true 
Мы подготовили конфигурационные файлы и сценарии. Вы можете загрузить их или создать свои.
  1. Замените настроенные конфигурации в соответствующих директориях:
    stories.yml
    rules.yml
    nlu.yml
    domain.yml
  2. Выполните тренировку модели на новой конфигурации:
    rasa train 
  3. Запустите ассистента:
    rasa run --enable-api 
  4. Теперь запустите React-приложение из первого задания.
Готово!
Проектная работа считается успешно выполненной, если ассистент может вас поприветствовать и рассказать о проектировании решений с микросервисной архитектурой.

Дополнительное задание. Управление облачной средой с помощью IaC

Вам предстоит внести изменения в конфигурацию вашей виртуальной машины с помощью Terraform.
Сейчас ваша виртуальная машина настроена с минимальными параметрами. Выполните следующие шаги:
  1. Откройте конфигурационный файл Terraform, который использовался для создания виртуальной машины. Найдите блок ресурса, отвечающий за описание виртуальной машины (yandex_compute_instance).
  2. В этом блоке обратите внимание на секцию resources, где указаны параметры вашей виртуальной машины — количество ядер (cores) и объём оперативной памяти (memory). Сейчас эти значения установлены на минимальном уровне.
  3. Измените конфигурацию виртуальной машины, увеличив количество ядер до 4 и объём оперативной памяти до 8 ГБ. Для этого измените значения параметров cores и memory в соответствующем блоке.
  4. После того как вы внесете изменения в конфигурационный файл, сохраните его и выполните команду terraform plan в вашем терминале. Команда покажет, какие изменения будут внесены в инфраструктуру. Убедитесь, что Terraform правильно распознаёт изменения и планирует обновить вашу виртуальную машину в соответствии с новыми параметрами.
  5. Если план изменений вас устраивает, выполните команду terraform apply, чтобы применить изменения. После этого Terraform внесёт изменения в существующую виртуальную машину, увеличив её ресурсы в соответствии с обновлённой конфигурацией.
  6. После успешного выполнения команды terraform apply проверьте, что изменения действительно применились. Вы можете это сделать, перейдя в консоль управления Yandex Cloud и проверив параметры вашей виртуальной машины: у неё теперь должно быть 4 ядра и 8 ГБ оперативной памяти.

Сдача решения

  1. Настройте логирование всех запросов в конфиге Rasa. Запустите Rasa командой с параметрами rasa run --log-level DEBUG логи отображаются в терминале. Это основной способ просмотра логов в режиме реального времени.
  2. Поприветствуйте ассистента в UI веб-приложения. Проконсультируйтесь с ним на тему микросервисной архитектуры (например, что это такое и как её реализовать).
  3. Выгрузите лог Rasa в GitHub и сделайте пул-реквест.
Если всё готово, отправьте ссылку на репозиторий во вкладке «Ревью».
Не забудьте проверить, что репозиторий публичный. Если отправите ссылку на приватный репозиторий, ревьюер не сможет прокомментировать ваше решение и вернёт его на доработку.
После того как отправите ссылку, не вносите изменения в проект. Дождитесь комментариев ревьюера.