TL;DR
У языковой модели есть два источника фактов: то, что ты положил ей в контекст (промпт, файлы, история диалога), и то, что она «помнит» из обучения. Если нужного факта нет ни там, ни там — модель не останавливается и не говорит «я не знаю». Она достраивает ответ сама: придумывает деталь, угадывает значение, действует как будто факт есть.
Самое неприятное — когда модель частично знает тему. Если API, процесс или правило поменялось после того, как модель обучилась, она по умолчанию тянет старую версию из памяти, даже если это неправильно — и делает это предсказуемо, в одном и том же месте, независимо от того, какую модель ты используешь. А если вдобавок дать модели письменную инструкцию, которая противоречит актуальным данным, — она поверит инструкции, даже когда та хуже. Устаревший гайд вредит сильнее, чем его отсутствие.
Лечится просто: клади конкретные актуальные факты прямо в промпт — и не важно, в каком месте текста, хоть за 100 000 символов от задачи, модель их найдёт и использует. А чтобы модель не выдумывала при нехватке данных — явно проси её сказать «недостаточно информации» вместо того, чтобы действовать наугад.
Схема принципа
ЕСТЬ факт в контексте (ты его дал) → модель использует его правильно, независимо от места в тексте
НЕТ факта в контексте, но модель "помнит" его верно → тоже работает
НЕТ факта ни в контексте, ни в памяти → модель НЕ спрашивает, она ФАБРИКУЕТ ответ
ЕСТЬ факт + ЕСТЬ противоречащая письменная инструкция → модель выбирает инструкцию, даже если она хуже
Пример применения
Задача: SMM-специалист ведёт соцсети бренда через кастомные инструкции в ChatGPT. Полгода назад он загрузил туда гайд по тону речи. Бренд поменял стиль на более разговорный, и сейчас у специалиста есть три свежих поста-примера с новым тоном — но старый гайд в инструкциях он не удалил «на всякий случай».
Промпт:
Вот 3 примера свежих постов бренда — ориентируйся на их тон:
[текст постов]
Напиши пост про запуск новой коллекции в этом же тоне.
Результат: Модель не проигнорирует старый гайд просто потому, что он «старый» — она будет тянуть его правила тона, даже видя противоречащие им свежие примеры. Пост выйдет ближе к устаревшему официозному стилю, а не к живым примерам. Если убрать старый гайд из кастомных инструкций совсем — результат будет точнее соответствовать актуальным примерам.
Второй сценарий (фабрикация): Тот же специалист просит: «Напиши пост, упомянув скидку для держателей нашей карты лояльности» — но не говорит, какая именно скидка. Модель не спросит «а какая скидка?» — она с высокой вероятностью впишет какое-то число сама, правдоподобное на вид. Если явно попросить «если размер скидки не указан — спроси, не придумывай», модель остановится и уточнит.
Почему это работает
Модель не умеет отличать «я знаю этот факт точно» от «я предполагаю по аналогии». У неё нет внутреннего флажка неуверенности, который включает вопрос вместо ответа — по умолчанию она всегда генерирует что-то похожее на ответ, потому что этому её и учили: заканчивать текст правдоподобным продолжением.
При этом модель отлично умеет находить и использовать факт, если он явно есть в тексте перед ней — независимо от того, в начале он или в конце огромного контекста. Внимание модели не «теряет» факт из-за расстояния, если факт реально присутствует.
Отсюда рычаг: не надеяться, что модель «и так знает» специфику твоей задачи (актуальные цены, изменившиеся правила, свежие детали) — класть их явно в промпт. И отдельно просить модель сигнализировать о нехватке данных, а не полагаться на то, что она сама догадается спросить.
Рычаги управления: - Добавь фразу «если не хватает данных — спроси, не угадывай» → снижает фабрикацию почти до нуля в подобных случаях - Убирай устаревшие правила/гайды из системных и кастомных инструкций, а не оставляй «до кучи» → противоречащая инструкция активно портит результат - Не переживай о том, куда именно в длинном промпте вставлять важный факт — работает одинаково в начале и в конце
Ограничения
⚠️ Частичное обновление контекста работает хуже полного: если ты переименовал/обновил только часть терминов, модель может начать путать старое и новое название внутри одного ответа, а не выбрать одно.
⚠️ На знакомых моделям темах проверка «что она прочитала» не предсказывает успех: если тема хорошо знакома модели из обучения (популярная библиотека, известный процесс), она может успешно ответить, даже не «читая» контекст внимательно — потому что тянет из памяти. Это работает в её пользу, но затрудняет диагностику, откуда взялся правильный ответ.
⚠️ Письменная инструкция побеждает корректные данные: если дать модели правило и данные, которые ему противоречат, модель выберет правило почти всегда — даже если оно хуже. Значит держать документы-инструкции в актуальном виде критичнее, чем кажется.
Как исследовали
Исследователи придумали четыре несуществующие библиотеки программирования (Sprocket, Grimwire, Kestrix, Zynet) с вымышленными правилами миграции — чтобы гарантировать, что модель точно не знает их из обучения. Без контекста и без инструментов ни одна из семи моделей не выполнила задачу полностью — ни разу из 154 попыток. Как только те же самые правила подкладывали прямо в промпт, почти все модели (299 из 300 попыток) справлялись.
Дальше взяли реальную библиотеку Pydantic — её модели точно знают — и сравнили обычный запрос с версией, где все названия функций переименованы (но поведение то же). На переименованной версии все семь моделей споткнулись в одном и том же месте, пройдя ровно одинаковый набор из 24 тестов из 79 — потому что все тянули одну и ту же устаревшую память вместо чтения реального кода.
Отдельно проверили расстояние: спрятали нужный факт на расстоянии до 128 000 символов от места, где он нужен — успех не упал. А когда факт вообще убирали — потеря результата была точно пропорциональна количеству убранных фактов, без «эффекта домино». Неожиданный результат — конфликт письменного правила и корректных данных: агенты выбрали правило в 39 из 39 испытаний, даже когда оно вело к худшему коду. Это и натолкнуло авторов на главный практический вывод: устаревшая инструкция вреднее, чем её отсутствие.
Адаптации
🔧 Техника: явный вопрос про уверенность → меньше выдумывания
Вместо простого «ответь на вопрос» добавляй: «Если ты не уверен в конкретном факте (цифре, дате, названии) — прямо скажи об этом и не угадывай». Это напрямую бьёт по описанному в исследовании поведению «факта нет — модель действует, а не спрашивает».
🔧 Техника: аудит кастомных инструкций и системных промптов
Если у тебя есть сохранённые инструкции, гайды, базы знаний в ChatGPT/Claude — периодически проверяй их на актуальность. Исследование показывает: устаревший, но явно прописанный документ модель будет соблюдать охотнее, чем противоречащие ему правильные примеры. Лучше удалить старое правило, чем оставить его «на всякий случай».
Ресурсы
The Working Set of a Coding Agent: Coherence Debt in Repository-Scale Tasks Bardia Mohammadi, Lars Klein, Aman Chadha, Akhil Arora, Laurent Bindschaedler Max Planck Institute for Software Systems, EPFL, Apple, Aarhus University
