3,583 papers
arXiv:2608.16630 79 17 авг. 2026 г. FREE

Coherence Debt: если ИИ не хватает фактов, он не спрашивает — он их выдумывает

КЛЮЧЕВАЯ СУТЬ
Обнаружено: если факта нет ни в промпте, ни в памяти модели — она не останавливается и не спрашивает. Она сочиняет правдоподобный ответ, как студент, который не выучил билет, но чувствует, что молчать нельзя. Понимание Coherence Debt позволяет предсказать, где именно агент начнёт врать в твоём проекте, и заткнуть дырку одной фразой в промпте. Фишка: место факта в тексте вообще не важно — хоть в начале, хоть за 100 000 символов от задачи, модель найдёт и использует его правильно. Хуже другое: если тема знакома модели лишь частично, она тянет устаревшую версию из памяти — предсказуемо, в одном и том же месте, независимо от того, какую модель ты запустил.
Адаптировать под запрос

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


📋 Дайджест исследования

Ключевая суть

Обнаружено: если факта нет ни в промпте, ни в памяти модели — она не останавливается и не спрашивает. Она сочиняет правдоподобный ответ, как студент, который не выучил билет, но чувствует, что молчать нельзя. Понимание Coherence Debt позволяет предсказать, где именно агент начнёт врать в твоём проекте, и заткнуть дырку одной фразой в промпте. Фишка: место факта в тексте вообще не важно — хоть в начале, хоть за 100 000 символов от задачи, модель найдёт и использует его правильно. Хуже другое: если тема знакома модели лишь частично, она тянет устаревшую версию из памяти — предсказуемо, в одном и том же месте, независимо от того, какую модель ты запустил.

Принцип работы

Правило простое: то, что не написано явно в промпте, модель либо достаёт из памяти в устаревшем виде, либо выдумывает с нуля. Письменная инструкция побеждает корректные данные почти всегда — даже когда она хуже и старее. Модель не сверяет, что актуальнее — она просто следует тексту правила, как студент, который зубрит старую методичку, даже видя, что на паре всё уже по-другому.

Почему работает

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

Когда применять

Репозиторные и агентные задачи → особенно когда в системных или кастомных инструкциях накопились старые гайды, а рядом лежат свежие актуальные данные. Критично для долгоживущих проектов — API, документация, брендбуки, правила, которые меняются со временем, а инструкции для ИИ забывают обновлять. Не поможет там, где вообще нет способа дать модели актуальный факт — тогда остаётся только явно просить её признаться в нехватке данных, а не полагаться на догадку.

Мини-рецепт

1. Актуализируй, не копи: убери из инструкций устаревшие гайды и правила, а не оставляй их "на всякий случай" — противоречащая инструкция активно портит результат.
2. Клади факты открыто: конкретные цифры, изменившиеся правила, свежие примеры — прямо в промпт. Не надейся что модель "и так знает", место в тексте роли не играет.
3. Добавь стоп-фразу: Если данных не хватает — спроси, не угадывай. Это резко снижает фабрикацию.
4. Проверяй частичные обновления отдельно: если поменял только часть терминов или названий, убедись что модель не путает старое с новым в одном ответе.

Примеры

[ПЛОХО] : Напиши пост про скидку для держателей нашей карты лояльности (без указания размера скидки)
[ХОРОШО] : Вот 3 примера свежих постов бренда — ориентируйся на их тон: [текст]. Скидка для держателей карты — 15%. Если каких-то данных не хватает — спроси, не придумывай. Напиши пост про запуск новой коллекции.
Источник: The Working Set of a CodingAgent: Coherence Debt in Repository-Scale Tasks
ArXiv ID: 2608.16630 | Сгенерировано: 2026-08-18 05:24

Проблемы LLM

ПроблемаСутьКак обойти
Модель выдумывает факт, а не признаётся что не знаетЕсли нужного факта нет ни в тексте перед моделью, ни в её памяти — она не остановится и не спросит. Придумает правдоподобную деталь: цифру, значение, название. Потому что модель обучена продолжать текст, а не проверять достаточность данныхДобавь в запрос фразу: "если информации не хватает — спроси, не угадывай". Явно разреши модели остановиться вместо ответа
Устаревшая память побеждает, если факт изменился после обучения моделиКогда API, правило или процесс поменялись после обучения модели, а в тексте перед ней нет актуальной версии — модель тянет старую версию из памяти. Происходит предсказуемо, в одном и том же месте, независимо от того какую модель используешьНе надейся что модель "и так знает" актуальные детали. Пропиши текущие факты явно в тексте — место в промпте не важно, хоть в начале, хоть в конце
Письменное правило побеждает верные данные, даже когда правило хужеЕсли дать модели инструкцию (гайд, правило) и данные, которые ей противоречат — модель почти всегда выбирает инструкцию, даже устаревшую и хуже данных. Забытый в промпте старый гайд вредит сильнее, чем его полное отсутствиеУдаляй устаревшие инструкции и правила из системных и кастомных настроек сразу при обновлении. Не оставляй старое "на всякий случай" рядом с новым

