Practice_reports/surfaces/putilovsky_mikhail.md

35 KiB
Raw Blame History

Журнал практики

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ
(национальный исследовательский университет)»

Институт № 8 «Компьютерные науки и прикладная математика»

Кафедра ЦОП ВО «ТОП-ИТ»

Учебная группа: [указать группу]

ФИО обучающегося: [Путиловский Михаил ...]

Направление подготовки / специальность:
[указать код и название направления]

Вид практики: [указать вид практики]

Оценка за практику: ____________________ [ФИО руководителя]

Москва 2026

1. Место и сроки проведения практики

Наименование организации: ИИ-лаборатория lambda

Сроки проведения практики:

Дата начала практики: [дата начала]

Дата окончания практики: [дата окончания]

2. Инструктаж по технике безопасности

Проведен инструктаж по технике безопасности.

Подпись проводившего: __________________________

Расшифровка подписи: [ФИО проводившего инструктаж]

Дата проведения: [дата начала практики]

3. Индивидуальное задание обучающегося

Разработка и сопровождение поверхностей взаимодействия пользователей с AI-агентами платформы Lambda. В рамках задания необходимо исследовать пользовательские сценарии Telegram и Matrix, спроектировать общий surface-слой, реализовать простой Telegram-прототип, разработать и довести до рабочего deployment-состояния Matrix-поверхность, подготовить эксплуатационную документацию и координировать командную работу по дальнейшему развитию поверхностей, включая старт направления MAX.

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

4. План выполнения индивидуального задания обучающегося

№ п/п Место проведения Тема Период выполнения
1 ИИ-лаборатория lambda Инструктаж по технике безопасности. Знакомство с задачами лаборатории Lambda, агентной платформой и направлением пользовательских поверхностей. [дата]-[дата]
2 ИИ-лаборатория lambda Исследование Telegram Bot API, Matrix API, вариантов организации пользовательских чатов, команд и передачи вложений. [дата]-[дата]
3 ИИ-лаборатория lambda Проектирование общего ядра surface-слоя: протокол событий, диспетчеризация, хранение состояния, абстракция платформенного клиента. [дата]-[дата]
4 ИИ-лаборатория lambda Реализация простого Telegram-прототипа и проверка режима Telegram Forum Topics. [дата]-[дата]
5 ИИ-лаборатория lambda Реализация Matrix-поверхности: onboarding, рабочие комнаты, команды управления чатами, маршрутизация сообщений и состояние чатов. [дата]-[дата]
6 ИИ-лаборатория lambda Интеграция Matrix-поверхности с реальным agent API, поддержка потоковых ответов и разделение контекстов по Matrix room. [дата]-[дата]
7 ИИ-лаборатория lambda Реализация передачи файлов через shared workspace, поддержки нескольких агентов и маршрутизации пользователей к агентам. [дата]-[дата]
8 ИИ-лаборатория lambda Подготовка Docker- и production deployment-артефактов, документации для передачи Matrix-поверхности в эксплуатацию. [дата]-[дата]
9 ИИ-лаборатория lambda Координация работ команды по дальнейшим поверхностям, включая старт направления MAX. [дата]-[дата]
10 ИИ-лаборатория lambda Подготовка материалов отчета, описание архитектуры проекта, результатов разработки и итогов практики. [дата]-[дата]

Утверждаю: __________________________ / [ФИО руководителя от МАИ] / [дата начала практики]
Подпись руководителя от МАИ, расшифровка подписи, дата утверждения

Утверждаю: __________________________ / [ФИО руководителя от организации] / [дата начала практики]
Подпись руководителя от организации/предприятия, расшифровка подписи, дата утверждения

Ознакомлен: __________________________ / [Путиловский М.] / [дата начала практики]
Подпись обучающегося, расшифровка подписи, дата ознакомления

5. Отзыв руководителя практики от организации/предприятия

Обучающийся группы [указать группу] [ФИО] проходил практику в ИИ-лаборатории lambda.

В ходе практики обучающийся был назначен тимлидом команды поверхностей взаимодействия с агентами и принимал участие в разработке surface-слоя для платформы Lambda. Основное внимание было уделено проектированию транспортно-независимой архитектуры, реализации простого Telegram-прототипа, разработке полноценной Matrix-поверхности, интеграции с agent API, передаче файлов через shared workspace и подготовке deployment-артефактов.

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

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

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

