Skip to content
ИССЛЕДОВАНИЯ
8 мин. чтенияЧитать на английском

Sequential Consistency через промпт-архитектуру

Sequential Consistency через промпт-архитектуру

Удержание когерентности на multi-shot- и multi-scene-генерации без обучения

Автор: Alex Nix Статус: Рабочий черновик — for public release


Abstract

Каноничный ответ на «как мне держать персонажа неизменным через тридцать шотов видео» — это обучить модель на нём. LoRA, DreamBooth, textual inversion, full fine-tune. Они работают и они дорогие. Под один продакшн — тридцать шотов за неделю, один раз — обучение это overkill; оно меняет гибкость на консистентность по более высокой цене, чем нужно.

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

  1. Reference-Inheritance — собственные предыдущие выходы пайплайна становятся входами для последующих стадий
  2. Series-Aware Anti-Repetition — предыдущие выходы прикрепляются как ограничение чего избегать, не что копировать
  3. Neighbor-Aware Prompts — каждый выход описывает, как он соединяется с соседними
  4. Reference Condensation — много типизированных референсов схлопывается в один связный референс для downstream-потребления

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


1. Задача sequential-consistency

Сгенерировать тридцать шотов персонажа в ролике. Тридцать отдельных генераций производят тридцать слегка разных персонажей — wardrobe drift, face drift, environment drift, lighting drift. По отдельности каждый шот выглядит нормально; как последовательность зритель регистрирует «это разные люди в разных сценах».

Два канонических решения:

Решение A — обучить модель на персонаже. Пятьсот референсов, LoRA-прогон, деплой. Надёжно; дорого; негибко (персонаж теперь залочен в той pose/wardrobe/lighting, что подразумевала тренировочная выборка). Избыточно для разового продакшна.

Решение B — прикрепить референсы к каждой генерации и надеяться. Дёшево; хрупко. Поведение генератора с прикреплёнными референсами непоследовательно. Silent-reference-режимы отказа изобилуют. Консистентность улучшается, но не приземляется.

Эта статья описывает Решение C — промпт-архитектуру, накладывающую консистентность структурно, без обучения. Механизмы ниже работают, потому что генераторы уже принимают reference-conditioning; паттерн — про то, как референсы прикреплены и что текст промпта про них говорит.


2. Графовая модель

До четырёх паттернов — назвать граф, в котором живёт последовательность.

Продакшн — это не плоский список из тридцати генераций. Это лес из линейных цепочек, сгруппированных по сценам:

сцена 1:  1A → 1B → 1C → 1D        (линейно внутри сцены)
сцена 2:  2A → 2B → 2C             (линейно, параллельно сцене 1)
сцена 3:  3A → 3B → 3C → 3D → 3E
  • Внутри сцены: шоты — линейная цепочка. Шот 1B зависит от выхода 1A; 1C — от 1B.
  • Между сценами: зависимости нет. Сцены 2 и 3 рендерятся независимо.

Эта форма не случайная деталь имплементации — это архитектура, делающая паттерны ниже возможными. Консистентность обеспечивается внутри цепочки; cross-scene-консистентность обрабатывается внешними референсами (общий character-референс, общий style-референс), а не цепной inheritance.


3. Паттерн 1 — Reference-Inheritance

Собственные предыдущие выходы пайплайна становятся входами последующих стадий.

Рендер шота 1B:
  текст:        описывает только subject action, location, camera (что варьируется)
  vision refs:  внешний moodboard + storyboard_1B + [rendered_1A.jpg]
  выход:        rendered_1B.jpg

Render-джоб шота 1B прикрепляет отрисованную картинку шота 1A как vision-референс. Identity персонажа, гардероб, состояние окружения — всё несётся визуально через 1A-рендер, не переописывается в тексте 1B.

Почему работает

  • Генераторы принимают vision-conditioning нативно. Новая модельная инфраструктура не нужна.
  • Плотный сигнал в референсе. Текст не может специфицировать «точное расположение пуговиц рубашки»; картинка может.
  • Линейные цепочки избегают compound-дрейфа. Каждый шот должен совпасть только с непосредственным предшественником; ошибки не накапливаются экспоненциально на короткой цепи (типично 3–6 шотов).

Что это требует от текста промпта

Намеренное умолчание. Если текст пытается описать identity/гардероб в дополнение к vision-наследованию от предыдущего рендера, два канала конкурируют. Текст должен описывать только то, что меняется — действие, локацию (если варьируется), камеру. Identity — vision-carried.

