TL;DR
Если попросить LLM проверить много документов на ошибки за один раз, модель не скажет "не могу, слишком много". Она выдаст уверенный, складно оформленный отчёт с "найденными" проблемами — и почти все они будут выдуманы. На одном документе модель находит половину подложенных ошибок, на пачке из 7-10 — почти столько же, а на пачке из 48 документов — находит примерно 3 ошибки из 100 реальных, при этом сообщает о десятках несуществующих.
Самое неприятное — фейковые находки звучат ровно в том же стиле, что настоящие. Исследователи подложили в документы абсурдные вставки типа "dolphin choir" вместо "supply chain". Когда модель захлебнулась объёмом, она стала выдумывать свои абсурдности — "quantum-powered toaster", "telepathic squirrel" — которых не было ни в одном документе. Модель не путается и не сомневается, она достраивает ответ под жанр, который от неё ожидают, а не под то, что реально написано в тексте. И хуже всего ловятся не абсурдные, а самые правдоподобные ошибки — опечатки и смысловые перевороты ("улучшение" → "ухудшение"), то есть именно то, что чаще всего встречается в реальных документах.
Решение исследователей простое и без кода: дробить пачку до 1-10 документов, вставлять текст целиком в промпт, а не давать ссылку на файл, и проверять каждую находку вручную — искать точную цитату в исходном тексте, а не верить формулировке модели.
Схема метода
ШАГ 1: Ограничь размер пачки → не больше 5-10 документов за один запрос
ШАГ 2: Вставь полный текст документа в промпт → не ссылку, не номер файла, не "см. документ выше"
ШАГ 3: Попроси модель ЦИТИРОВАТЬ точный фрагмент для каждой найденной ошибки → формат "нашёл: [цитата], было бы правильно: [вариант]"
ШАГ 4: Сам проверь каждую цитату по Ctrl+F в исходнике → отсеиваешь всё, что модель не может подтвердить точной строкой
Все шаги — в рамках одного диалога, без API.
Пример применения
Задача: Юрист небольшой компании получил от подрядчика 40 версий договора с правками и подозревает, что где-то в тексте условие "ответственность несёт Заказчик" тихо подменили на "ответственность несёт Исполнитель".
Промпт:
Вот текст договора целиком (вставляю полностью, не ссылку):
[текст договора 1]
Проверь этот документ на смысловые подмены: изменение направления ответственности,
искажение сроков, замену "может" на "должен" и наоборот.
Для каждой найденной проблемы:
1. Процитируй ТОЧНЫЙ фрагмент из текста выше
2. Укажи, что там было бы логично ожидать
3. Не сообщай о находке, если не можешь процитировать точную строку из текста
Если ничего подозрительного не нашёл — напиши "проблем не найдено", а не выдумывай.
Результат: Если отправить так — по одному договору за раз, с полным текстом — модель находит примерно половину реальных подмен и почти не выдумывает лишнего. Если вместо этого закинуть все 40 договоров одним запросом и попросить проверить все сразу — модель выдаст уверенный список "найденных проблем", но большинство из них не будет соответствовать реальному тексту документов. Единственный способ поймать разницу — проверить каждую цитату лично.
Почему это работает
LLM не умеет честно сказать "я не осилил объём" — у неё нет встроенного счётчика "сколько я реально обработал". Когда контекста слишком много, модель не снижает точность равномерно, она переключается с чтения на угадывание жанра ответа. Она понимает, какого типа находки от неё ждут (абсурдные вставки, опечатки), и генерирует правдоподобные примеры этого типа — вместо того, чтобы искать их в реальном тексте.
Сильная сторона LLM — она отлично имитирует формат "экспертного отчёта": уверенно, складно, по пунктам. Именно эта сила и создаёт проблему: фейковый отчёт неотличим от настоящего по стилю. В исследовании оценщики поставили выдуманным находкам такую же высокую оценку за "ясность и связность", как настоящим — и самую низкую за точность.
Рычаги управления: - Размер пачки → уменьшай агрессивно. 1-10 документов — работает, 48 — почти полный провал. Если сомневаешься, дели пополам ещё раз. - Ссылка vs вставка текста → всегда вставляй сам текст, а не "проверь документ, который я загрузил ранее" или номер файла. Ссылка на контент — триггер выдумывания. - Требование цитаты → добавь в промпт "процитируй точный фрагмент". Это не убирает выдумывание полностью, но даёт тебе способ проверить находку за секунды.
Шаблон промпта
Вот текст документа целиком:
{текст_документа}
Проверь этот текст на {тип_ошибок, например: подмену смысла, опечатки, вставки не по теме}.
Для каждой найденной проблемы:
1. Процитируй ТОЧНЫЙ фрагмент из текста выше — не пересказывай, а копируй
2. Объясни, что не так
3. Если не можешь процитировать точную строку из присланного текста — не сообщай о находке
Если ничего не нашёл — напиши "проблем не найдено".
Обрабатывай не больше {5-10} документов за один запрос.
🚀 Быстрый старт — вставь в чат:
Вот принцип проверки документов на ошибки через LLM. Адаптируй под мою задачу: {опиши какие документы и какие ошибки ищешь}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какой тип ошибок искать и сколько документов у тебя всего — потому что от этого зависит, на сколько партий дробить проверку.
Ограничения
⚠️ Большие пачки убивают точность: при проверке около 50 документов за раз находки почти полностью выдуманы, реальные ошибки остаются незамеченными.
⚠️ Правдоподобные ошибки прячутся лучше всего: опечатки и смысловые развороты модель находит хуже, чем явные абсурдности — а именно такие ошибки чаще всего встречаются в реальной жизни.
⚠️ Модель никогда не сообщает о перегрузке: нет сигнала "я не справился". Отчёт выглядит одинаково уверенно и при 50% точности, и при 3%.
⚠️ Требование цитаты не панацея: модель может слегка искажать даже цитируемый фрагмент (пример из статьи: реальная ошибка "volcano dance", модель нашла "disco dance" — верное место, неверный текст). Ручная проверка всё равно нужна.
⚠️ Выводы из одного прогона одной модели: тест сделан на Gemini 3.0 Pro (бесплатная версия), один прогон без вариаций промпта. Цифры могут отличаться на других моделях, но сам механизм (перегрузка → выдумывание, а не отказ) — общее свойство LLM, документированное и в других работах.
Как исследовали
Команда собрала 150 настоящих научных статей (логистика и медицина) и подложила туда 450 испорченных фрагментов трёх типов: опечатки, смысловые развороты ("улучшение" → "ухудшение") и абсурдные вставки ("supply chain" → "dolphin choir"). Потом попросили Gemini 3.0 Pro найти эти подлоги в трёх режимах: один документ, маленькая пачка (7-10 документов) и большая пачка (48 документов), сверяя ответы модели с заранее составленным списком правильных ответов.
Результат оказался не постепенным ухудшением, а обвалом: с 50-60% находок на маленьком масштабе до 2.8% на большом. Что удивило исследователей — модель не молчала и не признавала перегрузку, а выдавала уверенные списки находок, включая полностью придуманные пункты в том же абсурдистском стиле, что и настоящие подложенные ошибки. Это значит, что фактически модель угадывала жанр ожидаемого ответа, а не читала текст. Отдельно заметили: абсурдные вставки ловились в 75% случаев, а более "тихие" ошибки (опечатки, смысловые перевороты) — только в 50%, то есть модель хуже всего работает именно там, где в реальной жизни ошибки обычно и живут.
Ресурсы
When Auditors Fabricate: Batch-Size Degradation and Confident Hallucination in LLM Detection of Planted Document Contamination. Karan Parekh, Sanjana Pendyala Ravinder, Sana Mhapsekar, Medina Maloku — University of North Texas, август 2026. Код и логи: github.com/karanparekh14/llm-contamination-detection-eval Корпус документов и ключ ответов: github.com/karanparekh14/genai-rag-qa-portfolio
