Есть задачи, где галлюцинация LLM недопустима. Как их решают
Обычный чат-бот может ошибиться, и это терпимо. Но представьте медицинскую систему, которая пишет пациенту, или финансовую, которая называет сумму. Здесь выдуманная цифра или пропущенный тревожный симптом это не забавный казус, а реальный вред. Возникает вопрос: как заставить модель, которая по своей природе иногда придумывает, не врать там, где цена ошибки высокая. Разбирался в этом и хочу объяснить просто, потому что подход красивый и контринтуитивный.
Первое, что приходит в голову: пусть модель ответит, а мы потом проверим ответ и не покажем, если он расходится с источником. Это рабочий метод, но у него есть потолок. Проверяем мы чаще всего другой моделью, а она тоже иногда ошибается. Получается фильтр, который ловит большую часть брака, но не весь. Вероятность вранья падает, но не обнуляется. Для медицины и денег «почти никогда» это недостаточно. Поэтому сильные системы строят защиту иначе. Ключевая идея: не проверять после, а сделать неправильный ответ невозможным во время генерации. Модель составляет текст по кусочкам, выбирая каждое следующее слово из множества вариантов. В этот момент можно вмешаться и запретить варианты, которые нарушают заданную структуру. Если правило гласит «каждое утверждение обязано сопровождаться ссылкой на источник», то система просто не даёт модели закончить ответ без источника. Не просит, а технически не позволяет. Модель едет как поезд по рельсам: свернуть не туда физически некуда. Здесь важная тонкость. Такой приём гарантирует форму, но не истинность. Он заставляет модель приложить источник, но не проверяет, что источник правда подтверждает сказанное. Поэтому сверху ставят ещё один слой, который сверяет содержание. А для критичных чисел, например цен, вообще убирают генерацию: цену не сочиняет модель, её достают из базы точным запросом. Складывать смысл модели можно доверить, называть цифру нет. Складывается оборона в несколько эшелонов. Структура ответа гарантируется механикой. Точные данные берутся из базы, а не генерируются. Содержание проверяется отдельным слоем. А сверху всё это постоянно испытывают провокациями и каждую пойманную ошибку превращают в тест, чтобы она не повторилась. Главная мысль, которую стоит забрать даже без погружения в технику. Есть разница между «мы попросили модель не врать и проверили» и «мы сделали враньё структурно невозможным». Первое снижает вероятность ошибки. Второе исключает целый класс ошибок полностью. Когда выбираете или заказываете AI-систему для ответственной задачи, правильный вопрос звучит не «а он проверяет ответы», а «что именно здесь сделано невозможным, а что лишь снижено». Ответ на этот вопрос отличает систему, которой можно доверить пациента или деньги, от красивой демонстрации.