Ограничения

  • Только короткие цепи. Drift накапливается; за пределами 6–8 шотов паттерн деградирует.
  • Жёсткая зависимость от предшественника. Шот 1B не может рендериться до завершения 1A. Это накладывает строгий внутри-сценный порядок.
  • Без cross-scene-inheritance. Сцена 2 не может наследовать от сцены 1 — слишком много шотов вмешивается, drift будет доминировать.

4. Паттерн 2 — Series-Aware Anti-Repetition

Предыдущие выходы прикреплены как ограничение «чего избегать».

Генерация шота 1B:
  текст:        описание текущего шота
  vision refs:  предыдущие шоты в серии (1A)
  системный промпт: "Analyse the prior frames. Identify their camera angles
                    and framing. For this shot, intentionally choose a
                    DIFFERENT angle while keeping the same style."

Референс — негативный якорь. LLM читает его, чтобы идентифицировать, что уже сделано, и выбирает что-то другое по поимённым измерениям.

Почему работает

  • LLM-ы по умолчанию имитируют прикреплённые референсы. Явное инвертирование дефолта поимённой инструкцией производит variety.
  • Раздельные vary-vs-constant-измерения. Паттерн требует объявить, что должно варьироваться (угол камеры, кадрирование), и что должно держаться (стиль, identity персонажа). Без этого разделения «произведи что-то другое» дрейфует по всему.

Каноничный случай: генерация storyboard

Storyboard'ы внутри сцены делят визуальный стиль (толщина линии, штриховка, красные акценты — см. концепт style-prefix-architecture), но должны варьироваться в углу камеры и кадрировании. LLM читает предыдущие storyboard-кадры, чтобы идентифицировать уже использованные углы, затем намеренно выбирает неиспользованные.

Отношение к Reference-Inheritance

Эти два паттерна тянут в противоположных направлениях. Inheritance тянет выходы вместе (держать identity константой); anti-repetition отталкивает их (варьировать камеру). Они композируются только когда измерения чисто разделены: наследовать identity, варьировать камеру. Путаница — наследование камеры или варьирование identity — проваливает оба.


5. Паттерн 3 — Neighbor-Aware Prompts

Каждый выход описывает, как он соединяется с соседними.

Motion-промпт шота 1A:
  "Camera pushes in. Subject's gaze rotates from off-frame to the camera.
   Motion lands on a pose that sets up 1B's opening action."

Motion-промпт шота 1B:
  "Subject, now making eye contact (continuing the gaze landed in 1A),
   begins to speak."

Промпт для выхода n явно ссылается на состояние из n−1 и setup для n+1. Генератор производит motion, которая стыкуется с соседями, а не с воображаемыми другими шотами.

