Одним из наиболее распространенных применений генеративного ИИ и больших языковых моделей (LLM) является ответ на вопросы, основанные на конкретном внешнем корпусе знаний. Поисково-дополненная генерация (RAG) — это популярный метод построения вопросно-ответных систем, использующих внешнюю базу знаний. Дополнительные сведения см. в разделе Создание мощного бота, отвечающего на вопросы, с помощью Amazon SageMaker, Amazon OpenSearch Service, Streamlit и LangChain.
Традиционные системы RAG часто с трудом могут дать удовлетворительные ответы, когда пользователи задают расплывчатые или двусмысленные вопросы без предоставления достаточного контекста. Это приводит к бесполезным ответам типа «Я не знаю» или неправильным, выдуманным ответам, предоставляемым LLM. В этом посте мы демонстрируем решение для улучшения качества ответов в таких случаях использования по сравнению с традиционными системами RAG путем введения интерактивного компонента уточнения с использованием Лангчейн.
Основная идея заключается в том, чтобы дать возможность системе RAG вступить в диалог с пользователем, когда первоначальный вопрос неясен. Задавая уточняющие вопросы, предлагая пользователю предоставить более подробную информацию и включая новую контекстную информацию, система RAG может собрать необходимый контекст для предоставления точного и полезного ответа — даже на основе неоднозначного первоначального запроса пользователя.
Обзор решения
Чтобы продемонстрировать наше решение, мы создали Индекс Amazon Кендры (состоящий из онлайн-документации AWS для Amazon Kendra, Amazon Lex и Amazon SageMaker), агента LangChain с LLM Amazon Bedrock и простой Стримлит пользовательский интерфейс.
Предварительные условия
Чтобы запустить эту демонстрацию в своей учетной записи AWS, выполните следующие предварительные условия:
- Клонируйте Репозиторий GitHub и следуйте инструкциям, описанным в README.
- Разверните индекс Amazon Kendra в своей учетной записи AWS. Вы можете использовать следующую AWS CloudFormation шаблон чтобы создать новый индекс или использовать уже работающий индекс. Развертывание нового индекса может добавить к вашему счету дополнительные расходы, поэтому мы рекомендуем удалить его, если он вам больше не нужен. Обратите внимание, что данные в индексе будут отправлены в выбранную модель фундамента Amazon Bedrock (FM).
- Агент LangChain использует FM, доступные в Amazon Bedrock, но его можно адаптировать к любому другому LLM, поддерживаемому LangChain.
- Чтобы поэкспериментировать с примером внешнего интерфейса, общим для кода, вы можете использовать Amazon SageMaker Studio для запуска локального развертывания приложения Streamlit. Обратите внимание, что запуск этой демонстрации повлечет за собой некоторые дополнительные расходы.
Внедрить решение
Традиционные агенты RAG часто разрабатываются следующим образом. Агент имеет доступ к инструменту, который используется для получения документов, соответствующих запросу пользователя. Полученные документы затем вставляются в приглашение LLM, чтобы агент мог предоставить ответ на основе полученных фрагментов документов.
В этом посте мы реализуем агент, который имеет доступ к KendraRetrievalTool
извлекает соответствующие документы из индекса Amazon Kendra и предоставляет ответ с учетом полученного контекста:
Обратитесь к Репозиторий GitHub полный код реализации. Дополнительные сведения о традиционных сценариях использования RAG см. в разделе «Ответы на вопросы с помощью извлечения дополненной генерации с базовыми моделями в Amazon SageMaker JumpStart».
Рассмотрим следующий пример. Пользователь спрашивает: «Сколько графических процессоров имеет мой экземпляр EC2?» Как показано на следующем снимке экрана, агент ищет ответ, используя KendraRetrievalTool
. Однако агент понимает, что он не знает, на какой тип экземпляра Amazon Elastic Compute Cloud (Amazon EC2) ссылается пользователь, и поэтому не дает пользователю полезного ответа, что приводит к ухудшению качества обслуживания клиентов.
Чтобы решить эту проблему, мы определяем дополнительный специальный инструмент под названием AskHumanTool
и передать его агенту. Инструмент инструктирует LLM прочитать вопрос пользователя и задать ему дополнительный вопрос, если KendraRetrievalTool
не может дать хороший ответ. Это означает, что агент теперь будет иметь в своем распоряжении два инструмента:
Это позволяет агенту либо уточнить вопрос, либо предоставить дополнительный контекст, необходимый для ответа на запрос. Чтобы направить агента по использованию AskHumanTool
для этой цели, мы предоставляем LLM следующее описание инструмента:
Use this tool if you don’t find an answer using the KendraRetrievalTool. Ask the human to clarify the question or provide the missing information. The input should be a question for the human.
Как показано на следующем снимке экрана, с помощью AskHumanTool
агент теперь определяет неопределенные вопросы пользователя и возвращает пользователю дополнительный вопрос с просьбой указать, какой тип экземпляра EC2 используется.
После того как пользователь указал тип экземпляра, агент включает дополнительный ответ в контекст исходного вопроса, прежде чем получить правильный ответ.
Обратите внимание, что агент теперь может решить, использовать ли KendraRetrievalTool
получить соответствующие документы или задать уточняющий вопрос, используя AskHumanTool
. Решение агента основано на том, считает ли он фрагменты документа, вставленные в приглашение, достаточными для предоставления окончательного ответа. Такая гибкость позволяет системе RAG поддерживать различные запросы, которые может отправлять пользователь, включая как хорошо сформулированные, так и расплывчатые вопросы.
В нашем примере полный рабочий процесс агента выглядит следующим образом:
- Пользователь отправляет запрос в приложение RAG, спрашивая: «Сколько графических процессоров имеет мой экземпляр EC2?»
- Агент использует LLM, чтобы решить, какое действие предпринять: найти соответствующую информацию для ответа на запрос пользователя, позвонив в
KendraRetrievalTool
. - Агент получает информацию из индекса Amazon Kendra с помощью этого инструмента. Фрагменты полученных документов вставляются в приглашение агента.
- LLM (агента) приходит к выводу, что полученные документы из Amazon Kendra бесполезны или не содержат достаточного контекста для предоставления ответа на запрос пользователя.
- Агент использует
AskHumanTool
чтобы сформулировать дополнительный вопрос: «Какой конкретный тип инстанса EC2 вы используете?» Знание типа экземпляра поможет ответить на вопрос, сколько у него графических процессоров». Пользователь предоставляет ответ «ml.g5.12xlarge», и агент вызываетKendraRetrievalTool
еще раз, но на этот раз добавив в поисковый запрос тип экземпляра EC2. - После повторного выполнения шагов 2–4 агент получает полезный ответ и отправляет его обратно пользователю.
Следующая диаграмма иллюстрирует этот рабочий процесс.
Пример, описанный в этом посте, иллюстрирует, как добавление пользовательского AskHumanTool
позволяет агенту при необходимости запросить уточняющую информацию. Это может повысить надежность и точность ответов, что приведет к улучшению качества обслуживания клиентов при растущем числе приложений RAG в разных областях.
Очистить
Чтобы избежать ненужных затрат, удалите индекс Amazon Kendra, если вы его больше не используете, и закройте экземпляр SageMaker Studio, если вы использовали его для запуска демо-версии.
Заключение
В этом посте мы показали, как улучшить качество обслуживания пользователей системы RAG, добавив специальный инструмент, который позволяет системе запрашивать у пользователя недостающую часть информации. Этот интерактивный диалоговый подход представляет собой многообещающее направление для улучшения традиционных архитектур RAG. Способность разрешить неопределенность посредством диалога может привести к получению более удовлетворительных ответов из базы знаний.
Обратите внимание, что этот подход не ограничивается случаями использования RAG; вы можете использовать его в других случаях использования генеративного ИИ, которые зависят от агента в его основе, где пользовательский AskHumanTool
можно добавить.
Дополнительную информацию об использовании Amazon Kendra с генеративным ИИ см. в разделе Быстрое создание высокоточных приложений генеративного ИИ на основе корпоративных данных с помощью Amazon Kendra, LangChain и больших языковых моделей.
Об авторах
Антония Вибелер работает специалистом по данным в Инновационном центре AWS Generative AI, где ей нравится проводить испытания концепции для клиентов. Ее страсть — изучение того, как генеративный искусственный интеллект может решать реальные проблемы и создавать ценность для клиентов. Хотя она не занимается программированием, ей нравится бегать и участвовать в соревнованиях по триатлону.
Никита Козодой — учёный-прикладник в Инновационном центре AWS Generative AI, где он разрабатывает решения машинного обучения для решения проблем клиентов в разных отраслях. В своей роли он занимается развитием генеративного искусственного интеллекта для решения реальных задач. В свободное время он любит играть в пляжный волейбол и читать.