5 Приемов предотвращения галлюцинаций при ответе на вопросы RAG

Автор: Дмитрий Иванов [Команда P9X]

~8 минут чтения

Проблема при работе с большими языковыми моделями (LLM)

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

Зачем нужно минимизировать галлюцинации?

Когда клиенты думают об использовании LLM для решения проблемы, одна из первых мыслей, которая часто приходит в голову, — это галлюцинации. Они часто слышали, что LLM иногда выдают текст, который не является правдой или, по крайней мере, ответы, которым нельзя полностью доверять.

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

  • классификация;
  • извлечение информации;
  • автоматизация.

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

Техники предотвращения галлюцинаций

Я разделю этот раздел на два подраздела:

  1. Техники, позволяющие напрямую снизить количество галлюцинаций, которые вы получаете от LLM.
  2. Техники для смягчения ущерба от галлюцинаций.

Я делаю это, потому что считаю, что полезно получить общее представление о методах, которые вы можете использовать для минимизации воздействия галлюцинаций. Вы можете либо попытаться предотвратить их возникновение (первая техника), хотя это практически невозможно достичь со 100% точностью, либо вы можете смягчить ущерб от галлюцинации, как только она произойдёт (техника номер два).

Снижение количества галлюцинаций

В этом подразделе я рассмотрю следующие методы:

  • проверка с помощью LLM (LLM judge);
  • улучшения RAG;
  • оптимизация вашего системного запроса.

Проверка с помощью LLM (LLM judge)

Первая техника, которую я рассмотрю, — это использование LLM в качестве судьи для проверки ответов вашей LLM. Этот метод основан на концепции ниже:

Проверка ответа обычно является более простой задачей, чем генерация ответа.

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

Чтобы сгенерировать ответ, LLM должна прочитать много текста и интерпретировать вопрос пользователя. Затем LLM должна придумать подходящий ответ, учитывая контекст, который ей был предоставлен. Однако проверить ответ обычно проще, поскольку LLM-верификатору нужно оценить, соответствует ли окончательный ответ вопросу и контексту. Вы можете узнать больше о валидации LLM в моей статье о крупномасштабной валидации выходных данных LLM.

Улучшения RAG

Вы также можете внести множество улучшений в свой конвейер RAG, чтобы предотвратить галлюцинации. Первый шаг — получить правильные документы. Я недавно писал об этом процессе, с методами, позволяющими как повысить точность, так и полноту документов, которые вы извлекаете для RAG. В основном это сводится к фильтрации потенциально нерелевантных документов (повышение точности) с помощью таких методов, как повторное ранжирование и проверка LLM. С другой стороны, вы можете убедиться, что включили релевантные документы (повышение полноты), с помощью таких методов, как контекстуальный поиск и выборка большего количества фрагментов документов.

Это изображение иллюстрирует традиционный конвейер RAG, где пользователь вводит свой запрос. Вы встраиваете этот запрос и находите наиболее семантически похожие документы с помощью встраивания сходства. Эти документы передаются в LLM, которая предоставляет ответ на запрос пользователя, учитывая предоставленные документы. Изображение автора.

Оптимизация вашего системного запроса

Ещё один метод, который вы можете использовать для снижения количества галлюцинаций, — это улучшение вашего системного запроса. Anthropic недавно написал статью о инструментах для написания ИИ-агентам, в которой подчёркивается, как они используют Claude Code для оптимизации своих подсказок. Я рекомендую сделать что-то подобное, где вы передаёте все свои подсказки через LLM, прося LLM улучшить вашу подсказку в целом, а также выделяя случаи, когда ваша подсказка успешна, а когда — нет.

Кроме того, вы должны включить в свой запрос предложение о том, что LLM должна использовать только предоставленную информацию для ответа на вопрос пользователя. Вы хотите предотвратить появление информации, основанной на предварительном обучении модели, и вместо этого использовать контекст, который ей был предоставлен.

prompt = f"""

Вы должны отвечать на вопрос пользователя, используя информацию, предоставленную в документах ниже.

Документы: {documents}
Вопрос пользователя: {question}
"""

Это значительно сократит количество случаев, когда LLM отвечает, основываясь на своём предварительном обучении, что является распространённым источником галлюцинаций для LLM.

Смягчение ущерба от галлюцинаций

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

  • цитирование ваших источников;
  • помощь пользователю в эффективном использовании системы.

Цитирование ваших источников

Один из мощных методов — заставить LLM цитировать свои источники при предоставлении ответов. Вы можете увидеть это, например, всякий раз, когда вы просите ChatGPT ответить на вопрос, основанный на содержании в интернете. ChatGPT предоставит вам ответ, а после текста ответа вы также увидите ссылку на веб-сайт, с которого был взят ответ.

Вы можете сделать то же самое для своей системы RAG, либо в режиме реального времени при ответе на вопрос, либо в постобработке. Чтобы сделать это в режиме реального времени, вы можете, например, присвоить отдельным фрагментам документа индивидуальные идентификаторы и попросить LLM указать, какой фрагмент документа использовался для цитирования ответа. Если вы хотите получить более качественные цитаты, вы можете сделать это в постобработке, подробнее об этом можно прочитать в документации Anthropic.

Направление пользователя

Я также считаю, что стоит упомянуть, как вы должны направлять пользователя, чтобы он эффективно использовал ваше приложение. Вы, как создатель вашей системы ответов на вопросы RAG, точно знаете её сильные и слабые стороны. Возможно, ваша система отлично отвечает на один тип вопросов, но хуже справляется с другими типами.

Когда это так (а это часто бывает), я настоятельно рекомендую вам сообщить об этом пользователю. Аргумент против этого заключается в том, что вы не хотите, чтобы пользователь знал о слабостях вашей системы. Однако я бы сказал, что гораздо лучше сообщить пользователю об этих слабостях заранее, чем позволить пользователю столкнуться с ними самостоятельно, например, через галлюцинацию.

Таким образом, вы должны либо иметь информационный текст вокруг вашей системы ответов на вопросы, либо процесс адаптации, который информирует пользователя о том, что:

  1. Модель работает очень хорошо, но иногда может ошибаться.
  2. На какие типы вопросов модель хорошо отвечает, а над какими типами вопросов вы работаете над улучшением.

Резюме

В этой статье я обсудил галлюцинации для LLM. Галлюцинации — это серьёзная проблема, о которой знает множество пользователей. Поэтому вам следует принять ряд конкретных мер для смягчения галлюцинаций. Я рассмотрел методы, позволяющие напрямую сократить количество галлюцинаций, такие как улучшение извлечения документов RAG, оптимизация вашего системного запроса и проверка LLM. Кроме того, я также обсудил, как вы можете минимизировать ущерб от галлюцинаций, как только они возникнут, например, предоставляя ссылки на источники и направляя пользователя для эффективного использования вашего приложения.