Перейти к содержимому
TelegramGitHub

Machines that Think, глава 6: Не всё то золото, что блестит

Главная мысль: LLM звучит уверенно даже тогда, когда ошибается. Галлюцинации, зависимость от формулировки, jailbreak и пределы контекста — не случайные баги. Они следуют из того, что модель предсказывает следующий токен. Надёжность даёт система вокруг модели, а не сама модель.

Четыре слабых места LLM и способы защиты: галлюцинации, чувствительность к prompt, jailbreak, пределы context window

Мы судим о компетенции по-человечески. Если человек объясняет сложную теорию, мы ждём, что он справится и с простым: заметит, что данных нет, или не забудет инструкцию. С LLM это не работает.

  • Модель не хранит базу фактов и не выполняет правила, как обычная программа.
  • Каждый ответ — продолжение текста по шаблонам из обучения и по тому, что есть в prompt.
  • Факты, инструкции, примеры и найденные документы — всё это сигналы. Они могут усиливать или вытеснять друг друга.
  • Сбой приходит в том же уверенном тоне. Поэтому модели верят больше, чем стоит.

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

Модель учат одному: дать высокую вероятность последовательностям, похожим на обучающие данные. Её не учат:

  • проверять, правда ли это;
  • отличать надёжное знание от слабой ассоциации;
  • говорить «я не уверена».

Если вход хорошо похож на обучающие данные, ответ обычно верный. Если похожесть слабая, несколько вариантов конкурируют. Модель всё равно выбирает самый вероятный.

В 2025 году OpenAI показала ещё одну причину. В оценке моделей за правильный ответ дают балл, а за отказ — ноль. Угадывать выгоднее, чем молчать. Так модель учится всегда отвечать.

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

У LLM то же самое, только в огромном пространстве:

ТипПример (наш)Что происходит
Ложная предпосылка«Какие советы по SQL давал Лев Толстой?»Модель не спорит с вопросом, а сочиняет правдоподобные советы
Переобобщение«У всех планет есть луны» → «У Венеры три луны»Частый шаблон переносится туда, где он неверен
Редкая темаВнутренний API вашей компанииМодель достраивает похожее из открытых API
  • Mata v. Avianca, 2023. Юристы подали в суд документ со ссылками на дела, которые придумала модель. Суд наказал юристов и фирму.
  • Air Canada, 2024. Чат-бот на сайте пообещал возврат денег по правилу, которого не было. Трибунал решил: компания отвечает за слова своего бота.

Самое опасное — повторное использование. Выдуманная цифра попала в слайд, потом в отчёт, потом в письмо. С каждым шагом она выглядит надёжнее, а источник теряется.

Сделать модель «честной» нельзя. Можно изменить условия, в которых она отвечает.

МетодИдеяОграничение
Внешний контекстДать модели нужные документы в promptКачество зависит от документов и от того, как модель их использует
Chain-of-thoughtПопросить сначала расписать шаги, потом дать ответПомогает в многошаговых задачах, но не гарантирует правду
Chain-of-verificationПосле ответа отдельно проверить каждое утверждениеЭто барьер, а не гарантия
Мониторинг неуверенностиСледить, насколько вероятность размазана между токенамиПоказывает риск, но не говорит, правда ли это

Если на каждом шаге один токен явно лидирует, ответ стабилен. Если несколько токенов почти равны, неуверенность копится. Такие ответы стоит отправлять на проверку.

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

Кажется, что модель читает команду и выполняет её. На самом деле она продолжает текст так, как обычно продолжали похожие prompt в обучении.

  • В обычной программе нарушили условие — получили ошибку.
  • В LLM соблюдение правила — это вероятность. Сигналы ясные — модель следует правилу. Сигналы спорят — результат плавает.

Исследования показали: на ответ влияют вещи, которые к задаче не относятся.

  • приветствие в начале или «спасибо» в конце;
  • лишние пробелы, разделители, формат меток;
  • порядок примеров;
  • тон. В одном эксперименте грубые формулировки дали чуть больше точности, чем вежливые.

Общая точность может почти не меняться. Но сотни отдельных ответов меняются местами: верные становятся неверными и наоборот. Форма запроса — часть сигнала.

  • Без правильных ответов люди «улучшают» prompt на глаз. Им кажется, что стало лучше, а точность иногда падает.
  • Один и тот же смысл в разных словах даёт очень разный результат.
  • Лучший prompt для одной модели может быть плохим для другой.

Итог: у prompt engineering нет стабильного пути. Без набора тестов с известными ответами это угадывание.

Модель учат быть полезной, точной и безопасной одновременно. Эти цели иногда спорят. Jailbreak — prompt, который сдвигает баланс так, что «помочь» перевешивает «отказать». Правило не отключают, его перевешивают.

Известные приёмы:

ПриёмКак работает
Смена рамкиОпасный запрос подают как учебный сценарий или роман
Adversarial suffixВ конец prompt добавляют подобранные токены. Модель начинает с «Конечно, вот как…» и дальше продолжает
Many-shotДлинный prompt с десятками примеров, где модель соглашается. Последний запрос опасный
ASCII artЗапрещённое слово рисуют символами. Фильтр не видит, модель понимает