Материалы, изложенные в отчете обучающегося, полностью соответствуют индивидуальному заданию, рекомендуемая оценка «отлично».

Подпись руководителя от организации/предприятия: __________________________

Расшифровка подписи: [ФИО руководителя]

Дата: _____ __________ 2026 г.

6. Отчет обучающегося по практике

Цель и задачи практики

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

В рамках практики были поставлены следующие задачи:

  • изучить ограничения Telegram Bot API и Matrix API для сценариев агентного общения;
  • спроектировать общий surface-слой, не зависящий от конкретного мессенджера;
  • реализовать простой Telegram-прототип для проверки ранних UX-гипотез;
  • реализовать полноценную Matrix-поверхность для рабочих агентных чатов;
  • подключить Matrix-поверхность к реальному agent API;
  • обеспечить разделение контекстов по комнатам и маршрутизацию пользователей к агентам;
  • реализовать передачу файлов через shared workspace;
  • подготовить Docker- и deployment-артефакты;
  • оформить техническую документацию;
  • координировать командную работу по новым поверхностям, включая направление MAX.

Общий контекст проекта

Практика проходила в ИИ-лаборатории lambda и была связана с развитием агентной платформы Lambda. Одной из задач платформы является предоставление пользователю удобного интерфейса для работы с AI-агентом. Пользователь не должен напрямую взаимодействовать с внутренними сервисами платформы: ему нужен привычный канал общения, например мессенджер, в котором можно создать отдельный чат, отправить запрос, приложить файл и получить ответ агента.

В ходе практики я был назначен тимлидом команды поверхностей взаимодействия с агентами. Основным техническим результатом стала Matrix-поверхность, которая была доведена до рабочего состояния, задеплоена и используется для взаимодействия с агентами Lambda. Дополнительно был реализован простой Telegram-прототип, использованный для проверки ранних архитектурных и UX-решений. После стабилизации Matrix-направления часть команды начала работу над поверхностью MAX; эту работу я координировал как тимлид, но не выполнял ее реализацию лично.

Разработка велась в репозитории surfaces-bot. По истории Git мой личный вклад включает 197 авторских коммитов, сделанных в период с 26 марта по 8 мая 2026 года. Основные зоны изменений: core/, sdk/, adapter/telegram/, adapter/matrix/, config/, Docker Compose-артефакты, тесты и проектная документация.

Анализ задачи и исследование вариантов реализации

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

Для Telegram были исследованы варианты организации нескольких чатов: обычные личные сообщения, группы, супергруппы и Forum Topics. Telegram Bot API не позволяет боту самостоятельно создавать группы для пользователя, поэтому автоматическое создание полноценного рабочего пространства оказалось невозможным. В результате Telegram был использован как быстрый прототип, а Forum Topics рассматривались как дополнительный режим для пользователей, которые готовы вручную подключить супергруппу.

Для Matrix были исследованы события комнат, приглашения, организация пространств, работа с отдельными room-чатами, ограничения шифрования и способы хранения метаданных. Matrix лучше подходил для целевой задачи, поскольку позволяет создавать отдельные комнаты, приглашать пользователей, хранить структуру общения на уровне транспорта и строить управляемую модель room-per-chat.

Также на раннем этапе был зафиксирован платформенный контракт. Поскольку реальный SDK платформы находился в развитии, для независимой разработки surface-слоя был создан собственный интерфейс клиента платформы и mock-реализация. Это позволило разрабатывать пользовательский сценарий, обработчики, хранилище и адаптеры без ожидания финального состояния агентной платформы.

Проектирование общего ядра surface-слоя

Для исключения дублирования логики между Telegram и Matrix было реализовано общее ядро в директории core/. В него вошли единый протокол событий и ответов, диспетчер входящих событий, менеджер чатов, менеджер авторизации, менеджер настроек и абстракции хранилища состояния.

Ключевое архитектурное решение состояло в разделении проекта на три слоя:

  • транспортный адаптер, который знает особенности конкретного мессенджера;
  • общее ядро, которое работает с унифицированными событиями и не зависит от Telegram или Matrix;
  • платформенный клиент, через который surface-слой обращается к агенту.

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

В ходе разработки также была устранена архитектурная проблема с именованием: ранний каталог platform/ был переименован в sdk/, чтобы избежать конфликта с одноименным модулем стандартной библиотеки Python и точнее выразить назначение слоя.

Реализация Telegram-прототипа

