Улучшите ответы системы LLM в сценариях использования RAG, взаимодействуя с пользователем.

Совершенствуйте ответы системы LLM в сценариях использования RAG путем взаимодействия с пользователем

Одно из наиболее распространенных применений генеративного искусственного интеллекта и моделей большого размера (LLM) – это ответы на вопросы на основе конкретной внешней базы знаний. Retrieval-Augmented Generation (RAG) – это популярная техника создания систем ответов на вопросы, которые используют внешнюю базу знаний. Чтобы узнать больше, обратитесь к Создание мощного бота для ответов на вопросы с использованием Amazon SageMaker, Amazon OpenSearch Service, Streamlit и LangChain .

Традиционные системы RAG часто затрудняются предоставить удовлетворительные ответы, когда пользователи задают нечеткие или двусмысленные вопросы без предоставления достаточного контекста. Это приводит к бесполезным ответам вроде “Я не знаю” или неправильным вымышленным ответам, предоставленным LLM. В этой статье мы демонстрируем решение для улучшения качества ответов в таких случаях использования по сравнению с традиционными системами RAG, введением интерактивного компонента пояснения с использованием LangChain .

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

Обзор решения

Для демонстрации нашего решения мы создали индекс Amazon Kendra (состоящий из онлайн-документации AWS для Amazon Kendra, Amazon Lex и Amazon SageMaker), агент LangChain с LLM Amazon Bedrock и простой пользовательский интерфейс Streamlit.

Предварительные требования

Для запуска этой демонстрации в вашей учетной записи AWS выполните следующие предварительные требования:

  1. Клонируйте репозиторий GitHub и следуйте инструкциям, объясненным в README.
  2. Разверните индекс Amazon Kendra в своей учетной записи AWS. Вы можете использовать следующий шаблон AWS CloudFormation для создания нового индекса или использовать уже работающий индекс. Развертывание нового индекса может привести к дополнительным расходам, поэтому рекомендуем удалить его, если вам он больше не нужен. Обратите внимание, что данные в индексе будут отправлены в выбранную модель основы Amazon Bedrock (FM).
  3. Агент LangChain опирается на FM, доступные в Amazon Bedrock, но это можно адаптировать к любой другой LLM, которую поддерживает LangChain.
  4. Для эксперимента с образцом фронт-энда, разделенным с кодом, вы можете использовать Amazon SageMaker Studio , чтобы запустить локальное развертывание приложения Streamlit. Обратите внимание, что выполнение этой демонстрации вызовет дополнительные расходы.

Реализуйте решение

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

В этой статье мы реализуем агент, который имеет доступ к KendraRetrievalTool и извлекает соответствующие документы из индекса Amazon Kendra и предоставляет ответ на основе полученного контекста:

# инструмент для получения Kendra
kendra_tool = Tool(
    name="KendraRetrievalTool",
    func=retrieval_qa_chain,
    description="Используйте этот инструмент в первую очередь для ответов на вопросы людей. Входными данными для этого инструмента должен быть вопрос.",
)
# традиционный агент RAG
traditional_agent = initialize_agent(
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    tools=[kendra_tool],
    llm=llm,
    early_stopping_method="generate",
    memory=conversational_memory,
)
# вопрос пользователя
answer = traditional_agent.run("Сколько GPU-инстансов у моего экземпляра EC2?")

Полный код реализации можно найти в репозитории GitHub. Дополнительную информацию о традиционном использовании RAG смотрите в статье Вопросно-ответная система с использованием Retrieval Augmented Generation со стартовыми моделями в Amazon SageMaker JumpStart.

Рассмотрим следующий пример. Пользователь задает вопрос: “Сколько GPU-инстансов у моего экземпляра EC2?” Как показано на следующем скриншоте, агент ищет ответ с помощью инструмента KendraRetrievalTool. Однако агент понимает, что не знает, на какой тип экземпляра Amazon Elastic Compute Cloud (Amazon EC2) ссылается пользователь, и поэтому не может дать полезный ответ, что негативно сказывается на опыте клиента.

