• 4 уровня контекста: якорь, эмоциональный старт, стилевые модификаторы, доводка
  • Нижние уровни модифицируют верхние и никогда их не перебивают
  • Выбранный пользователем артефакт живёт в состоянии агента и идёт аргументом каждого вызова

Задача

Агент вызывает инструмент генерации: картинки, видео, копирайта. Контекста у него больше, чем принимает сигнатура функции. Соблазн — передать только структурированные поля формы, а остальное бросить на пол. Результат: шаблонные на ощущение выходы, каким бы путём пользователь к ним ни пришёл. Он выбрал идею, написал бриф, а получил среднее по анкете.

Типичный пример: инструмент craft_prompt(nomination, image_type, style, user_intent). Выбранная идея и исходный бриф остались в чате и никогда не дошли до композера промпта. Технически LLM в петле, но пользователь чувствует, что его не слышат.

flowchart LR
    F[Поля формы] --> T[craft_prompt]
    C[Чат: выбранная идея<br/>и исходный бриф] -. не доходит .-> T
    T --> O[Среднее<br/>по анкете]
    classDef key stroke:#FF3600,stroke-width:2px
    class O key

Приём

Передавать все четыре уровня контекста в генерационный шаг и явно ранжировать их в системном промпте.

УровеньРольИсточник
1. Якорьглавный субъект, драйверартефакт, который пользователь выбрал: идея, референс, принятая подсказка
2. Эмоциональный стартмотивация, тонисходный free-text бриф
3. Стилевые модификаторыручки обработкиструктурированные выборы в форме: номинация, тип изображения, теги
4. Доводкаlast-mileстрока intent или follow-up инструкция

Правило иерархии: нижние уровни модифицируют верхние, никогда не перебивают. Тег «minimalist» не меняет субъект — он меняет, как субъект отрендерён. Если выбранная идея сидит на третьем уровне как модификатор, а не на первом как якорь, каждый выход скатывается к середине пространства анкеты.

flowchart TD
    L1[Якорь:<br/>выбранная идея] --> L2[Эмоциональный старт:<br/>исходный бриф]
    L2 --> L3[Стилевые модификаторы:<br/>выборы в форме]
    L3 --> L4[Доводка:<br/>intent, follow-up]
    classDef key stroke:#FF3600,stroke-width:2px
    class L1 key

Механика в четыре шага:

  1. Хранить уровни 1 и 2 в общем состоянии агента (session store или серверная запись прогона). Не выводить их заново из истории чата: история шумная и обрезается.
  2. Переносить их структурированными аргументами на каждом tool-вызове. Сигнатура функции явно принимает все четыре уровня.
  3. Системный промпт композера декларирует иерархию дословно: перечисляет уровни, называет роль каждого, инструктирует якориться на первом.
  4. Fallback-шаблон зеркалит иерархию. Когда LLM-вызов падает и срабатывает детерминированный шаблон, он всё равно ведёт с описания выбранной идеи. Иначе fallback противоречит доктрине, и пользователь видит регрессию.
flowchart LR
    S[Состояние агента:<br/>якорь и бриф] --> A[Аргументы<br/>каждого вызова]
    A --> P[Системный промпт:<br/>иерархия дословно]
    A --> FB[Fallback-шаблон:<br/>ведёт с идеи]

В упомянутом кейсе фикс был почти целиком про проводку: расширить состояние прогона, чтобы оно несло originalBrief и chosenIdea; расширить аргументы инструмента до четырёх уровней; переписать системный промпт композера и fallback-шаблон. Выходы сразу перестали ощущаться шаблонными. Остальная система эту иерархию уже подразумевала, просто поверхность инструмента её не выражала.

Обновление, сентябрь 2026. Тот же сбой проводки повторился в новостном конвейере zdes.media. Пост в канале обещал «бенчмарки и тарифы внутри», а на странице был короткий пересказ: в среднем 1170 знаков и 0,19 дополнительного фото на новость. Писатель видел только двухсотсловные факты, а автор призыва не видел страницу вовсе. Фикс снова в проводке: сборщик хранит подробный конспект источника с цитатами, статья пишется из него со списками и таблицами, призыв получает опись того, что есть на странице. Переписана 21 опубликованная новость.

Где ломается

  • История чата как источник. Восстанавливать якорь из переписки ненадёжно: контекст обрезается, идея размывается уточнениями.
  • Иерархия только в коде. Если уровни переданы, но системный промпт не говорит, какой главный, модель ранжирует сама и часто отдаёт вес самому конкретному полю, то есть модификатору.
  • Fallback без иерархии. Самый частый случай тихой регрессии: основной путь исправлен, деградированный — нет, и пользователь на нём чувствует разницу.
  • Конфликт уровней. Бриф просит одно, выбранная идея — другое. Правило «якорь побеждает» помогает, но противоречие лучше поднять пользователю, чем разрешить молча.

Итог

  • Четыре уровня, явный порядок, все на каждом вызове.
  • Основная работа обычно не в промпте, а в проводке: состояние агента и сигнатура инструмента.
  • Ортогонально типизированной композиции референсов: та управляет ролью каждого входа, эта — приоритетом, когда источники конкурируют.
  • Ортогонально template-dispatch: диспатч выбирает промпт, иерархия задаёт его содержимое.

© Александр Никулин. Цитирование — с указанием автора и ссылкой · Версия для LLM