- Не один универсальный промпт на все кейсы, а короткий вариант на каждый
- Выбор варианта делает код по типизированному флагу, до вызова LLM
- В продуктовом каталоге это 7 категорий на 3–4 визуализации, около 28 шаблонов
Задача
Один системный промпт закрывает четыре кейса. Потом шесть. Потом десять. Каждый новый кейс добавляет абзац «если X, то Y». Промпт перерастает страницу, очередной кейс ломает правило, которое, казалось, принадлежало другому. Качество плывёт: модель выбирает не тот кейс, применяет правильное правило слабо или тихо смешивает два.
flowchart LR
A[Один промпт:<br/>4 кейса] --> B[6 кейсов]
B --> C[10 кейсов:<br/>больше страницы]
C --> D[Модель путает<br/>и смешивает кейсы]
classDef key stroke:#FF3600,stroke-width:2px
class D keyГлавная беда — в диагностике. Когда выход неверный, непонятно, ошиблась ли модель в выборе кейса или в применении его правил. Поверхность для отладки одна: большой промпт целиком.
Приём
Не заставлять один промпт делать всё. Выбирать нужный промпт до вызова модели, по типизированному флагу. Каждый кейс получает короткий фокусированный вариант; модель не видит логики ветвления вообще.
shot.type = "composite"
-> system prompt: composite_system_prompt
(описывает только передний субъект; окружение — из vision)
product.categoryId = "clothing-shoes"
product.visualizationId = "on-model"
-> template: PRODUCT_TEMPLATES["clothing-shoes"]["on-model"]
-> заполнить плейсхолдеры из метаданных продукта
-> отдать генератору (без LLM, если шаблон полностью специфицирован)
Две оси диспатча из практики. В видео-пайплайне — по типу кадра: full-ai описывает кадр целиком, composite — только foreground-субъект (окружение приходит из съёмки), live даёт редакторскую подсказку без image-job. В продуктовом каталоге — по паре категория и визуализация: 7 категорий (одежда и обувь, аксессуары, еда, косметика, электроника, дом, прочее), 3–4 визуализации на каждую (on-model, flat-lay, in-store, lifestyle, studio), около 28 шаблонов. Шаблон может быть чистой подстановкой строк без LLM, когда выход детерминирован, или LLM-fill со структурированным контекстом, когда нужна свобода.
flowchart TD
F[Типизированный флаг] --> C{Код выбирает<br/>до вызова LLM}
C -->|shot.type| V[Видео: full-ai,<br/>composite, live]
C -->|категория и<br/>визуализация| K[Каталог: 7 × 3–4,<br/>около 28 шаблонов]
K --> T1[Подстановка<br/>без LLM]
K --> T2[LLM-fill со<br/>структурным контекстом]Обновление, сентябрь 2026. Третьей осью диспатча стала модель. В конвейерах zdes.events и zdes.media модель выбирается в коде по типу задачи, до вызова: явная модель вызова, затем тир задачи, затем лёгкая по умолчанию. JSON-задачи и проверки идут на лёгкую модель, почти в 20 раз дешевле за вызов, проза — на более сильную. Выбор конкретного вызова всегда побеждает общую настройку окружения.
Что даёт диспатч против одного промпта:
- Каждый вариант маленький, его реально читать целиком.
- Кейсы независимы по конструкции: новый не трогает существующих.
- Неверный выход изолирован в одном варианте, а не размазан по странице правил.
Когда диспатчить: кейсы отличаются тем, что описывают (composite описывает только foreground, full-ai — весь кадр); у кейсов независимые наборы правил (studio-кадр косметики и on-model кадр одежды живут по разным конвенциям); каталог будет расти, и новая категория должна быть локальной правкой одного шаблона.
Когда не диспатчить: варианты отличаются одним предложением — это параметризация; кейсы текучие и задаются пользователем — тогда лучше типизированная композиция референсов.
flowchart TD
Q1{Разница в одно<br/>предложение?} -->|да| P[Параметризация]
Q1 -->|нет| Q2{Кейсы задаёт<br/>пользователь?}
Q2 -->|да| T[Типизированная<br/>композиция референсов]
Q2 -->|нет| D[Диспатч<br/>по флагу в коде]
classDef key stroke:#FF3600,stroke-width:2px
class D keyОбновление, сентябрь 2026. Обратная сторона диспатча: общее для всех вариантов не должно размножаться по ним. Когда редакцию zdes.media повернули к креативным индустриям, курс понадобился трём разным промптам: сборщику, отборщику сюжетов и классификатору архива. Он вынесен в одну константу с уровнями приоритета тем, которую импортируют все три. Промпты остались разными, курс правится в одном месте.
Где ломается
- Расползание шаблонов. 28 превращаются в 128, и поддержка коллапсирует. Ревью каталога раз в полгода, near-duplicates — обратно в параметры.
- Неверный флаг upstream. Запускается не тот шаблон — выход тонко неправильный. Выносить имя выбранного шаблона в выход для наблюдаемости.
- Дрейф от реальности. Шаблон «одежда, on-model» отстал от текущих визуальных конвенций. Версионировать и пересобирать посезонно.
- Диспатч внутри промпта. Если все варианты лежат в одном длинном системном промпте, модель может проигнорировать выбор. Диспатч только в коде, до вызова.
Итог
- Когда кейсы реально отличаются, каждому — свой промпт; выбор делает код, не модель.
- Обобщается на tool-агентов (микро-промпт на инструмент), доменные ассистенты, генерацию по локали.
- Ортогонально четырём уровням источников промпта: диспатч выбирает какой промпт, иерархия задаёт каким контентом его заполнять.
© Александр Никулин. Цитирование — с указанием автора и ссылкой · Версия для LLM