Извлечение дополненной генерации (RAG) и индексы

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

LLM обучаются на общедоступных данных, доступных во время обучения. Если вам нужны ответы на основе частных данных или часто меняющихся данных, RAG поможет вам:

  • Извлеките соответствующие сведения из данных (часто через индекс).
  • Предоставьте эти сведения модели в качестве основополагающих данных.
  • Создайте ответ, который может содержать ссылки обратно в исходное содержимое.

Что такое RAG?

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

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

Основные понятия для RAG:

  • Данные для привязки: полученное содержимое, которое вы предоставляете модели для снижения неопределенности.
  • Индекс: структура данных, оптимизированная для извлечения (ключевого слова, семантики, вектора или гибридного поиска).
  • Внедрение: числовые представления содержимого, используемого для поиска сходства векторов. Ознакомьтесь с понятием эмбеддингов.
  • Системное сообщение и запросы: инструкции, которые помогут модели использовать полученное содержимое. См. "Инженерия подсказок" и сообщения систем безопасности.

Как работает RAG?

RAG состоит из трёх этапов:

  1. Получение. Когда пользователь задает вопрос, приложение запрашивает индекс или хранилище данных, чтобы найти соответствующее содержимое.
  2. Увеличение: Приложение объединяет вопрос пользователя и полученное содержимое (основные данные) в запрос.
  3. Создание: модель получает дополненную подсказку и создает ответ, основанный на полученном содержимом, что уменьшает неточности и позволяет включать точные ссылки.

Схема, показывающая запрос пользователя, извлечение из хранилища данных и ответ на основе модели.

Что такое индекс и почему мне нужен?

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

Многие решения RAG используют индекс, поддерживающий один или несколько из следующих режимов извлечения:

  • Поиск ключевых слов
  • Семантический поиск
  • Векторный поиск
  • Гибридный поиск (ключевое слово + вектор, иногда с семантическим ранжированием)

Индекс также может хранить поля, повышающие качество ссылки (например, заголовки документов, URL-адреса или имена файлов).

Схема, показывающая извлечение из индекса и то, как извлеченные фрагменты добавляются в запрос модели.

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

Например, предварительная версия REST API Foundry Project включает поле index_asset_id для ресурсов индекса Поиск с использованием ИИ Azure. См. предварительную версию Foundry Project REST API.

Поиск с использованием ИИ Azure — это рекомендуемое хранилище индексов для сценариев RAG. Поиск с использованием ИИ Azure поддерживает получение векторных и текстовых данных, хранящихся в индексах поиска, а также может запрашивать другие целевые объекты при использовании агентического извлечения. См. Что такое Поиск с использованием ИИ Azure?.

Агентский RAG: современный подход к извлечению

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

Извлечение на основе агентности предоставляет несколько преимуществ по сравнению с классической RAG:

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

Если вы используете Поиск с использованием ИИ Azure в качестве подсистемы извлечения, см. статью Agentic retrieval и Quickstart: Agentic retrieval.

Выберите подход в Foundry

Foundry поддерживает несколько шаблонов для работы с частными данными. Выберите в зависимости от сложности варианта использования и сколько элементов управления вам потребуется:

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

Начало работы с RAG в Foundry

Реализация RAG в Foundry обычно следует этому рабочему процессу:

  1. Подготовьте данные: упорядочьте и разбейте ваши личные документы или базу знаний на содержимое, доступное для поиска
  2. Настроить индекс: Настройте индекс Поиск с использованием ИИ Azure или используйте другую службу поиска, чтобы организовать ваш контент для эффективного поиска.
  3. Подключение к Foundry: создание соединения вашего проекта Foundry с вашим индексом или службой поиска и извлечения
  4. Создайте ваше приложение RAG: интегрируйте извлечение с вызовами LLM с помощью Foundry SDK или REST API
  5. Тестирование и оценка. Убедитесь, что качество извлечения является хорошим, и ответы являются точными и должным образом цитируются

Чтобы приступить к работе, выберите один из следующих путей в зависимости от ваших потребностей:

  • Агент с получением: Если вы создаете агент, используйте поиск информации в качестве средства. См. средство поиска файлов для агентов.
  • Пользовательское приложение RAG: создание полного приложения RAG с помощью пакета SDK Foundry для полного управления.

Вопросы безопасности и конфиденциальности

Системы RAG могут предоставлять доступ к конфиденциальному содержимому, если вы не разрабатываете доступ и не организуете запросы тщательно.

  • Примените управление доступом на этапе извлечения. Если вы используете Поиск с использованием ИИ Azure в качестве источника данных, вы можете использовать управление доступом на уровне документа с фильтрами безопасности.
  • Предпочитайте Microsoft Entra ID вместо ключей API для продукции. Ключи API удобны для разработки, но не рекомендуется использовать для рабочих сценариев. Для получения руководства по Поиск с использованием ИИ Azure RBAC см. в разделе Connect to Поиск с использованием ИИ Azure using roles.
  • Обрабатывать полученное содержимое как ненадежные входные данные. Системные сообщения и логика приложения должны снизить риск инъекции подсказок из документов и извлечённых фрагментов. См. сообщения системы безопасности.

Рекомендации по затратам и задержкам

RAG добавляет дополнительную работу по сравнению с запросами, предназначенными исключительно для модели.

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

Если вы используете Поиск с использованием ИИ Azure, подтвердите уровень обслуживания и цены перед внедрением в производство. Если вы используете семантическое или гибридное извлечение данных, ознакомьтесь с ценами и ограничениями Поиск с использованием ИИ Azure в документации по Поиск с использованием ИИ Azure.

Ограничения и устранение неполадок

Известные ограничения

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

Распространенные проблемы и устранение рисков

  • Плохое качество извлечения: если ваш индекс не возвращает релевантные фрагменты, пересмотрите стратегию фрагментирования данных, качество модели встраивания и конфигурацию поиска (ключевые слова, семантический или гибридный).
  • Галлюцинация, несмотря на обоснование: даже с извлеченным контентом модели по-прежнему могут генерировать неточные ответы. Включите ссылки и используйте четкие системные сообщения и инструкции, чтобы указать модели придерживаться полученного содержимого.
  • Проблемы с задержкой: большие индексы могут замедлить извлечение. Рассмотрим стратегию индексирования, фильтрацию и повторное ранжирование, чтобы уменьшить количество обрабатываемых текстовых отрывков.
  • Превышен лимит токенов: Извлеченные фрагменты могут быстро исчерпать лимит токенов. Реализуйте фильтрацию текстовых отрывков, ранжирование или суммаризацию, чтобы остаться в пределах бюджета.

Рекомендации по оценке эффективности RAG можно найти в руководствах и быстрых инструкциях, приведенных в разделе "Связанные материалы" ниже.