undercode_
  1. Главная
  2. Блог
  3. Галлюцинации нейросети: что это и как я ловлю их у своих ИИ-агентов
Робот уверенно показывает на доску с датой 26.09, человек с лупой сверяет её с блокнотом, где записано 27.09

Кейс6 мин чтения

Галлюцинации нейросети: что это и как я ловлю их у своих ИИ-агентов

Что такое галлюцинации нейросети, почему модель уверенно пишет неправду и как с ними бороться: проверка по источнику, ревью другой моделью, порог уверенности.

Содержание · 4 разделов

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

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

Почему нейросеть галлюцинирует

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

В сентябре 2025 года OpenAI опубликовала исследование о причинах галлюцинаций. Главный вывод: обучение и оценка моделей поощряют угадывание. Это похоже на тест с вариантами ответа. Пустая клетка гарантирует ноль баллов, а случайный ответ иногда угадывает. Модель, которую оценивают только по доле верных ответов, учится отвечать всегда, даже когда не знает. Пример из той же статьи: популярный чат-бот на вопрос о теме диссертации одного из авторов исследования трижды уверенно назвал разные темы, и все три были неверными.

На практике галлюцинации у меня растут из четырёх мест:

  • Устаревшее знание. Модель помнит, как программа работала год назад, а с тех пор поменялись версия, путь к файлу или настройка по умолчанию.
  • Пробел в контексте. Нужного факта в переписке нет, и модель его достраивает.
  • Похожие соседние данные. В контексте лежит число, похожее на нужное, и модель хватает его.
  • Давление «надо ответить». Формулировка задачи не оставляет места для «не знаю».

Три случая из моей работы

Шесть ошибок в статье про установку

Статью про установку Hermes Agent первым черновиком писала модель, опираясь на документацию и мой опыт. Текст выглядел чисто. Перед выкладкой я отдал его на ревью модели другого семейства, и она нашла шесть серьёзных ошибок: неверные пути на Windows, неверную настройку подтверждения команд по умолчанию, лишний пример с Docker и ещё три. Каждую я сверил с официальной документацией, и все шесть подтвердились.

Что из этого следует: всё, что меняется (версии, пути, флаги, настройки по умолчанию), модель склонна вспоминать, а не проверять. Вспоминает она уверенно и часто неправильно.

Дата из соседнего поля

Для ролика модель составляла вставку про мой лимит Claude: «26 сентября закончился лимит». Ревьюер полез в логи и показал, что ошибка 429 пришла 27 сентября в 00:20. Дата 26.09 стояла рядом, в идентификаторе сессии, которая началась раньше. Модель взяла число, которое лежало ближе всего и выглядело подходящим.

Цифры, даты и суммы я теперь проверяю отдельно, по первоисточнику: логу, базе, странице документации.

Ответы «обрезаны», а резала не модель

Обратный случай. В статье про локальные LLM я написал, что модель обрезает ответы. Ревьюер не согласился. Стали разбираться: ответы модели были полными, 122–197 токенов, а обрезал их мой собственный скрипт при сохранении в файл. Нейросеть тут не галлюцинировала. Ошибся я, и чуть не приписал ей свой баг.

Прежде чем обвинять модель, проверьте, что она на самом деле получила и что вернула. Иногда неправду вносит обвязка вокруг неё.

Как я борюсь с галлюцинациями

1. Всё, что меняется, сверять с источником

Версию, цену, лимит, настройку по умолчанию и само существование флага или функции агент проверяет у источника перед тем, как об этом написать: в документации вендора, lock-файле, работающей системе. То, что проверить не удалось, помечается как «по памяти, может быть устаревшим». Объяснение протокола или алгоритма меняется редко, но и его я проверяю, если от него зависит код, вывод статьи или безопасность.

2. Второе мнение от модели другого семейства

Каждую статью, сценарий и заметный кусок кода у меня проверяет модель другого производителя, чем та, что писала. Другое семейство я беру, чтобы на текст посмотрела модель, обученная иначе. Гарантии, что так найдётся больше ошибок, нет, поэтому каждое замечание ревьюера я тоже сверяю с первоисточником. Ревьюер получает текст и источники, а не мои рассуждения, и ищет конкретное: утверждения, которые не подтверждает источник.

3. Разрешить сказать «не знаю» и требовать цитаты

В документации Claude по снижению галлюцинаций три базовых приёма:

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

Третий приём я использую при проверке статей: каждое утверждение о продукте должно иметь ссылку на источник. Список источников стоит в конце каждой статьи этого блога.

4. Решения с уверенностью и порогом

Спорные решения у меня принимает Jev, модель TypeSafe для типизированных решений. Я отправляю ей факты и варианты, она возвращает выбор и уверенность от 0 до 1. Если уверенность ниже 0.6, ответ решением не считается, и вопрос уходит человеку. Например, когда я выбирал тему для этой серии статей, Jev дала лучшему варианту 0.62 при общей уверенности 0.54, и вопрос ушёл владельцу блога, а не превратился в решение модели.

Модель, которая обязана выдать ответ, выдаст его всегда. Модель, у которой есть законный способ сказать «не уверена», врёт реже, а её «не уверена» легко заметить.

5. Отделять показание интерфейса от факта

Индикатор в приложении, надпись «OK» в выводе, зелёная галочка доказывают только то, что интерфейс что-то показал. Однажды проверка модели вернула «CLAUDE_OK», хотя ответила совсем другая модель: после ошибки лимита сработала автоматическая подмена. С Codex я однажды поверил кнопке сброса лимитов и потом публично исправлял выводы: подробно в статье про сброс лимитов Codex.

6. Память агента считать подсказкой

Долговременная память агента полезна, но записанное в ней могло устареть. Мои агенты сверяют то, что вспомнили, с репозиторием или работающей системой, прежде чем на это опираться. Как я раскладываю память и контекст агента по слоям, описал в статье где хранить контекст ИИ-агента.

Короткий чек-лист

Перед тем как опубликовать или применить ответ нейросети:

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

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

Читайте также

Источники

  1. Why language models hallucinate (OpenAI, сентябрь 2025)
  2. Научная статья OpenAI о причинах галлюцинаций (arXiv 2509.04664)
  3. Reduce hallucinations (документация Claude)
  4. Jev, модель для типизированных решений (TypeSafe)
Консультация · 60 минут · 6 000 ₽Обсудить свою задачуОпишите задачу в Telegram-боте, разберём её на созвоне.