Обычный ответ RAG

Чтобы решить эту проблему, мы создаем дополнительный инструмент под названием AskHumanTool и предоставляем его агенту. Этот инструмент указывает LLM прочитать вопрос пользователя и задать дополнительный вопрос пользователю, если KendraRetrievalTool не смог предоставить хороший ответ. Таким образом, агент теперь имеет два инструмента:

# инструмент для запроса у человека
human_ask_tool = CustomAskHumanTool()
# RAG агент с двумя инструментами
improved_agent = initialize_agent(
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    tools=[kendra_tool, human_ask_tool],
    llm=llm,
    early_stopping_method="generate",
    memory=conversational_memory,
)
# вопрос пользователя
answer = improved_agent.run("Сколько GPU-инстансов у моего экземпляра EC2?")

Это позволяет агенту уточнить вопрос или предоставить дополнительный контекст, необходимый для ответа на запрос. Чтобы указать агенту использовать AskHumanTool в этом случае, мы предоставляем следующее описание инструмента LLM:

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

Как показано на следующем скриншоте, при использовании AskHumanTool агент теперь определяет неясные вопросы пользователя и задает дополнительный вопрос, просит уточнить, на какой тип экземпляра EC2 ссылается пользователь.

RAG вопрос-комментарий

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

RAG улучшенный окончательный ответ

Обратите внимание, что агент теперь может решить, использовать ли инструмент KendraRetrievalTool для получения соответствующих документов или задать уточняющий вопрос с помощью AskHumanTool. Решение агента основано на том, достаточно ли выборки документов, вставленной в запрос, для предоставления окончательного ответа. Эта гибкость позволяет RAG-системе поддерживать различные запросы, которые пользователь может отправить, включая как четко сформулированные, так и неясные вопросы.

В нашем примере полный рабочий процесс агента выглядит следующим образом:

  1. Пользователь отправляет запрос в приложение RAG, задавая вопрос «Сколько GPU у моего экземпляра EC2?»
  2. Агент использует LLM, чтобы решить, какое действие предпринять: найти соответствующую информацию для ответа на запрос пользователя, вызвав инструмент KendraRetrievalTool.
  3. Агент извлекает информацию из индекса Amazon Kendra с помощью инструмента. Выдержки из полученных документов вставляются в запрос агента.
  4. LLM (агента) выводит, что полученные документы из Amazon Kendra не помогают или не содержат достаточно контекста для предоставления ответа на запрос пользователя.
  5. Агент использует AskHumanTool для формулировки уточняющего вопроса: «Какой конкретно тип экземпляра EC2 вы используете? Знание типа экземпляра поможет определить количество GPU». Пользователь предоставляет ответ «ml.g5.12xlarge», и агент снова вызывает инструмент KendraRetrievalTool, но на этот раз добавляет тип экземпляра EC2 в поисковой запрос.
  6. После выполнения Шагов 2–4 снова агент выводит полезный ответ и отправляет его обратно пользователю.

Следующая диаграмма иллюстрирует этот рабочий процесс.RAG improved architecture

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

Очистка

Чтобы избежать необоснованных затрат, удалите индекс Amazon Kendra, если он больше не используется, и выключите экземпляр SageMaker Studio, если вы использовали его для запуска демонстрации.

Заключение

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

Обратите внимание, что этот подход не ограничен случаями использования RAG; вы можете использовать его и в других случаях использования генеративного ИИ, который зависит от агента в своей основе, где можно добавить пользовательский AskHumanTool.

Для получения дополнительной информации о использовании Amazon Kendra с генеративным ИИ обратитесь к Быстрое создание высокоточных приложений генеративного ИИ на предприятии с использованием Amazon Kendra, LangChain и больших языковых моделей.