Методы

МетодСуть
Явный триггер "спроси, не угадывай" против выдумыванияВпиши в запрос: "если данных недостаточно для ответа — задай уточняющий вопрос, не придумывай значение". Работает потому что меняет базовый режим модели: с "всегда выдай что-то похожее на ответ" на "сначала проверь, хватает ли данных". Работает для конкретных отсутствующих деталей — цифр, названий, параметров. Не гарантирует что модель заметит общее заблуждение, если сама уверена что знает факт
Полная замена устаревших инструкций вместо накопленияПри обновлении процесса, тона или правил — удали старую версию из промпта или системных инструкций целиком, не дописывай новое поверх старого. Работает потому что при конфликте письменного правила и актуальных данных модель выбирает правило почти всегда. Оставленный старый документ активно портит результат, а не просто "не помогает"

Тезисы

ТезисКомментарий
Явно прописанный факт модель находит независимо от места в текстеЕсли факт буквально написан в промпте (не подразумевается, не выводится косвенно) — модель находит и использует его одинаково хорошо и в начале, и в конце длинного текста. Внимание модели не "теряет" факт из-за расстояния — теряется только то, что явно не прописано. Применяй: не бойся класть важные детали далеко от основного вопроса, главное — писать их прямым текстом, а не намёком
Частичное обновление фактов смешивает старое и новое, а не заменяетЕсли обновил только часть терминов или правил (например переименовал один пункт из десяти), модель может использовать старое и новое название вперемешку в одном ответе, а не выбрать одно. Это отдельный сбой — не чистая фабрикация и не чистая устаревшая память, а смешение двух версий. Применяй: обновляй термины и правила полностью за один раз, не частями
📖 Простыми словами

The Working Set of a CodingAgent: Coherence Debt in Repository-Scale Tasks

arXiv: 2608.16630

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

Это как если бы ты нанял стажера, который боится показаться глупым. Ты просишь его починить кран, не давая инструментов и инструкции. Вместо того чтобы признаться, что он гуманитарий и видит разводной ключ впервые, стажер берет синюю изоленту, заматывает всё подряд и с уверенным лицом заявляет, что теперь это инновационная система сдерживания протечек. Формально работа сделана, но при первом же скачке давления всё это рванет тебе в лицо, потому что стажер просто имитировал процесс починки, не понимая физики процесса.

В реальности это выливается в конфликт контекстов. Допустим, ты полгода назад вбил в настройки ChatGPT, что твой бренд — это «строгий люкс», а сегодня пытаешься писать дерзкие посты для молодежи, закинув пару примеров. Модель видит старую установку, видит новые примеры, у неё случается короткое замыкание, и она выдает невнятную кашу. Она не понимает, что старый гайд — это мусорный артефакт, который нужно выкинуть. Для неё это просто еще один кусок текста, который нужно как-то приплести к ответу, даже если он всё портит.

Этот принцип универсален для любой работы с AI, будь то написание кода, юридический анализ или SMM. Исследование на примере CodingAgent четко показывает: чем больше в «рабочем наборе» модели устаревших или лишних данных, тем выше долг согласованности. Модель начинает лажать не потому, что она глупая, а потому, что она пытается усидеть на всех стульях сразу. SEO-оптимизация промптов здесь не поможет — если в базе лежат противоречивые факты, нейронка выберет тот, который статистически «ближе», а не тот, который актуален для тебя.

Короче: если хочешь адекватный результат, проводи жесткую чистку контекста. Нельзя просто наваливать новые инструкции поверх старых в надежде, что AI сам разберется, что важнее. Не разберется. Либо удаляй всё лишнее, либо создавай новый чат с нуля под конкретную задачу. Лишние данные — это яд, который заставляет модель уверенно врать тебе в глаза. Кто умеет вовремя «обнулять» память ассистента, тот получает рабочий инструмент, остальные — красиво упакованную галлюцинацию.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с