Почему ИИ выдумывает и как это сократить
Семь причин, по которым языковые модели выдумывают ответы, семь видов выдумок с тем, как их ловить, восемь способов сделать их редкими и инструкция с проверкой кодом.
Коротко
Языковая модель выдумывает, потому что не ищет факты, а продолжает текст самыми правдоподобными словами. Когда ответа нет в том, что ей дали, она всё равно выдаёт что-то похожее на правду: несуществующий пункт договора, цену, которой не было, ссылку на страницу, которой нет. Отключить это полностью нельзя, но можно сделать редким и безвредным: дать модели ваши источники, разрешить ей говорить «не знаю», требовать цитату к каждому утверждению, проверять цитаты кодом и оставлять числа расчётам. В важных решениях последнее слово — за человеком.
Почему модели выдумывают: 7 причин
-
Она предсказывает, а не проверяет
Модель подбирает правдоподобные слова; верно ли утверждение, она не знает.
-
Ответа нет в контексте
Без ваших документов модель заполняет пробел из общей памяти — или из воображения.
-
Ей велели всегда отвечать
Инструкция без разрешения сказать «не знаю» подталкивает к выдумке.
-
Знания устарели
Модель училась на данных до определённой даты и ничего не знает о ваших новых ценах.
-
Наводящий вопрос
«Почему у вас бесплатная доставка?» — модель скорее согласится, даже если она платная.
-
Числа, имена и ссылки
Точные детали — самое слабое место: они выглядят правдоподобно в любом виде.
-
Слишком много в одном запросе
В очень длинном контексте модель теряет детали из середины и смешивает факты.
Как выглядят выдумки и как их поймать
Семь видов ошибок, которые встречаются в деловых продуктах, — с тем, как поймать каждую.
| Вид | Пример | Как поймать |
|---|---|---|
| Выдуманный факт | «Возврат принимаем 30 дней» вместо 14 | цитата из источника |
| Выдуманное число | цена, которой нет в прайсе | числа из базы, а не от модели |
| Выдуманная ссылка | страница сайта, которой нет | ссылки только из списка |
| Выдуманная возможность | «Да, наше приложение так умеет» | описание того, что продукт умеет |
| Смешанные объекты | характеристики одной модели у другой | один товар на кусок контекста |
| Устаревшие сведения | прошлогодние условия доставки | дата рядом с каждым источником |
| Уверенность без оснований | твёрдый ответ на неясный вопрос | разрешение переспросить |
8 способов сделать выдумки редкими
-
01
Дать источники
Модель отвечает по найденным кускам ваших документов, а не по памяти.
-
02
Разрешить «не знаю»
Отдельное поле для «не нашёл» и понятный следующий шаг — менеджер.
-
03
Цитата к каждому утверждению
Модель копирует предложение, на котором основан ответ.
-
04
Проверять цитаты кодом
Цитаты нет в источнике — ответ не показывается.
-
05
Числа из базы
Цены, остатки и даты подставляет код, модель только формулирует текст.
-
06
Строгий формат
Ответ в JSON по схеме проверить проще, чем свободный текст.
-
07
Маленькие задачи
Один вопрос, несколько подходящих кусков — меньше шансов что-то перепутать.
-
08
Человек для важного
Договоры, деньги и здоровье — модель готовит, человек решает.
Инструкция и проверка: 2 примера
Инструкция разрешает модели не знать и требует цитаты; код не доверяет модели и проверяет каждую цитату.
Инструкция модели
«Не нашёл» — отдельное поле, а не особая фраза: его нельзя спутать с ответом.
# Начало каждого запроса — каждый раз одинаковое, поэтому уходит в кэш
Ты отвечаешь покупателям магазина только по источникам ниже.
Правила:
1. Используй только факты из источников. Ничего не добавляй от себя.
2. Предложение, на котором держится ответ, скопируй в quotes дословно.
3. Если в источниках нет ответа, поставь found в false
и скажи, что вопрос передан менеджеру.
4. Цены, даты и числа — только так, как они написаны в источниках.
Ответ в JSON:
{"found": true, "answer": "...", "quotes": [{"source": 1, "text": "..."}]}
Проверка цитат
Десять строк кода ловят большую часть выдуманных ответов до того, как их увидит клиент.
// Каждая цитата обязана дословно встречаться в источнике, на который ссылается, —
// иначе ответ не показывается, а вопрос уходит человеку
type Answer = {
found: boolean;
answer: string;
quotes: { source: number; text: string }[];
};
export function verified(a: Answer, sources: string[]): boolean {
if (!a.found) return true; // честному «не нашёл» проверка не нужна
if (a.quotes.length === 0) return false;
return a.quotes.every((q) => sources[q.source - 1]?.includes(q.text.trim()) ?? false);
}
Что не помогает от выдумок
-
«Не выдумывай» в инструкции
Без источников и разрешения не знать сама просьба мало что меняет.
-
Только самая дорогая модель
Сильные модели выдумывают реже, но так же убедительно.
-
Только понизить температуру
Ответы становятся однообразнее, но не правдивее.
-
Просить модель проверить себя
Помогает немного; проверка кодом по источнику — намного больше.
-
Доверять уверенному тону
Выдуманный ответ звучит ровно так же уверенно, как верный.
-
Проверять на лёгких вопросах
Выдумки появляются на вопросах без ответа — они обязаны быть в проверочном наборе.
Вопросы о выдумках ИИ
Что такое галлюцинация ИИ?
Уверенный ответ, который не подтверждается фактами, — модель выдумала его на месте недостающего знания.
Можно ли полностью убрать галлюцинации?
Нет, но источники, цитаты и проверка кодом делают их редкими, а остальные ловятся до клиента.
Какая модель выдумывает меньше всего?
Это меняется от версии к версии; устройство продукта важнее модели.
Решает ли проблему RAG?
Он убирает главную причину — отсутствие данных; вместе с порогом и цитатами даёт надёжные ответы.
Почему модель выдумывает ссылки?
Ссылка для неё — просто правдоподобный текст; ссылки берут только из списка настоящих страниц.
Как измерить, как часто она выдумывает?
Проверочный набор с вопросами, на которые в базе нет ответа: доля честных «не нашёл» — и есть мера.
Форма
Ассистент,
который не выдумывает
Делаю ассистентов, которые отвечают только по вашим источникам, с цитатой к каждому утверждению, — и передают вопрос человеку, когда ответа нет. Расскажите о задаче — отвечу в течение рабочего дня.