Галлюцинации в RAG: починил у себя, проверил у Нейроюриста
Недавно обнаружил в своём боте по интеллектуальной собственности галлюцинацию. Спрашиваю у него про компенсацию за фото на маркетплейсе, бот развёрнуто отвечает и ссылается на конкретные дела. Открываю проверить дело, а там вовсе другая история. Аргументы сторон не такие, как описал бот, сумма другая, тематика близкая, но детали бот попросту выдумал.
Так выглядит галлюцинация в RAG системе - её куда сложнее обнаружить, чем галлюцинацию в обычном чате с нейросетью. В данном случае и реквизиты дела верные, и тематика близкая, но обстоятельства другие, нежели описанные ботом. Для обнаружения такой галлюцинации нужно читать все дело.
Происходит это потому, что бот видит не весь судебный акт, а только его фрагмент в 800 символов (такой размер посчитал оптимальным). Сам акт обычно от 6 до 40 тыс. символов. Бот находит нужный кусок мотивировочной части, но не видит ни аргументов сторон в начале, ни итоговой суммы в конце. И начинает додумывать всё, чего не видел, сам. Первых 3 дел это не касается - для самых релевантных результатов бот подтягивает акт целиком.
Недавно обнаружил в своём боте по интеллектуальной собственности галлюцинацию. Спрашиваю у него про компенсацию за фото на маркетплейсе, бот развёрнуто отвечает и ссылается на конкретные дела. Открываю проверить дело, а там вовсе другая история. Аргументы сторон не такие, как описал бот, сумма другая, тематика близкая, но детали бот попросту выдумал.
Так выглядит галлюцинация в RAG системе - её куда сложнее обнаружить, чем галлюцинацию в обычном чате с нейросетью. В данном случае и реквизиты дела верные, и тематика близкая, но обстоятельства другие, нежели описанные ботом. Для обнаружения такой галлюцинации нужно читать все дело.
Происходит это потому, что бот видит не весь судебный акт, а только его фрагмент в 800 символов (такой размер посчитал оптимальным). Сам акт обычно от 6 до 40 тыс. символов. Бот находит нужный кусок мотивировочной части, но не видит ни аргументов сторон в начале, ни итоговой суммы в конце. И начинает додумывать всё, чего не видел, сам. Первых 3 дел это не касается - для самых релевантных результатов бот подтягивает акт целиком.
Что сделал
Вариант, который, по моему мнению, способен исключить подобную галлюцинацию и не задушить ЛЛМ контекстом – это создать для каждого дела из базы свой паспорт, который будет включать весь контекст дела (что просил истец, что взыскал суд, какие аргументы у сторон, по какой методике считали компенсацию и т.д.). Прогнал базу из 2392 судебных актов (да, наполнил базу новыми актами) через Gemini 2.5 flash и для каждого дела создал паспорт. Этот паспорт теперь прикрепляется к каждому фрагменту (чанку) дела в базе. При поиске бот получает и обрывок текста, и итоговые факты всего акта.
Дополнительно сделал ещё один этап сортировки на основе паспорта. Если модель нашла дело, у которого контекст паспорта не соответствует контексту вопроса, такое дело отсеивается до того, как попадёт в финальный ответ.
По итогу тестов галлюцинаций больше не нашёл. По крайней мере на тех проверках, что я успел прогнать. Стоимость создания таких паспортов вышла около 7 долларов на API (делал через aistudio, выходит дешевле, чем через опенроутер или роутер.аи).