Telegram-направление использовалось как быстрый способ проверить UX взаимодействия пользователя с агентом. В рамках личного вклада был реализован адаптер на базе aiogram 3.x, базовая обработка команд, конвертация сообщений в общий протокол, хранение соответствий Telegram-пользователей и внутренних чатов, а также прототип режима Forum Topics.

В простом Telegram-прототипе были реализованы стартовый сценарий через /start, создание и выбор чатов, обработка пользовательских сообщений, меню команд бота, базовая работа с настройками и подтверждениями, привязка Telegram thread/topic к внутреннему контексту и первичная поддержка передачи файлов в общий формат вложений.

Отдельно была проработана модель Telegram Forum Topics. Она позволяла использовать темы супергруппы как визуальное представление отдельных чатов. При этом из-за ограничений Telegram Bot API пользователь должен был создать группу самостоятельно и выдать боту права администратора. В ходе проверки были исправлены проблемы обработки команд, архивирования тем, маршрутизации сообщений и поведения /new в topic-контексте.

Telegram-прототип не стал основной production-поверхностью, но выполнил важную роль: помог проверить общий surface-протокол, выявить ограничения транспортов, уточнить требования к хранению контекста и подготовить архитектуру для Matrix.

Реализация Matrix-поверхности

Основной результат практики - полноценная Matrix-поверхность, которая была доведена до рабочего состояния, задеплоена и используется для взаимодействия с агентами Lambda.

В Matrix-адаптере были реализованы entrypoint бота на базе matrix-nio, обработка приглашений пользователя, создание персонального пространства и рабочих комнат, модель отдельной Matrix room для отдельного агентного чата, конвертация Matrix-событий во внутренний протокол, маршрутизация входящих сообщений, команды управления чатами, обработка подтверждений через текстовые команды, защита от обработки собственных сообщений бота, хранение метаданных комнат, восстановление состояния после рестарта и документация по запуску.

В процессе реализации Matrix-направления были пересмотрены некоторые ранние UX-гипотезы. Изначально рассматривалась модель Space-first с отдельной комнатой настроек. На практике более устойчивым оказался DM-first onboarding с последующим созданием реальных рабочих комнат. Пользователь приглашает бота, бот создает рабочее пространство и комнату первого чата, а дальнейшая работа ведется в отдельных комнатах. Это решение лучше соответствует модели Matrix и делает чаты видимыми сущностями самого транспорта.

Существенная часть работы была связана с надежностью. Были исправлены сценарии повторного invite, дублирующего приветствия, случайной обработки собственных сообщений, потери room metadata, неправильного соответствия между Matrix room и платформенным chat id. Также была реализована startup reconciliation: при рестарте бот восстанавливает локальные связи между пользователями, комнатами и агентными контекстами.

Интеграция с агентной платформой

После стабилизации базового Matrix-адаптера была выполнена интеграция с реальным agent API. Поверхность стала обращаться к агенту через тонкий transport adapter, использующий AgentApi. Для каждого Matrix room поддерживается отдельный platform_chat_id, что позволяет разделять контексты разных комнат и не смешивать историю общения.

Была реализована маршрутизация пользователей к агентам через статический реестр. Конфигурация matrix-agents.yaml задает соответствие Matrix-пользователей и агентных контейнеров, а также base_url и workspace_path каждого агента. Такой подход подходит для MVP-топологии, где один инстанс Matrix-бота обслуживает несколько пользователей, а каждый пользователь связан со своим агентным контейнером.

Отдельное внимание было уделено потоковым ответам. Поверхность должна не просто ждать финального ответа агента, а корректно принимать события, обновлять пользовательский интерфейс и передавать сообщения в Matrix. В результате Matrix-поверхность стала пригодна для реального диалога с агентом, а не только для mock-сценария.

Передача файлов и shared workspace

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

Для production-сценария была выбрана схема shared workspace. Matrix-бот сохраняет входящие файлы в рабочую директорию конкретного агента, а агент видит эту же директорию как свой /workspace. Если имя файла уже существует, бот выбирает безопасное имя с суффиксом вида file (1).ext. Исходящие файлы работают в обратную сторону: агент пишет файл в workspace, бот читает его и отправляет пользователю как Matrix file message.

Такой подход упростил интеграцию: не потребовался отдельный HTTP-сервис для upload/download, а контракт между поверхностью и агентом остался понятным и воспроизводимым в Docker Compose.