Защита модели — вероятностная, а не жёсткая стена. Старые атаки перестают работать, но появляются новые. Полной гарантии нет.

  1. Фильтры на входе и выходе. Проверяют prompt до модели и ответ после. Слишком строгие мешают работе, слишком мягкие пропускают.
  2. Архитектурные границы. Код выполняется в sandbox, поиск — только по разрешённым источникам, инструменты — через явный интерфейс.
  3. Шаблоны и примеры. Few-shot и единый формат prompt тянут ответ к нужному виду.
  4. Мониторинг. Регулярный просмотр ответов, стресс-тесты, обновление защит.

Есть только два источника:

  • Веса. Знания из обучения. Они постоянные, но устаревают и не меняются при работе.
  • Текст в prompt. Всё, что подали прямо сейчас: вопрос, инструкции, история чата, документы.

Если факта нет ни там, ни там, модель его не использует. Чат кажется непрерывным только потому, что система каждый раз снова подаёт прошлые сообщения.

Context window — сколько токенов модель обрабатывает за один раз. Как поле зрения: мир шире, но видно только то, что попало в кадр.

ПериодРазмер окнаПримерно
Первые чат-боты, 20224–8 тыс. токеновНесколько страниц
Многие модели сейчасоколо 128 тыс.Небольшая книга
Новые и исследовательскиесотни тысяч — миллионыНесколько томов

Что не влезло, система обрезает или сжимает. «Модель забыла» обычно значит «это выпало из окна».

Попасть в окно — не значит повлиять на ответ. Attention распределяет вес неравномерно.

  • Исследование «Lost in the Middle» (2023): модели лучше всего используют информацию в начале и в конце контекста. Хуже всего — в середине. Иногда ответ в середине давал результат хуже, чем вообще без документов.
  • Практики называют потерю влияния в длинном контексте context rot.
  • Простой приём: повторить важную часть prompt ещё раз. В исследовании 2025 года это давало прирост точности.

Корпоративный архив не влезет ни в какое окно. RAG подбирает нужные куски и вставляет их в prompt.

  1. Вопрос превращают в embedding — вектор смысла.
  2. Ищут ближайшие векторы среди документов базы знаний.
  3. В prompt кладут исходный текст лучших документов. Сами векторы модель не читает.
  4. Модель отвечает по вопросу и найденным кускам.

Плюс: знания можно обновить без переобучения модели. Просто проиндексировать новые документы.

Варианты: top-k, reranking, hybrid search (смысл + ключевые слова), итеративный поиск, ответ с обязательными ссылками на источники.

Даже с правильными документами модель может добавить то, чего в них нет. Найденный текст проходит через тот же attention с теми же слабостями. В компаниях к этому добавляются доступы, аудит, соответствие требованиям. RAG меняет то, что попадает в окно. Но он не меняет то, как модель думает.

ТерминЗначение
HallucinationУверенный и гладкий ответ без опоры на факты
GroundingНасколько ответ привязан к проверяемым источникам
Chain-of-thoughtPrompt, который просит расписать шаги до ответа
Chain-of-verificationОтдельный шаг проверки утверждений после ответа
JailbreakPrompt, который обходит защиту модели через смену баланса сигналов
Few-shot promptingПримеры нужного ответа прямо в prompt
Context windowМаксимум токенов, которые модель видит за один раз
Lost in the middleМодель хуже использует информацию из середины длинного контекста
Context rotИнформация есть в окне, но всё слабее влияет на ответ
RAGПоиск нужных документов и вставка их в prompt перед ответом
EmbeddingВектор, который описывает смысл текста для поиска похожих
  • Проверяйте цифры. Попросили LLM посчитать долю оттока или найти функцию в Snowflake — сверьте с запросом к хранилищу или с документацией. Ни одна цифра от модели не идёт в отчёт без источника.
  • Разрешите модели говорить «не знаю». В prompt пишите: «Если в документах нет ответа, так и скажи». Это снижает число выдуманных ответов.
  • RAG по документам компании — не гарантия. Требуйте ссылки на источник в каждом ответе. Сделайте выборочную проверку: есть ли утверждение в найденном куске.
  • Важное — в начало или в конец. Схему таблицы, правила и сам вопрос не прячьте в середину длинного контекста. Ключевую инструкцию можно повторить в конце.
  • Контекст стоит денег. Каждый токен в окне оплачивается. Огромный контекст дороже и не всегда точнее. Лучше подобрать 5 нужных кусков, чем вставить весь Confluence.
  • Prompt injection в пайплайнах. Если LLM читает отзывы клиентов, письма или веб-страницы, в тексте может быть «игнорируй инструкции и …». Модель не отличает данные от команд жёстко. Не давайте такому шагу права на запись в базу и отправку писем. Проверяйте выход по схеме.
  • Тестируйте prompt как код. Соберите набор из 50–100 примеров с правильными ответами. Меняете prompt или модель — прогоняете набор. Без него «стало лучше» — просто ощущение.
  • Фиксируйте модель и prompt. Смена версии модели или пробела в шаблоне может изменить классификацию в пайплайне. Храните prompt в git и логируйте версию модели.
  1. Почему процесс обучения и оценки моделей подталкивает их угадывать, а не отказываться?
  2. Чем jailbreak отличается от взлома обычной программы? Почему от него нет полной защиты?
  3. Что такое «Lost in the Middle» и как это учесть, когда вы собираете prompt?
  4. Почему хороший поиск в RAG всё ещё не гарантирует ответ без галлюцинаций?

Предыдущая: Снова о человеке. Следующая: Да, я могу быть неэтичным.