Генерация презентации — это не один запрос к модели, а последовательность связанных этапов. Система обрабатывает входные данные, строит структуру, генерирует слайды и формирует состояние, с которым дальше работает редактор. Каждый шаг влияет на следующий.

В первой статье мы разбирали, почему старая версия генератора не взлетела и какие продуктовые гипотезы пришлось пересобрать.

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

Как выглядит пайплайн под капотом

Генерация презентации происходит в 2–3 шага — в зависимости от набора источников, которые участвуют в работе.

Базовый источник есть всегда — это тема и вводные параметры пользователя. Дополнительно пользователь может передать файл, ссылку или документ из Кэмпа.

Инженерно это выглядит как расширение пайплайна:

  • базовый сценарий → работа с темой и параметрами, далее формирование структуры;

  • если добавлены внешние источники → перед генерацией структуры добавляется этап их парсинга и чанкинга.

Упрощённо схема выглядит так:

  1. Получение и парсинг источников

  2. Генерация структуры презентации

  3. Генерация слайдов

Тема пользователя участвует в генерации всегда. Этап обработки добавляется только для внешних источников, которые нужно предварительно распарсить и разбить на чанки.

Мы разделяем этапы не только логически, но и модельно. Структура и сами слайды генерируются разными моделями.

Шаг 1. Обработка источников

На этом этапе мы подключаем материалы, которые пользователь хочет учесть при построении структуры презентации.

Юзер может передать:

  • файл;

  • ссылку;

  • документ, созданный внутри Кэмпа.

Для пайплайна это разные типы входных данных, которые нужно привести к единому виду — текстовым чанкам.

Документ, созданный внутри Кэмпа, технически обрабатывается так же, как и внешний источник. Принципиальной разницы между «внешним» и «внутренним» контентом нет: на выходе система получает структурированный набор чанков, которые используются для построения структуры презентации.

Что происходит технически

  1. Источник парсится.

  2. Контент разбивается чанки.

  3. Из этих фрагментов формируется база для дальнейшей работы.

Если это файл — он обрабатывается стабильно. Если это ссылка — пока есть ограничения.

Поддерживаются не все типы ссылок. Корректно обрабатываются статичные страницы и ресурсы с предсказуемой HTML‑структурой. Если страница строится динамически на сложном клиентском рендеринге или требует специализированной серверной обработки, она может не попасть в зону текущей поддержки.

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

Шаг 2. Генерация структуры

После парсинга начинается формирование структуры презентации.

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

На этом этапе:

  • определяется набор слайдов;

  • задаётся их порядок;

  • описывается содержание каждого;

  • к каждому слайду прикрепляются релевантные фрагменты источников.

На выходе получается план презентации с описаниями и прикреплёнными фрагментами данных. Его можно редактировать перед генерацией слайдов. Это промежуточный артефакт, а не скрытая внутренняя структура.

Почему этап выделен отдельно

Построение структуры — задача композиции и логики. Генерация слайдов — задача наполнения. Разделение позволяет:

  • изолировать ошибки структуры от ошибок текста;

  • управлять качеством на каждом этапе;

  • гибко менять модели под конкретную задачу.

Такой подход делает пайплайн управляемым, а не монолитным.

Шаг 3. Генерация слайдов

После утверждения плана презентации начинается основной этап — генерация слайдов.

В контекст запроса передаётся результат предыдущего шага:

  • структура презентации (порядок и типы слайдов);

  • описания содержания каждого слайда;

  • прикреплённые к ним релевантные чанки из источников.

Модель работает на базе уже спроектированной логики и отобранных фрагментов контента: результат шага N становится частью контекста шага N+1.

Это самый объёмный этап пайплайна — модель генерирует контент слайдов и формирует структуру данных, которая затем сохраняется в редакторе и используется для дальнейшей работы и экспорта.

Где мы отказались от провайдера

На этапе разработки стоял выбор: использовать стоки или генерировать изображения. Быстрее оказалось реализовать генерацию.

Изображения генерируются не через внешний API‑провайдер, а на собственном сервере с поднятой моделью.

Решение продиктовано двумя факторами: экономикой и контролем. Внешний провайдер увеличивает переменные расходы на каждый запрос и привязывает к чужим лимитам и изменениям API. Локальная модель позволяет снизить стоимость генерации и самостоятельно управлять нагрузкой и развитием сервиса.

Это влияет на экономику продукта, особенно на массовых сценариях.

С какими сложностями столкнулись в процессе

Сам пайплайн генерации не требовал исследовательских алгоритмов или нестандартных подходов. Основная сложность возникла вокруг него — в интеграции и инфраструктуре.

Легаси и стек

Основная часть платформы Кэмпа реализована на Vue. Новая часть интерфейса для презентаций писалась на React. Эти части нужно было объединить внутри одного продукта.

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

Объём и системная сборка

Технически задача простая. Сложность — в масштабе и количестве связей.

Редактор, хранение состояния, генерация, экспорт в PPTX — все элементы должны работать согласованно. Значительная часть усилий ушла на эту системную сборку, а не на саму модельную логику.

Генерация — только часть системы

Архитектура генерации мы формировали вместе с ИИ-редактором, а структуру данных проектировали так, чтобы результат корректно выгружался PPTX и поддерживал дальнейшее редактирование.

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

В следующей статье разберём архитектуру ИИ-редактора отдельно и почему его пришлось строить с нуля.