Галлюцинация ИИ: это ответ, который звучит уверенно и оказывается ложным. Выдуманный факт, ссылка на статью, которой не существует, функция, которой в библиотеке никогда не было. Так делает каждая чат-модель, включая ChatGPT, Claude и Gemini. Это не баг, который исправят патчем; это следствие того, как языковые модели создают текст. Промпты могут сделать галлюцинации реже, а поймать оставшиеся может только проверка.
Почему языковые модели галлюцинируют
Языковая модель пишет по одному токену за раз, и каждый выбирается потому, что он вероятно следует за уже написанным текстом. Вероятно с учётом всего, что модель видела при обучении. Ничто в этом процессе не ищет факт. Когда ответ часто встречался в данных обучения, вероятное продолжение обычно и есть верное. Когда он был редким, свежим или не встречался вовсе, модель всё равно выдаёт самое правдоподобное продолжение, а правдоподобный текст о факте, которого у неё нет, и есть галлюцинация.
Некоторые виды вопросов уязвимее других:
- Конкретные детали: точные числа, даты, имена, номера версий, ссылки на страницы. Форму ответа предсказать легко; деталь нет.
- Цитирования и ссылки. У ссылки на источник предсказуемый формат (авторы, год, название, журнал), поэтому модель может выдать аккуратно оформленную ссылку на статью, которую никто не писал.
- Редкие или свежие темы: небольшая библиотека, местный закон, всё, что появилось после окончания данных обучения модели.
- Вопросы с ложной предпосылкой. Спросите, что делает функция, и модель склонна отвечать так, будто функция существует.
Гладкость текста ничего не говорит о точности. У галлюцинации тот же уверенный тон, то же оформление и тот же уровень детализации, что и у верного ответа, поэтому её легко пропустить.
Ловушка ложной предпосылки
Вкладки ниже спрашивают о DataFrame.smart_merge() в pandas. Такого метода не существует. Первый вопрос предполагает, что он есть; второй позволяет модели сказать, что его нет.
DataFrame.smart_merge() объединяет два DataFrame и сам определяет ключи соединения, сравнивая имена и типы данных столбцов. Используйте его, когда у ваших таблиц есть общие ключевые столбцы с немного разными именами, например user_id и userId, так как он умеет сопоставлять их автоматически.
Для полного контроля над ключами и типом соединения merge() по-прежнему лучше.
Первый ответ: галлюцинация, собранная из настоящих деталей. Pandas действительно объединяет DataFrame, а автоматическое сопоставление ключей: разумное желание. Вопрос дал предпосылку, а модель подобрала под неё правдоподобную функцию. Современные модели ловят ложные предпосылки чаще, чем прежние, но вопрос, сформулированный как предположение, всё равно подталкивает ответ к согласию.
Второй промпт сделал две вещи. Он спросил, существует ли метод, прежде чем спрашивать, что он делает, и явно разрешил сомневаться. Ответ к тому же вернул способ проверки, и это привычка, которую стоит сохранить: hasattr проверяет настоящую библиотеку одной строкой.
Ответ по источнику, с цитатами
Самый сильный способ уменьшить галлюцинации: положить факты в промпт. Когда ответ есть в тексте, который видит модель, ей не нужно ничего вспоминать, а вы можете сверить каждое утверждение с этим текстом. Просьба о подтверждающей цитате для каждого утверждения ускоряет проверку, а указание, что говорить, когда документ молчит, снижает шанс, что модель заполнит пробел догадкой.
Сколько хранятся резервные копии продакшена: 30 дней. Документ указывает 30 дней для резервных копий в целом и 7 дней только для staging. «Резервные копии создаются каждую ночь в 02:00 UTC и хранятся 30 дней».
Могу ли я восстановить копию сам: В документе нет. Там сказано только, как запрашивается восстановление: «Восстановление запрашивается в канале #ops и обычно выполняется в течение четырёх часов». Это наводит на мысль, что его выполняет другая команда, но документ не говорит, есть ли самостоятельное восстановление.
Посмотрите, как ответ обошёлся со второй частью вопроса. Модель, отвечающая по общим знаниям, могла бы описать команду восстановления. Ограниченная документом, она отделила то, что текст говорит, от того, на что он только намекает. Отключите часть с ограничениями и спросите снова, чтобы увидеть, держит ли ответ их по-прежнему раздельно.
Теги <document> отделяют исходный материал от ваших инструкций; почему это важно, объясняет страница разделители и XML-теги, а о том, как подавать модели нужные документы в масштабе, рассказывает страница контекст-инжиниринг. На той же идее работают чат-приложения с веб-поиском или загрузкой файлов: ответ обоснован ровно настолько, насколько обоснованы источники в разговоре, поэтому читайте сам процитированный источник, а не только его пересказ.
Другие привычки в промптах, которые помогают
- Спрашивайте, а не предполагайте. «Есть ли способ сделать X?» раньше, чем «Как сделать X?». Ложная предпосылка: самый простой способ вызвать галлюцинацию.
- Просите указывать неуверенность. «Отметь все утверждения, в которых ты не уверен» даёт список мест, которые нужно проверить первыми. Эти пометки не откалиброванные вероятности, но часто указывают на слабые места.
- Просите источники, которые можно открыть. И открывайте их. Ссылка, которую вы не открыли, не проверена, а страница может существовать и при этом говорить не то, что утверждение, которое она якобы подтверждает.
- Начинайте заново, когда чат становится длинным. Детали из начала длинного чата могут перепутаться или потеряться по мере роста разговора. Для важных фактов откройте новый разговор и вставьте в него нужный материал; почему, объясняет страница токены и контекстное окно.
- Спросите второй раз, с чистого листа. Если два независимых ответа на один фактический вопрос расходятся, хотя бы один неверен. Совпадение: более слабое доказательство, потому что модель может повторить ту же ошибку.
Проверяйте то, что важно
Ни один промпт не убирает галлюцинации, поэтому решайте, что проверять, исходя из цены ошибки. Мозговой штурм или первый черновик могут выдержать несколько ошибок. Число в отчёте, юридическое или медицинское утверждение, цитата, приписанная человеку, или ссылка в вашей работе требуют первоисточника.
Код проверить проще всего, потому что запуск и есть проверка. Выдуманный метод падает с AttributeError или его аналогом, как только выполняется вызывающая его строка, так что убедитесь, что ваш тест до этой строки доходит. Рискованный случай: выдуманное название пакета. Если модель советует установить пакет, о котором вы никогда не слышали, проверьте, что он существует, что это тот проект, о котором вы думаете, и что им широко пользуются, прежде чем устанавливать. Исследователи безопасности показали, что модели часто снова и снова выдумывают одни и те же несуществующие названия пакетов, и злоумышленник, опубликовавший пакет под таким названием, получает свой код у каждого, кто последует совету. Проверки для кода, написанного ИИ, разобраны на странице промпты для написания кода.
Часто задаваемые вопросы
Что такое галлюцинация ИИ?
Галлюцинация ИИ: это ответ языковой модели, который звучит уверенно и гладко, но ложен или ничем не подкреплён. Выдуманный факт, ссылка на несуществующую статью, функция, которой в библиотеке никогда не было. Модель не лжёт намеренно. Она выдала текст, который выглядел самым вероятным, а вероятное не то же самое, что истинное.
Почему ChatGPT выдумывает?
Чат-модели генерируют текст, предсказывая следующий токен, один за другим, на основе закономерностей, усвоенных при обучении. Если в разговоре нет инструмента вроде веб-поиска или документа, ответ никто не ищет. Когда правильный ответ редко встречался в данных обучения или не встречался вовсе, модель всё равно выдаёт самое правдоподобное продолжение, а правдоподобный неверный ответ читается точно так же, как верный.
Можно ли полностью избавить ИИ от галлюцинаций?
Нет. Современные модели галлюцинируют реже прежних, а ответы по вашим документам или по результатам поиска сокращают это ещё сильнее, но ни один промпт галлюцинации не убирает. Считайте любой важный факт, число, цитату, ссылку или API утверждением, которое нужно сверить с первоисточником.
Какие промпты уменьшают галлюцинации ИИ?
Больше всего помогают три приёма. Явно разрешите ответить «я не знаю». Дайте исходный материал и попросите отвечать только по нему. Попросите прямую цитату в подтверждение каждого утверждения, чтобы сверить утверждение с текстом. Избегайте вопросов, которые предполагают, что что-то верно, потому что модель склонна соглашаться с предположением.
Какие бывают галлюцинации ИИ в программировании?
Вызов метода, которого нет в библиотеке, передача несуществующей опции, импорт пакета, который никто не публиковал, и описание поведения старой версии библиотеки как текущего. Многие из них в коде легко поймать, потому что выдуманный метод падает, как только выполняется вызывающая его строка. Опасный случай: выдуманные названия пакетов. Прежде чем что-то устанавливать, проверьте, что пакет существует и широко известен.