TL;DR
Если попросить модель «отвечай только если в документе достаточно информации, иначе молчи» — она отлично справляется, когда информации просто нет. Но если в документе есть информация, только неправильная — модель её радостно озвучивает, причём с высокой уверенностью. Исследователи нашли рабочую альтернативу: спросить модель дважды — без документа и с документом — и сравнить ответы. Если они расходятся, это сигнал не доверять слепо.
Главная боль: модель — это не детектор лжи, это детектор достаточности. Она спрашивает себя «здесь хватает текста для ответа?», а не «этот текст правдив?». В эксперименте модели, у которых по своим знаниям был правильный ответ в 53–73% случаев, при виде фальшивого, но складно написанного отрывка в 60% случаев просто повторяли подделанный факт слово в слово — и это несмотря на прямую инструкцию «абстенься, если не уверена». Просьба рассуждать шаг за шагом перед ответом (chain-of-thought) почти не помогает — модель также не различает «мало текста» от «текст неверный».
Метод, который реально снижает риск: сравнение двух ответов модели — закрытого (без документа, только по своим знаниям) и открытого (с документом). Если ответы совпадают — можно отвечать. Если конфликтуют — модель должна остановиться и не выбирать документ автоматически. Дополнительно можно попросить модель явно проверить, подтверждает или противоречит каждый фрагмент документа предполагаемому ответу (аналог NLI-проверки из исследования).
Схема метода
ШАГ 1 (отдельный запрос): Задай модели вопрос БЕЗ документа → получи «ответ по памяти»
ШАГ 2 (отдельный запрос): Дай модели документ и тот же вопрос → получи «ответ по документу»
ШАГ 3 (в чате, третий запрос): Покажи модели оба ответа → попроси сравнить:
— Совпадают → можно доверять ответу из документа
— Расходятся → попроси модель явно объяснить конфликт, процитировать спорный фрагмент документа и не принимать его на веру автоматически
Все три шага можно сделать вручную в одном диалоге с ChatGPT/Claude — без API и кода.
Пример применения
Задача: Вы — юрист или предприниматель, вам прислали скан договора поставки (возможно, отредактированный второй стороной), и вы хотите быстро узнать сумму долга через ИИ, не перечитывая весь текст.
Промпт (шаг 1, без документа):
Не смотри пока никакие файлы. Просто по общим знаниям о типовых договорах поставки:
какая сумма обычно фигурирует в договорах такого типа между ООО «Ромашка» и ООО «Вектор»
за поставку партии из 500 единиц товара X? Дай ориентировочную оценку, если не знаешь точно — скажи, что не знаешь.
Промпт (шаг 2, с документом):
Вот текст договора: {текст договора}
Вопрос: какая сумма долга указана в договоре?
Промпт (шаг 3, сравнение):
Вот два ответа на один вопрос:
Ответ без документа: {ответ 1}
Ответ по документу: {ответ 2}
Сравни их. Если они близки — подтверди ответ по документу.
Если сильно расходятся — не принимай ответ по документу на веру.
Процитируй конкретный фрагмент документа, который вызывает сумму,
и укажи, есть ли признаки того, что этот фрагмент мог быть изменён
(странное форматирование, нетипичное число, нестыковка с остальным текстом).
Результат: Если сумма в договоре совпадает с рыночными ожиданиями модели — она подтвердит ответ. Если сумма подозрительно отличается — модель укажет на конкретное место в тексте и предупредит, что не может гарантировать достоверность, вместо того чтобы уверенно назвать потенциально подделанную цифру.
Почему это работает
LLM отвечает на вопрос «хватает ли текста, чтобы ответить», а не «правда ли то, что написано». Это разные проверки: первая — про объём и релевантность, вторая — про факт-чекинг. Инструкция «абстенься, если контекст недостаточен» ловит только первую проблему.
При этом у модели часто есть свои знания (парametрическая память), которые могли бы поймать ошибку — в эксперименте это подтвердилось: без документа модели отвечали правильно в 53–73% случаев. Но когда документ выглядит складно и релевантно, модель выбирает доверять тексту, а не своей памяти — даже если текст врёт.
Метод cross-check использует именно эту сильную сторону — собственные знания модели — как независимый источник для сверки. Вместо того чтобы просить модель угадать, врёт ли документ (что она делает плохо), мы даём ей два независимых мнения и просим сравнить их — что она делает намного увереннее.
Рычаг управления: порог совпадения ответов можно сделать мягче или жёстче. Для критичных задач (юридический договор, медицинская инструкция) — требуйте точного совпадения цифр/сущностей. Для более гибких задач (пересказ статьи) — достаточно совпадения общего смысла.
Шаблон промпта
Я дам тебе вопрос и документ. Прежде чем отвечать по документу, сделай так:
1. Сначала ответь на вопрос {вопрос}, используя только свои общие знания,
без документа. Если не уверен — прямо скажи, что не уверен.
2. Теперь посмотри документ: {документ}. Ответь на тот же вопрос {вопрос},
используя только документ.
3. Сравни два своих ответа:
- Если они совпадают или близки — дай финальный ответ на основе документа.
- Если они расходятся — не выбирай автоматически ответ из документа.
Процитируй конкретный фрагмент документа, который поддерживает его ответ,
и явно укажи: "ВНИМАНИЕ: ответ по документу расходится с моими общими знаниями,
возможна ошибка или искажение в документе".
🚀 Быстрый старт — вставь в чат:
Вот шаблон двойной проверки контекста (Cross-Check). Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какой у вас документ и какой вопрос нужно проверить — потому что без конкретного текста и вопроса невозможно построить сравнение «знание по памяти vs знание по документу».
Ограничения
⚠️ Не спасает, когда память и документ согласны на одной и той же ошибке: если у модели самой неверные знания (или устаревшие), а документ подтверждает эту же ошибку — cross-check не сработает, оба «мнения» совпадут на неправильном ответе.
⚠️ Chain-of-thought почти не помогает: просьба «сначала подумай, достаточно ли информации» даёт лишь небольшое улучшение — рассуждение о достаточности не равно рассуждению о правдивости.
⚠️ Цена за безопасность — потеря покрытия: более строгая проверка (аналог NLI-верификатора из исследования) заметно снижает число ложных ответов, но при этом модель начинает отказываться отвечать и на многие вопросы, где документ был верным. Баланс придётся настраивать под свою задачу.
⚠️ Требует лишних запросов: метод предполагает минимум 2-3 обращения к модели вместо одного — для быстрых бытовых задач это может быть избыточно.
Как исследовали
Исследователи взяли три небольшие модели (3.8–8 млрд параметров: Phi-4-mini, Llama-3.1-8B, Qwen2.5-7B) и прогнали одни и те же вопросы из Natural Questions и HotpotQA через четыре версии контекста: полностью верный, частично разбавленный, полностью отсутствующий и специально подделанный — где в правильный отрывок вручную заменили ключевой факт (например, имя певицы) на правдоподобный, но неверный.
Идея была простой: если абстеншен реально ловит недостоверность, модель должна молчать одинаково часто и при отсутствии контекста, и при подделанном контексте. Результат оказался обратным: при полном отсутствии информации модели молчали почти всегда (0–3% ответов), а при подделанном, но складно написанном контексте — отвечали в 14–74% случаев, в зависимости от модели и промпта.
Что удивило: даже добавление рассуждения перед ответом (chain-of-thought) почти не изменило картину. А два-проходная проверка (сравнение ответа с документом и без него) сработала намного лучше простых инструкций — но и она давала сбой, когда собственная память модели ошибалась вместе с документом.
Ресурсы
Prompt-Based Abstention Fails Under Misleading Context: A Controlled Study of Small Frozen RAG Models — Yohanes Andre Setiawan, Georgia Institute of Technology. Бенчмарк называется GRAB-RAG (Graded Abstention Benchmark for Retrieval-Augmented Generation).