Deployment и эксплуатационная документация

Для передачи Matrix-поверхности в эксплуатацию были подготовлены Docker-артефакты и документация. Production-сценарий оформлен как bot-only deployment: платформа запускает свои агентные контейнеры отдельно, а surface-контейнер подключается к ним через base_url и общий volume.

Были подготовлены Dockerfile с production target, docker-compose.prod.yml для production handoff, docker-compose.fullstack.yml для внутреннего fullstack E2E-сценария, пример реестра агентов config/matrix-agents.example.yaml, документация docs/deploy-architecture.md и обновленный README.md с инструкциями по запуску, конфигурации и ограничениям.

В README зафиксировано, что production target - один контейнер Matrix-поверхности на 25-30 внешних agent containers/services. Также описаны обязательные переменные окружения, формат matrix-agents.yaml, схема shared volume и известные ограничения.

Тестирование и контроль качества

Разработка сопровождалась тестами и документированием принятых решений. В репозитории были добавлены тесты для общего ядра, mock- и real-platform слоев, Telegram-адаптера, Matrix-адаптера, передачи файлов, agent registry, восстановления состояния, per-room маршрутизации и deployment handoff.

Проверялись сценарии создания и маршрутизации чатов, преобразования сообщений разных транспортов во внутренний протокол, обработки команд пользователя, подтверждения действий, соответствия Matrix room внутреннему chat id и платформенному chat id, загрузки agent registry, передачи файлов через workspace, восстановления состояния после рестарта и корректности Docker/deployment-артефактов.

Кроме автоматических проверок, Matrix-поверхность была доведена до фактического deployment-состояния и работает в инфраструктуре проекта. Это является ключевой практической проверкой результата: поверхность не ограничилась локальным прототипом, а была подготовлена к реальному использованию.

Тимлидская работа и координация команды

Помимо личной разработки, в ходе практики я выполнял функции тимлида команды поверхностей. Эта роль включала декомпозицию задач, фиксацию архитектурных решений, подготовку спецификаций, ревью планов, оформление known limitations и передачу контекста другим участникам.

В репозитории это отражено большим количеством документации и planning-артефактов: спецификации Telegram и Matrix, планы реализации, исследования API, deployment-документация, инструкции по созданию новой поверхности и отчеты о ходе работ.

После стабилизации Matrix-направления часть команды начала заниматься поверхностью MAX. Я не включаю реализацию MAX в свой личный технический вклад, однако как тимлид участвовал в постановке направления: объяснял общую архитектуру surface-слоя, границы ответственности адаптеров и требования к совместимости с ядром и агентной платформой.

Полученные результаты

По итогам практики мной были выполнены следующие работы:

  • спроектирован общий surface-слой для разных пользовательских транспортов;
  • реализовано общее ядро с унифицированным протоколом событий;
  • создан простой Telegram-прототип и проверен режим Forum Topics;
  • реализована полноценная Matrix-поверхность;
  • выполнена интеграция Matrix-поверхности с agent API;
  • реализовано разделение контекстов по Matrix room;
  • добавлена маршрутизация пользователей к агентам через agent registry;
  • реализована передача файлов через shared workspace;
  • подготовлены Docker- и deployment-артефакты;
  • оформлена эксплуатационная документация;
  • выполнена тимлидская координация команды поверхностей.

Вывод

В ходе практики был создан и доведен до рабочего состояния surface-слой для взаимодействия пользователей с агентами Lambda. Личным основным результатом стала Matrix-поверхность: она поддерживает отдельные комнаты для чатов, команды управления контекстом, маршрутизацию к агентам, передачу файлов через shared workspace, восстановление состояния после рестарта и production deployment-сценарий.

Также был реализован простой Telegram-прототип, который позволил проверить ранние UX-решения и общий протокол взаимодействия. Несмотря на ограничения Telegram Bot API, этот прототип оказался полезен для архитектурной проверки и исследования альтернативных пользовательских сценариев.

В ходе практики я получил практический опыт проектирования транспортно-независимых backend-слоев, интеграции мессенджеров с агентной платформой, работы с асинхронными Python-сервисами, Docker deployment, тестирования, документирования архитектуры и технического руководства небольшой командой разработки.

Материалы, изложенные в отчете обучающегося, полностью соответствуют индивидуальному заданию.

Подпись обучающегося: __________________________ / [Путиловский М.] / [дата окончания практики]