- BrainTools - https://www.braintools.ru -

На связи тим-лид разработки Кэмпа.
Это третья статья цикла о релизе нового генератора презентаций в Кэмпе. Ранее разбирали, почему первая версия не взлетела [1], и что сейчас под капотом [2]. Ниже расскажу, почему мы с командой решили собирать редактор с нуля.
Изначально мы его рассматривали как отдельную часть системы, а не как надстройку поверх генератора.Такой подход выбрали потому, что презентация должна существовать как управляемый документ: с возможностью ручных правок, экспорта в PPTX и дальнейшего расширения логики. Если начать с генератора, редактор неизбежно будет подстраиваться под уже существующие ограничения, а не задавать правила работы документа.
Мы протестировали несколько готовых решений, в том числе сервисы с логикой [3] ИИ-презентаций. Результаты нас не устроили. Проблема оказалась в управляемости.
В готовых редакторах:
ограниченная модель размещения элементов;
слабый контроль над позиционированием;
нестабильность при ручном редактировании;
сложности с корректным экспортом в PPTX.
Для любого пользователя важно спокойно открыть PowerPoint и защитить презентацию. Если после экспорта всё «едет», продукт теряет доверие.
Отсюда первое принципиальное решение: редактор должен проектироваться с учётом экспорта, а не адаптироваться к нему постфактум.
Второе решение — редактор должен быть удобным. Генератор создаёт первоначальный вариант слайдов [4], но финальный вид презентации формируется в процессе редактирования.
Поэтому мы отказались от идеи дорабатывать чужое решение под свои задачи и решили разработать редактор самостоятельно, учитывая все потребности [5] аудитории.
Если мы хотим контролировать экспорт, правки и дальнейшее развитие продукта, редактор нельзя делать поверх генератора.
Разработку начали с логики самого редактора: как внутри системы существует документ презентации и как он изменяется. И только когда эта основа была определена, к ней подключили генерацию.
Генерация — это последовательность шагов. Редактор — это состояние документа.
Редактор должен:
хранить изменения;
поддерживать ручные правки;
корректно экспортировать в PPTX;
обеспечивать совместную работу нескольких участников;
обрабатывать команды ИИ-агента через общий слой управления состоянием.
Это полноценная система управления документом. Поэтому редактор изначально закладывался как самостоятельный архитектурный слой, а не как фича поверх генератора.
Работу начали с прототипа. Первая версия редактора была собрана быстро, чтобы проверить базовую логику.
Дальше мы попробовали несколько альтернативных реализаций на разных библиотеках. Часть решений не подошла из‑за ограничений, поэтому их отбросили. В итоге выбрали библиотечную основу, поверх которой реализовали собственную логику работы редактора.
LLM использовали как инструмент ускорения разработки: для быстрого создания черновых реализаций и проверки гипотез. Это позволило быстрее перебирать варианты, а окончательные архитектурные решения команда принимала и реализовывала вручную.
Ключевая часть — управление состоянием документа. Нужно было обеспечить корректную работу правок, пересборку слайдов и предсказуемый экспорт в PPTX — это оказался очень важный пункт для аудитории, потому что презентацию в итоге открывают и защищают в PowerPoint.
Именно поэтому соответствие формату PPTX стало архитектурным требованием, а не этапом «после генерации». Чтобы файл открывался корректно, нужно было синхронизировать внутреннее состояние редактора с логикой PPTX:
структура данных редактора должна совпадать с логикой PPTX;
стили и позиции должны корректно интерпретироваться вне браузера;
текстовые блоки не должны терять разметку.
Если состояние редактора невозможно однозначно сопоставить с PPTX, экспорт становится недетерминированным. Поэтому соответствие форматов было заложено на уровне проектирования.
С точки зрения [6] алгоритмов задача не требовала исследовательских решений. Основная сложность заключалась в объёме логики и количестве взаимосвязанных состояний внутри редактора.

Обычно интеграция ИИ в редактор выглядит так: пользователь нажимает кнопку, отправляется запрос к модели, сервер возвращает текст, фронтенд вставляет его в документ. По сути, это внешний вызов LLM, который один раз изменяет содержимое.
Мы изначально закладывали другую логику. ИИ-агент должен работать внутри редактора как участник документа, а не как отдельный запрос.
Это означает, что:
агент подключается к документу через тот же коллаборационный слой, что и пользователь;
изменения вносятся через ту же систему управления состоянием;
агент может продолжать работу независимо от состояния конкретной вкладки или сессии пользователя.
В такой модели ИИ не просто генерирует фрагмент по запросу, а становится полноценным участником процесса редактирования.
В результате редактор стал не интерфейсом над генератором, а единой точкой контроля состояния презентации. Именно он определяет:
как хранится и изменяется документ;
как изменения синхронизируются между участниками;
как состояние транслируется в формат PPTX без потери структуры;
как к документу подключается ИИ-агент как равноправный участник.
С архитектурной точки зрения ключевым решением стало выделение редактора в отдельный слой, который контролирует состояние, а не зависит от логики генерации. Именно это позволило заложить фундамент для дальнейшего развития, чем мы и продолжаем заниматься сейчас.
Автор: KempAI
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/28527
URLs in this post:
[1] почему первая версия не взлетела: https://habr.com/ru/companies/kemp_ai/articles/1016926/
[2] что сейчас под капотом: https://habr.com/ru/companies/kemp_ai/articles/1019924/
[3] логикой: http://www.braintools.ru/article/7640
[4] Генератор создаёт первоначальный вариант слайдов: https://eduforms.org?rid=37bef903560ea0aa&ulp=https%3A%2F%2Fkampus.ai%2Fecosystem%2Fslides-copilot
[5] потребности: http://www.braintools.ru/article/9534
[6] зрения: http://www.braintools.ru/article/6238
[7] Источник: https://habr.com/ru/companies/kemp_ai/articles/1021312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1021312
Нажмите здесь для печати.