Practice_reports/surfaces/putilovsky_mikhail.md

231 lines
35 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Журнал практики
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ
(национальный исследовательский университет)»
Институт № 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, тестирования, документирования архитектуры и технического руководства небольшой командой разработки.
Материалы, изложенные в отчете обучающегося, полностью соответствуют индивидуальному заданию.
Подпись обучающегося: __________________________ / [Путиловский М.] / [дата окончания практики]