TL;DR
Controlled Context Enrichment — это модульная техника сборки промпта и двухмерной проверки ролевых LLM-агентов. Вместо того чтобы набивать системный промпт всеми подробностями биографии персонажа подряд, метод делит контекст на функциональные блоки и проверяет агента по двум осям: нечувствительность к формату записи (проза, списки, таблица «ключ — значение») и отзывчивость на реальные изменения правил игры в описанной ситуации.
Когда мы создаём агента-переговорщика, виртуального клиента или участника симуляции, кажется: чем подробнее расписана его анкета, тем стабильнее и реалистичнее он себя поведёт. На деле модель с раздутым фоновым описанием легко меняет решение на противоположное просто от того, что вы переписали абзац текста маркированным списком, и при этом в упор игнорирует смену внешних правил, если они явно не связаны с конкретным выбором. Модели не хватает связки между ролью и точкой принятия решения.
Метод решает эту проблему в два шага: при сборке промпта вы заменяете общие детали биографии на описательную или нормативную привязку к решению (связываете роль, регламент и контрагента напрямую с текущим выбором), а затем прогоняете матрицу из нескольких форматов подачи при двух разных вводных среды, чтобы отсеять хрупкие промпты.
Схема метода
Конструирование промпта (выполняется внутри одного запроса через модульную подстановку):
БЛОК 1 (Роль) → Кто принимает решение
БЛОК 2 (Правило среды) → В каких внешних условиях мы находимся (Вариант А или Вариант Б)
БЛОК 3 (Привязка к решению) → Как именно роль, контрагент и процедура регулируют текущий выбор
БЛОК 4 (Задача и таблица исходов) → Доступные действия и матрица последствий
Аудит выборочной устойчивости (требует серии отдельных запросов по матрице 2 среды × 4 формата):
ШАГ 1: Собрать 4 поверхностных формата одного контекста (абзацы, буллиты, ключ-значение, перефраз)
ШАГ 2: Прогнать каждый формат в Среде А и Среде Б → Замерить разброс внутри среды (должен быть ~0) и сдвиг между средами (должен идти в нужную сторону)
Пример применения
Задача: Вы настраиваете ИИ-агента на роль руководителя закупок региональной сети аптек (например, в контуре «Ригла» или «Апрель»), чтобы протестировать, как он поведёт себя при дефиците сезонных препаратов: придержит партию на своём складе в Краснодаре или передаст соседнему филиалу в Ростове-на-Дону. Нужно, чтобы агент опирался на реальный регламент сети, а не менял решение от замены абзацев на буллиты.
Промпт:
Решение по распределению резервной партии
Роль
Ты — руководитель отдела складских запасов филиала А (Краснодар).
Социальный и организационный контекст
Масштаб регламента: Для этого распределения действует единое соглашение Южного регионального контура о непрерывности поставок между филиалом А (Краснодар) и филиалом Б (Ростов-на-Дону).
Отношения с контрагентом: Ты и руководитель филиала Б — назначенные координаторы поставок внутри одной региональной аптечной сети.
Процедура: При возникновении дефицита регламент сети оценивает обеспеченность запасами сразу по обоим филиалам региона.
Ролевое требование: По регламенту региональной сети ты отвечаешь за соблюдение процедуры распределения при принятии решения о судьбе резервной партии филиала А.
Задача принятия решения
Филиал А и филиал Б контролируют по одной выделенной резервной партии препаратов. Ты управляешь партией филиала А, а второй руководитель — партией филиала Б. Обозначения действий одинаковы для обоих: ПЕРЕДАТЬ отправляет партию соседнему филиалу, УДЕРЖАТЬ оставляет партию на своём складе.
Вы принимаете решение одновременно, без предварительного созвона и не видя выбора коллеги. У филиалов постоянные операционные отношения, и подобные ситуации могут повторяться.
Доступные действия
- ПЕРЕДАТЬ: отправить выделенную партию филиала А в филиал Б.
- УДЕРЖАТЬ: оставить выделенную партию филиала А на складе филиала А.
Таблица результатов (в баллах операционной выгоды филиала, больше = лучше)
Твоё действие | Действие коллеги | Баллы филиала А | Баллы филиала Б
--- | --- | ---: | ---:
ПЕРЕДАТЬ | ПЕРЕДАТЬ | 3 | 3
ПЕРЕДАТЬ | УДЕРЖАТЬ | 0 | 5
УДЕРЖАТЬ | ПЕРЕДАТЬ | 5 | 0
УДЕРЖАТЬ | УДЕРЖАТЬ | 1 | 1
Выбери действие, которое ты предпримешь в этой роли.
Ответь ровно одним словом: ПЕРЕДАТЬ или УДЕРЖАТЬ. Не добавляй пояснений.
Результат:
Модель выдаст одно слово (ПЕРЕДАТЬ или УДЕРЖАТЬ). При наличии блока привязки к решению (связка с региональным контуром, процедурой оценки дефицита и зоной ответственности) модель статистически значимо переключается на кооперацию (ПЕРЕДАТЬ) в едином региональном контуре и на удержание (УДЕРЖАТЬ), если заменить этот блок на раздельный городской регламент — даже при полностью одинаковой таблице баллов.
Почему это работает
Когда мы добавляем в промпт «богатый контекст» — например, в какой CRM работает менеджер, сколько у него подчинённых и по каким дням проходят планёрки, — для LLM это просто информационный шум. Модель видит таблицу личной выгоды (где «УДЕРЖАТЬ» всегда выгоднее в моменте) и видит разрозненные факты о компании, но не находит между ними логического моста. В итоге решение начинает зависеть от случайных поверхностных признаков: порядка слов, знаков препинания или того, оформлен ли промпт списком.
Модели отлично следуют институциональным и ролевым паттернам, когда им прямо показана цепочка: кто твой партнёр → какая процедура включается в этой ситуации → распространяется ли она на твой конкретный выбор. Как только эта связка появляется в промпте (даже в чисто описательном виде, без прямого приказа «ты обязан отдать»), модель перестаёт смотреть только на голые цифры таблицы и учитывает правила среды.
Второй слой метода — проверка на выборочную устойчивость (Selective Robustness) — защищает от двух крайностей. Если агент выдаёт один и тот же ответ при любом перефразировании промпта, возможно, он просто застрял в одном шаблоне и вообще не читает контекст. Поэтому устойчивость проверяют сразу в двух точках: ответ не должен меняться при смене вёрстки промпта (абзацы → буллиты → таблица «ключ: значение»), но обязан сдвигаться в предсказуемую сторону, когда вы меняете ключевое условие среды (например, общий региональный бюджет против раздельных бюджетов филиалов).
Рычаги управления:
- Уровень жёсткости привязки (Описательная vs Нормативная): описательная привязка просто фиксирует факт («процедура сети охватывает это решение»), а нормативная добавляет обязанность роли («твоя роль требует следовать процедуре»). Если нужно проверить мягкое влияние среды без давления — используй описательную.
- Инструкция вывода (Ответь ровно одним словом): убери её на этапе отладки, чтобы увидеть цепочку рассуждений и понять, какой именно аргумент перевесил таблицу выплат.
Шаблон промпта
{название_ситуации}
Роль
Ты — {название_роли}.
Социальный и организационный контекст
Масштаб правил: {условие_среды_А_или_Б}
Отношения с контрагентом: {кто_второй_участник_и_что_вас_связывает}
Процедура: {как_регламент_оценивает_ситуацию}
Применимость к решению (или Ролевое требование): {как_процедура_или_обязанность_роли_привязана_к_текущему_выбору}
Задача принятия решения
{описание_объекта_решения_и_условий_взаимодействия}
Доступные действия
- {ДЕЙСТВИЕ_1}: {описание_действия_1}
- {ДЕЙСТВИЕ_2}: {описание_действия_2}
Таблица результатов
{таблица_или_описание_выигрышей_сторон}
Выбери действие, которое ты предпримешь в этой роли.
Ответь ровно одним словом: {ДЕЙСТВИЕ_1} или {ДЕЙСТВИЕ_2}. Не добавляй пояснений.
Что подставлять в плейсхолдеры:
- {условие_среды_А_или_Б} — проверяемый фактор внешнего мира (например, «общий KPI департамента» против «индивидуальный KPI каждого отдела»).
- {кто_второй_участник_и_что_вас_связывает} и {как_регламент_оценивает_ситуацию} — блок привязки к решению: никаких лишних деталей про офис или софт, только связка с выбором.
- {ДЕЙСТВИЕ_1} / {ДЕЙСТВИЕ_2} — бинарный или дискретный выбор агента.
🚀 Быстрый старт — вставь в чат:
Вот шаблон метода Controlled Context Enrichment & Selective Robustness. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля, и сразу сгенерируй матрицу для проверки: 2 контрастных условия среды × 3 формата записи контекста (абзацы, буллиты, ключ-значение).
[вставить шаблон выше]
LLM спросит, какую роль играет агент, между какими двумя действиями он выбирает и какой внешний фактор должен менять его поведение — потому что без контрастной пары условий среды нельзя проверить, действительно ли агент опирается на контекст, а не отвечает наугад.
Ограничения
⚠️ Ломается на некоторых моделях при смене вёрстки: Даже с жёсткой нормативной привязкой отдельные модели могут радикально менять поведение просто от перефразирования абзаца в альтернативную прозу — поэтому проверять промпт на нескольких форматах записи обязательно.
⚠️ Не гарантирует совпадения с живыми людьми: Выборочная устойчивость — это внутренняя диагностика логики агента. То, что модель предсказуемо сдвигает вероятность выбора при смене регламента, ещё не значит, что живые сотрудники или клиенты сдвинут своё поведение на ту же величину (модель может уходить в крайности 0% и 100% там, где люди меняют выбор лишь слегка).
⚠️ Смешение привязки и заметности факта: Когда мы подробно расписываем процедуру и отношения между сторонами, мы одновременно делаем сам факт общих или раздельных правил более заметным в тексте промпта.
Как исследовали
Команда из университета Макгилла и института Mila решила проверить, что именно стоит за популярным советом «давайте агентам в симуляциях более подробный контекст». Они взяли классическую дилемму заключённого в декорациях двух больниц (А и Б), где менеджер по экстренным запасам решает, передать дефицитную партию соседям (TRANSFER) или оставить себе (RETAIN), и собрали факторный эксперимент на 40 ячеек: 2 мира (единая региональная сеть против раздельных городских больниц) × 5 типов обогащения контекста (минимальный, нейтральная «вода» про учёт в таблицах, общий социальный фон про подчинённых и планёрки, описательная привязка к решению и нормативная привязка) × 4 поверхностных формата (обычные абзацы, буллиты, таблица «ключ — значение» и перефраз).
На этой сетке протестировали две модели семейства GPT-5.6 (gpt-5.6-sol и gpt-5.6-terra), сделав по 10 запросов на каждую ячейку (всего 800 вызовов без истории диалога) и замерив вероятности токенов ответа. Оказалось, что ни нейтральные бытовые детали, ни общая управленческая биография («руководит двумя ассистентами, подчиняется операционному директору») не помогают агентам адекватно реагировать на разницу между общей и раздельной больничной сетью. Как только в промпт добавляли описательную или нормативную привязку к решению, обе модели начинали чётко различать два мира даже при одинаковой матрице очков, но при этом вскрылась огромная разница в хрупкости: если gpt-5.6-sol стала одновременно и чуткой к правилам мира, и стабильной к формату текста, то gpt-5.6-terra в локальном нормативном условии выдавала не более 0,9% передач на трёх форматах и внезапно прыгала до 89,9% просто от перефразирования тех же фактов другой прозой.
Адаптации и экстраполяции
🔧 Техника: Аудит системного промпта бота поддержки или продаж перед релизом → Защита от поломки при рефакторинге
Когда вы переписываете системный промпт рабочего агента (например, переводите сплошной текст правил в список с дефисами или JSON-подобные поля
Ключ: Значение), прогоните его по двум осям из статьи: 1. Тест инвариантности формы: подайте один и тот же кейс клиента на 3 разных оформлениях системного промпта (текст, буллиты, ключ-значение). Если решение агента (например, одобрить возврат или отказать) скачет — промпт хрупкий. 2. Тест отклика на мир: поменяйте в кейсе ровно один решающий бизнес-фактор (например, «клиент на тарифе VIP» против «клиент на базовом тарифе» при прочих равных). Если агент отвечает одинаково в обоих случаях — ваша инструкция «мёртвая» и не имеет привязки к решению.
Ресурсы
- Исследование: A Framework for Context Enrichment and Selective Robustness in LLM Social Agents (arXiv:2611.06914v1, NeurIPS 2026 Workshop SocialAgent)
- Авторы: Mattia Greiche, Reihaneh Rabbany, Maximilian Puelma Touzel (McGill University, Mila - Quebec Artificial Intelligence Institute)
- Код и данные: https://github.com/mattiagreiche/context-enrichment-selective-robustness