Где это важно

  • Сшивка видео-переходов. Когда два соседних шота должны соединиться бесшовно (непрерывный жест, hand-off нарративного beat'а), motion между ними генератор-driven, и промпт должен специфицировать соединение.
  • Hand-off между нарративными сценами. Промпт генерации каждой сцены наследует нерешённые нити и оставляет нити для следующей.
  • Multi-turn-генерация диалога. Промпт каждого хода знает, что сказал предыдущий говорящий, и что ожидает следующий.

Композиция с first/last-frame-ограничениями

Паттерн сильнее всего в паре с жёстким визуальным ограничением: start frame = рендер шота n, end frame = рендер шота n+1. Генератор должен произвести motion, которая начинается в старте и приземляется в конце; промпт описывает как motion соединяет, а не что на эндпоинтах.

Режимы отказа

  • Чрезмерное наследование. Контент-внутри-выхода загрязнён контентом соседа. Контрмера: изолировать «точки соединения по краям» от «контента внутри».
  • Отсутствующие соседи. Первые и последние выходы последовательности не имеют предшественника или преемника. Контрмера: fallback-правила — «opening shot; begin fresh; no predecessor state».
  • Backfill-стоимость. Если шот n+1 генерируется после шота n, шот n не мог знать про него. Контрмера: two-pass-планирование — сначала спланировать все шоты абстрактно, затем уточнить каждый с neighbor-awareness.

6. Паттерн 4 — Reference Condensation

Много типизированных референсов → один связный single-image-референс.

Per-scene set референсов:
  location_ref.jpg, character_ref.jpg, style_ref.jpg,
  prop_ref.jpg, color_ref.jpg, camera_ref.jpg

     ↓ LLM + generator condensation step
     ↓

Одна композитная reference-картинка (типично 16:9 cinematic moodboard)

     ↓

Downstream-стадии прикрепляют ТОЛЬКО композит.

Per-scene-референсы конденсируются в один anchor, которым последующие стадии генерации могут пользоваться эффективно. Оригиналы сохраняются для дебага, но больше не прикрепляются напрямую.

Зачем конденсировать

У генераторов конечный attention-бюджет для reference-conditioning. Прикрепление больше ~3 референсов даёт убывающие, а потом отрицательные возвраты — модель пытается удовлетворить все референсы и производит размытый, некогерентный выход.

Конденсация конвертирует many-reference-задачу в one-reference-задачу ценой одного дополнительного generation-шага. Композит несёт дистиллированное намерение оригиналов в форме, которую генератор на следующей стадии реально может использовать.

Как работает condenser-стадия

  • Читает каждый референс через vision
  • Читает типизированную роль каждого референса (refType: location, character, style, prop, color, camera)
  • Применяет объявленный порядок разрешения, когда референсы расходятся (типично: environment → style → color → subject)
  • Эмитит single-reference-промпт (сам по себе deliberate-omission-промпт), описывающий целевой композит
  • Передаёт промпт генератору для производства композита

Выход — сгенерированная картинка, которая сама становится референсом следующей стадии. Рекурсивное использование генерации для построения референсов.

Роль в общем sequential-consistency-стеке

  • Enables deliberate omission downstream. Когда композит надёжно несёт стиль / цвет / свет, текст промпта последующие стадии может уверенно умалчивать эти измерения.
  • Стабильный per-scene anchor. Сцены, охватывающие несколько шотов, все наследуют от одного композита; стилевая консистентность между шотами структурная.
  • Дебагопригодно. Плохой выход трассируется либо к композиту (осмотрите его), либо к downstream-текст-промпту (осмотрите его).

7. Как четыре паттерна композируются

Продакшн-пайплайн обычно использует все четыре в конкретной аранжировке:

Per-scene setup (один раз на сцену):
  - типизированные референсы: location, character, style, color, camera
  - Паттерн 4 (Condensation): → композитный moodboard image

Рендер шотов сцены (линейно внутри сцены, все четыре активны):
  Шот 1A:
    - выход паттерна 4 прикреплён как vision (style/colour/lighting)
    - Паттерн 2 (Anti-Repetition): предыдущие шоты (нет — opening)
    - Паттерн 1 (Inheritance): предыдущий шот (нет)
    - Текст: намеренно минимальный — только subject/location/camera

  Шот 1B:
    - выход паттерна 4 прикреплён как vision
    - Паттерн 2: предыдущий шот 1A рассмотрен под angle variety
    - Паттерн 1: rendered_1A.jpg прикреплён как continuity-референс
    - Паттерн 3 (Neighbor-Aware): текст отмечает связь с 1A, setup под 1C
    - Текст: минимальный, neighbor-aware

  Шот 1C:
    - все четыре активны, ссылаясь на 1B
  ...

Порядок имеет значение: condensation — это setup; остальные три активны во время внутри-сценного рендера. Anti-repetition и inheritance тянут в противоположные стороны и должны быть чисто разделены по измерениям. Neighbor-awareness работает в точках соединения между шотами.

Ни один паттерн в одиночку не достаточен. Inheritance без condensation производит over-referenced-кашу. Anti-repetition без separation-of-dimensions производит style drift. Neighbor-awareness без inheritance производит fine-переходы-между-несовместимыми-субъектами. Все четыре вместе производят консистентный, директабельный sequential-выход.


8. Когда тянуться к этим паттернам vs. обучение

| Стек паттернов | Обучение (LoRA / fine-tune) | |---|---| | Быстро поставить | Дни на подготовку + тренинг | | Per-project | Per-subject (переиспользуемое) | | Гибко — субъект может делать всё, что подсказывают референсы | Негибко — субъект залочен в тренировочное распределение | | Ограниченная within-chain длина (5–8 шотов до drift'а) | Без ограничения длины цепи | | Cross-scene-консистентность через внешние референсы | Cross-scene-консистентность встроена | | Стоимость: маргинальные generator-reference-токены | Стоимость: upfront-тренинг + inference |

Правило большого пальца:

  • Один продакшн (любой длины) с одним субъектом → стек паттернов
  • Много продакшнов с повторяющимся субъектом → обучить LoRA
  • Продакшны, комбинирующие повторяющиеся субъекты + новые вариации → оба: LoRA даёт cross-scene-anchoring, стек паттернов обрабатывает within-scene-drift

9. Режимы отказа стека

  • Накопление drift в длинных цепях. Reference-Inheritance надёжен только на коротких цепях. Длинные сцены (8+ шотов) должны разбиваться на под-серии с external-reference-refresh'ами на границах.
  • Путаница измерений между inheritance и anti-repetition. Если два паттерна применены без separation-of-dimensions, оба деградируют. Явное объявление vary-vs-constant — несущее.
  • Composite drift. Композитный референс от condensation сам по себе сгенерирован; если генератор производит стилистически распознаваемый композит (сильная непреднамеренная эстетика), последующие стадии переподражают. Контрмера: системный промпт condensation должен производить нейтральные композиты, которые якорят измерения, не накладывая новый стиль.
  • Stale composite. Пользователь обновляет референс; композит не перегенерирован; downstream наследует stale. Контрмера: инвалидировать композит, когда любой из его источников меняется.
  • Neighbor-awareness без hard-constraint-эндпоинтов. Описание того, как шот 1A соединяется с 1B, менее полезно, когда генератор не видит реальный эндпоинт 1B. Контрмера: парить с first/last-frame-image-ограничениями там, где генератор их поддерживает.

10. Обобщения за пределы image/video

Стек применим к любой sequential-генерации, где консистентность важна, а per-subject-обучение нецелесообразно:

  • Long-form-нарративная генерация. Каждая глава наследует от предыдущей (Паттерн 1), варьируется от неё по поимённым измерениям (Паттерн 2), стыкуется на краях (Паттерн 3). Описания персонажей конденсируются в persona-anchor (Паттерн 4).
  • Code-base-consistent code generation. Каждая функция наследует стиль и паттерны от ранее сгенерированных «сиблингов»; конденсированный «style anchor» захватывает голос code-base'а.
  • Серия эпизодов подкаста. Каждый эпизод наследует от предыдущего; варьируется в теме, удерживая тон; стыкуется на cold-open и sign-off.
  • Conversational-агент с длинным контекстом. Каждый ход наследует от последних нескольких ходов (Паттерн 1), варьируется по теме по user-intent (Паттерн 2), чисто сигналит переходы (Паттерн 3) и конденсирует длинные истории в persona/context-anchor (Паттерн 4).

Форма та же: within-chain линейная консистентность, between-chain параллелизм, явное разделение измерений, condensation для attention-экономии.


11. Открытые исследовательские вопросы

  • Эмпирическая валидация. Количественное сравнение pattern-stack vs. LoRA-trained vs. naïve-генерация на стандартном consistency-бенчмарке. Сильно нужно; поле сейчас аргументирует анекдотами.
  • Максимальная длина цепи на паттерн. Reference-Inheritance наблюдается деградирующим на 5–8 шотах; какие аналогичные лимиты для neighbor-awareness в длинных нарративах? Для anti-repetition в длинных сериях?
  • Автоматический тюнинг композиции. Учитывая новую задачу, как решить, какие из четырёх паттернов активировать и как сконфигурировать? Сейчас вручную; pipeline-designer-ассистент правдоподобен.
  • Кросс-модальный перенос. Передаются ли паттерны между image/video и text/code? Неформально да; формально не изучено.
  • Pattern-interaction-режимы отказа. Когда inheritance и anti-repetition конфликтуют? Когда neighbor-awareness перебивает inheritance? «Исчисление» взаимодействий паттернов было бы полезным.
  • Метрики качества condensation. Как измерить, захватывает ли конденсированный референс намерение исходного набора? Возможно CLIP-style-similarity с role-weighted attention; не проверено.

12. Заключение

Sequential-consistency в генеративном AI не требует обучения. Она требует другого — аккуратной композиции четырёх промпт-архитектур, каждая адресующая конкретную под-задачу sequence-когерентности: перенос состояния вперёд (Reference-Inheritance), варьирование по явным измерениям, удерживая остальное константой (Anti-Repetition), соединение выходов на их границах (Neighbor-Awareness) и снижение attention-нагрузки от многих референсов к одному (Condensation).

Четыре композируются в стек, производящий директабельный, консистентный sequential-выход из off-the-shelf-генераторов. Это не silver bullet — длинные цепи дрейфуют, композиты могут устареть, взаимодействия паттернов требуют аккуратности. Но для общего случая (один продакшн, один или несколько субъектов, разумные длины цепей, желание гибкости) стек — наименьшее обязательство, которое надёжно работает.

Обучение остаётся правильным ответом для повторяющихся субъектов и cross-scene-консистентности. Стек — правильный ответ для within-production-когерентности. Большинство реальных пайплайнов используют и то, и другое.


Цитирование

Nix, A. (2026). Sequential Consistency via Prompt Architecture — Holding Coherence Across Multi-Shot and Multi-Scene Generative AI Without Training. Working paper.