- Сохранение и генерация в одном промпте торгуются друг против друга; разводим их по слоям
- Lock считается из дескриптора один раз и проигрывается дословно на каждой генерации
- Уходят 4 сбоя: смешение осей, дрейф формулировок, слепой дебаг, непереносимость
Задача
Генеративные модели охотно перекраивают, идеализируют и сливают идентичность того, что генерируют: лицо становится чуть симметричнее, пропорции продукта плывут, логотип перестаёт читаться. Три типовых продакшн-сбоя:
- Дрейф лица. В пятикадровой кампании структура лица одного человека едва заметно сдвигается: расстояние между глазами, линия челюсти. Каждый кадр по отдельности нормальный; как набор — зритель читает «это разные люди».
- Дрейф формы продукта. Крышка бутылки в кадре 3 не та, что в кадре 1. Логотип отзеркален. Текст этикетки к кадру 5 превращается в псевдотекст.
- Дрейф голоса. Тон и регистр персоны сдвигаются между главами длинного текста.
Все три — одна архитектурная ошибка: забота о сохранении и креативная задача сидят в одном промпте, и модель торгует их друг против друга кадр за кадром. Фраза «preserve the person's exact facial structure» в каждом промпте помогает слабо, пока креативная инструкция конкретного кадра (драматичный ракурс, мягкий фокус, художественная интерпретация) не потянет результат в дрейф. Сохраняющая клауза — просто слова, конкурирующие с другими словами.
flowchart LR
P[Сохраняющая<br/>клауза] --> M[Один промпт:<br/>модель торгует]
C[Креативная<br/>инструкция кадра] --> M
M --> D[Дрейф лица,<br/>формы, голоса]
classDef key stroke:#FF3600,stroke-width:2px
class D keyМетод
Сохранение — не клауза внутри генеративного промпта, а слой, который его оборачивает. Финальный вход генератора на каждую генерацию батча:
[REFERENCE MAP] где живёт каждый референс дословно на каждый вызов
[LOCK LAYER] IDENTITY / PRODUCT / BRAND LOCK дословно на каждый вызов
[GENERATIVE PROMPT] описание текущего кадра меняется на каждый выход
Что содержит Lock. Структурированная переигровка заранее извлечённого дескриптора: того, что должно пережить генерацию без изменений.
- Identity Lock (человек): утверждение авторитета («только Image 1 определяет идентичность»), override («людей на других референсах полностью игнорировать»), требования точности (структура лица, пропорции, тон кожи, тип фигуры, волосы) и явные отказы («без сглаживания, идеализации и смешения с любым другим лицом»).
- Product Lock: какие части двигаются вместе, какая сторона к камере, текст на упаковке остаётся читаемым, стекло остаётся стеклом, масштаб не раздувается.
- Brand Lock (за пределами картинок): тон голоса, словарные ограничения, ритм предложений, запрещённые фразы и клише.
Измерения меняются от домена к домену; форма постоянна.
Откуда берётся Lock. Это детерминированная функция от дескриптора, а не вызов LLM. Три шага:
- Извлечение дескриптора. Модель на низкой температуре анализирует референс и выдаёт структурированное описание. Дорого и вариативно, поэтому один раз на субъект.
- Вычисление Lock. Дескриптор подставляется в шаблон. LLM не участвует; при заданном дескрипторе результат детерминирован.
- Проигрывание. Каждая генерация батча дословно ставит Lock перед остальным промптом.
flowchart LR
R[Референс] --> D[Дескриптор:<br/>один раз на субъект]
D --> L[Lock: шаблон,<br/>без LLM]
L -->|дословно| G1[Генерация 1]
L -->|дословно| G2[Генерация 2]
L -->|дословно| G3[Генерация N]
classDef key stroke:#FF3600,stroke-width:2px
class L keyНадёжность паттерна происходит именно отсюда: Lock байт-идентичен во всём батче, вариативность между генерациями невозможна по конструкции.
Обновление, сентябрь 2026. На предметном бренде у Lock появился ещё один источник: фото настоящей вещи. Снимок покупной детали или напечатанной базы идёт референсом с identity lock, всё, что на нём есть, воспроизводится один в один, и меняется только новая деталь. Шесть абажуров поверх фото первой напечатанной базы вышли чистыми — шесть из шести, — база совпала вплоть до кабеля на фоне. Lock при этом каскадируется. Фото купленного плафона дало восемь концептов печатной базы. Утверждённый рендер фаворита стал референсом второго lock с «only ADD», и доработка добавила втулку под патрон, не тронув остального: пять кадров, пять чистых. Каждый утверждённый выход замораживается и становится следующим слоем сохранения.
flowchart LR
F[Фото<br/>покупной детали] --> C[Концепты<br/>под lock]
C --> A[Утверждённый<br/>рендер]
A --> L[Второй lock:<br/>only ADD]
L --> R[Доработка]
classDef key stroke:#FF3600,stroke-width:2px
class A keyПочему разделение несущее. Слитый промпт создаёт четыре проблемы, разделение чинит все четыре:
- Смешение осей. Промпт про свет и композицию перестаёт читаться, когда несёт ещё 150 слов про идентичность. После разделения генеративный промпт описывает кадр, Lock — субъект.
- Дрейф формулировок. LLM переписывает клаузу сохранения чуть по-разному на каждый кадр («keep her face recognisable», «maintain identity»), и разброс в языке даёт разброс в результате. Lock одинаков по конструкции.
- Слепой дебаг. Когда лицо поплыло в кадре 4, невозможно понять, виновата креативная инструкция, сохраняющая или их взаимодействие. С Lock первый вопрос звучит «дошёл ли Lock до модели без изменений»: если да — дрейф в генеративном промпте, если нет — в инфраструктуре.
- Непереносимость. Сохранение встроено в каждый промпт, его нельзя поднять и переиспользовать. Отдельный Lock оборачивает любой формат генеративного промпта.
flowchart LR
F[Лицо поплыло<br/>в кадре 4] --> Q{Lock дошёл<br/>без изменений?}
Q -->|да| G[Дрейф в<br/>генеративном промпте]
Q -->|нет| I[Дрейф в<br/>инфраструктуре]За пределами картинок. Вопрос, на который отвечает паттерн: что должно пережить этот вызов без изменений? Если ответ — стабильный описываемый набор, паттерн подходит. Brand Lock поверх генерации глав контент-серии. Character Lock поверх сцен нарратива. Policy Lock (разрешённые и запрещённые действия, триггеры эскалации) поверх планирования в агентах, где генеративная инструкция варьируется сильно, а политика не должна. Schema Lock (контракты данных, сигнатуры API) поверх генерации кода.
flowchart LR
B[Brand Lock] --> B1[Главы<br/>контент-серии]
C[Character Lock] --> C1[Сцены<br/>нарратива]
P[Policy Lock] --> P1[Планирование<br/>в агентах]
S[Schema Lock] --> S1[Генерация<br/>кода]Связь с соседними паттернами. В пайплайне последовательной консистентности Lock ложится на выход стадии архитектора: архитектор выдаёт генеративный промпт, пайплайн оборачивает его Lock перед отправкой. Осознанное умолчание — зеркальная дисциплина: Lock называет то, что должно выжить, умолчание убирает то, что не надо описывать вовсе. Политика в системном промпте — слабый аналог Lock: она описана один раз, но переинтерпретируется на каждом вызове; Lock проигрывается дословно и не интерпретируется. Сама идея выросла из примерки очков февраля 2025 года, где сохранение глаз между стадиями оказалось частным случаем этой же задачи.
Где ломается
- Расплывчатый дескриптор. «Preserve facial features» без перечня измерений не работает; извлечение должно называть конкретные черты.
- Lock спорит с генеративным промптом. Генеративный говорит «soft-focus dreamy portrait», Lock требует резкой точности лица. Генеративный промпт уступает на измерениях сохранения; стилевые слова, подразумевающие нарушение точности, отклоняются.
- Регенерация посреди батча. Кто-то пересчитал Lock на половине проекта, и старые кадры больше не сходятся с новыми. Lock вычисляется один раз на проект, изменение версионируется.
- Дескриптор промахнулся мимо реального сбоя. Identity Lock тщательно описывает лицо, а плывёт гардероб. Дескриптор расширяется итеративно до полного «что должно выжить».
Открытые вопросы: контролируемое измерение прироста точности против слитого промпта той же длины; таксономия «что может уплыть» по доменам (татуировки, шрамы, очки всплывают со временем); переносится ли Brand Lock, написанный для текста, на картинки того же бренда; устойчивость к генеративным инструкциям, которые активно тянут в дрейф («стилизованная переинтерпретация субъекта»).
Итог
- Сохранение и генерация — два слоя, а не две фразы в одном промпте.
- Lock — чистая функция от дескриптора, вычисляется один раз и проигрывается дословно.
- Паттерн переносится с картинок на голос бренда, персонажей, политики агентов и схемы кода.
- Заботы о сохранении копятся в системных промптах неявно и уплывают; названные слоем, они держатся.
- Lock можно снимать с фото реальной вещи и каскадировать: каждый утверждённый выход становится референсом следующего.
© Александр Никулин. Цитирование — с указанием автора и ссылкой · Версия для LLM