Получение расширенного поколения (RAG) в поиске ИИ Azure

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

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

  • Стратегии индексирования, которые загружают и обновляются в масштабе для всего содержимого, по частоте, которую требуется.

  • Возможности запросов и настройка релевантности. Система должна возвращать соответствующие результаты в форматах коротких форм, необходимых для удовлетворения требований к длине маркера входных данных LLM.

  • Безопасность, глобальное достижение и надежность как для данных, так и для операций.

  • Интеграция с моделями внедрения для индексирования, а также моделей чата или моделей распознавания речи для получения.

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

Примечание.

Новые понятия copilot и RAG? Просмотрите векторный поиск и состояние получения искусства для приложений сгенерируемым искусственным интеллектом.

Корпорация Майкрософт имеет несколько встроенных реализаций для использования службы "Поиск ИИ Azure" в решении RAG.

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

Оставшаяся часть этой статьи описывает, как поиск ИИ Azure вписывается в пользовательское решение RAG.

Общие сведения о шаблоне выглядят следующим образом:

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

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

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

Схема архитектуры получения информации с помощью поиска и ChatGPT.

  • UX приложения (веб-приложение) для взаимодействия с пользователем
  • Сервер приложений или оркестратор (уровень интеграции и координации)
  • Поиск ИИ Azure (система получения сведений)
  • Azure OpenAI (LLM для создания искусственного интеллекта)

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

Сервер приложений или оркестратор — это код интеграции, который координирует передачу данных между извлечением информации и LLM. Одним из вариантов является использование LangChain для координации рабочего процесса. LangChain интегрируется с поиском ИИ Azure, что упрощает включение службы "Поиск ИИ Azure" в качестве извлекателя в рабочий процесс. Семантический ядро — это еще один вариант.

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

LLM получает исходный запрос, а также результаты из поиска ИИ Azure. LLM анализирует результаты и формирует ответ. Если LLM является ChatGPT, взаимодействие с пользователем может быть обратной и обратной беседой. Если вы используете Davinci, запрос может быть полностью составным ответом. Решение Azure, скорее всего, использует Azure OpenAI, но от этой конкретной службы нет жесткой зависимости.

Поиск по искусственному интеллекту Azure не обеспечивает встроенную интеграцию LLM для потоков запросов или сохранения чата, поэтому необходимо написать код, который обрабатывает оркестрацию и состояние. Вы можете просмотреть демонстрационный источник (Azure-Samples/azure-search-openai-demo) для схемы полного решения. Мы также рекомендуем Azure AI Studio или Azure OpenAI Studio создавать решения поиска azure на основе RAG, которые интегрируются с LLM.

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

При настройке данных для решения RAG используются функции, которые создают и загружают индекс в службе "Поиск ИИ Azure". Индекс содержит поля, дублирующие или представляющие исходное содержимое. Поле индекса может быть простым переносом (название или описание в исходном документе становится заголовком или описанием в индексе поиска), или поле может содержать выходные данные внешнего процесса, например векторизацию или обработку навыков, которая создает представление или текстовое описание изображения.

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

Content type Индексировано как Функции
text токены, неуправляемый текст Индексаторы могут извлекать обычный текст из других ресурсов Azure, таких как служба хранилища Azure и Cosmos DB. Вы также можете отправить любое содержимое JSON в индекс. Чтобы изменить текст в полете, используйте анализаторы и нормализаторы для добавления лексической обработки во время индексирования. Сопоставления синонимов полезны, если исходные документы отсутствуют терминологии, которые могут использоваться в запросе.
text векторы 1 Текст может быть фрагментирован и векторизирован в конвейер индексатора или обрабатываться внешним образом, а затем индексироваться в виде векторных полей в индексе.
Изображение токены, неуправляемый текст 2 Навыки для OCR и анализа изображений могут обрабатывать изображения для распознавания текста или характеристик изображения. Сведения об изображении преобразуются в доступный для поиска текст и добавляются в индекс. Навыки имеют требование индексатора.
Изображение векторы 1 Изображения могут быть векторизированы в конвейер индексатора или обрабатываться внешне для математического представления содержимого изображения, а затем индексироваться в виде векторных полей в индексе. Для векторизации текста и изображений в одном и том же пространстве внедрения можно использовать многомодальную модель Azure AI Vision или модель открытый код, например OpenAI CLIP.

1 Поиск ИИ Azure предоставляет интегрированные блоки данных и векторизацию, но необходимо принять зависимость от индексаторов и наборов навыков. Если вы не можете использовать индексатор, семантический ядро Майкрософт или другие предложения сообщества помогут вам с полным стеком решения. Примеры кода, демонстрирующие оба подхода, см . в репозитории azure-search-vectors.

2 Навыки — это встроенная поддержка примененного искусственного интеллекта. Для OCR и анализа изображений конвейер индексирования выполняет внутренний вызов API визуального распознавания Azure. Эти навыки передают извлеченный образ в Azure AI для обработки и получают выходные данные в виде текста, индексированного поиском ИИ Azure. Навыки также используются для интегрированного фрагментирования данных (навык разделения текста) и интегрированной внедрения (навыки, которые вызывают многомодальные решения Azure AI Vision, Azure OpenAI и модели в каталоге моделей Azure AI Studio).

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

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

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

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

В поиске ИИ Azure нет типа запроса , даже семантического или векторного поиска, который создает новые ответы. Только LLM предоставляет генерированный ИИ. Ниже приведены возможности в поиске ИИ Azure, которые используются для формирования запросов:

Функция запроса Характер использования Причины использования
Простой или полный синтаксис Lucene Выполнение запроса по тексту и числового содержимого невектора Полнотекстовый поиск лучше всего подходит для точных совпадений, а не аналогичных совпадений. Запросы полнотекстового поиска ранжируются с помощью алгоритма BM25 и поддерживают настройку релевантности с помощью профилей оценки. Он также поддерживает фильтры и аспекты.
Фильтры и аспекты Применяется только к полям текста или числовых (невекторов). Уменьшает область поверхности поиска на основе критериев включения или исключения. Добавляет точность в запросы.
Семантическое ранжирование Повторно ранжирует результирующий набор BM25 с помощью семантических моделей. Создает короткие заголовки и ответы, полезные в качестве входных данных LLM. Проще, чем профили оценки и в зависимости от содержимого, более надежный метод настройки релевантности.
Векторный поиск Выполнение запроса по полям вектора для поиска сходства, где строка запроса является одним или несколькими векторами. Векторы могут представлять все типы содержимого на любом языке.
Гибридный поиск Объединяет все описанные выше методы запроса. Векторные и невекторные запросы выполняются параллельно и возвращаются в едином результирующем наборе. Наиболее значительными преимуществами точности и отзыва являются гибридные запросы.

Структура ответа запроса

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

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

Поля отображаются в результатах поиска, когда атрибут является "извлекаемым". Определение поля в схеме индекса имеет атрибуты и определяет, используется ли поле в ответе. Возвращаются только поля с полным текстом или векторным запросом. По умолчанию возвращаются все поля, которые можно получить, но можно использовать "select" для указания подмножества. Кроме "извлекаемого", нет ограничений на поле. Поля могут иметь любую длину или тип. Что касается длины, в поиске ИИ Azure нет максимального ограничения длины поля, но есть ограничения на размер запроса API.

Строки совпадают с запросом, ранжируются по релевантности, сходству или обоим. По умолчанию результаты будут ограничены в топ-50 совпадений для полнотекстового поиска или к-ближайших соседей совпадений для векторного поиска. Вы можете изменить значения по умолчанию, чтобы увеличить или уменьшить ограничение до максимума 1000 документов. Можно также использовать верхние и пропускающие параметры разбиения на страницы, чтобы получить результаты в виде ряда страничных результатов.

Максимальное значение релевантности и отзыв

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

Ниже приведены некоторые советы по максимизации релевантности и отзыву:

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

Пример кода для рабочего процесса RAG

Следующий код Python демонстрирует основные компоненты рабочего процесса RAG в поиске ИИ Azure. Необходимо настроить клиенты, определить системный запрос и предоставить запрос. Запрос сообщает LLM использовать только результаты запроса и как вернуть результаты. Дополнительные действия, основанные на этом примере, см. в этом кратком руководстве по RAG.

# Set up the query for generating responses
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
from azure.search.documents import SearchClient
from openai import AzureOpenAI

credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default")
openai_client = AzureOpenAI(
    api_version="2024-06-01",
    azure_endpoint=AZURE_OPENAI_ACCOUNT,
    azure_ad_token_provider=token_provider
)

search_client = SearchClient(
    endpoint=AZURE_SEARCH_SERVICE,
    index_name="hotels-sample-index",
    credential=credential
)

# This prompt provides instructions to the model. 
# The prompt includes the query and the source, which are specified further down in the code.
GROUNDED_PROMPT="""
You are a friendly assistant that recommends hotels based on activities and amenities.
Answer the query using only the sources provided below in a friendly and concise bulleted manner.
Answer ONLY with the facts listed in the list of sources below.
If there isn't enough information below, say you don't know.
Do not generate answers that don't use the sources below.
Query: {query}
Sources:\n{sources}
"""

# The query is sent to the search engine, but it's also passed in the prompt
query="Can you recommend a few hotels near the ocean with beach access and good views"

# Retrieve the selected fields from the search index related to the question
search_results = search_client.search(
    search_text=query,
    top=5,
    select="Description,HotelName,Tags"
)
sources_formatted = "\n".join([f'{document["HotelName"]}:{document["Description"]}:{document["Tags"]}' for document in search_results])

response = openai_client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": GROUNDED_PROMPT.format(query=query, sources=sources_formatted)
        }
    ],
    model="gpt-35"
)

print(response.choices[0].message.content)

Код интеграции и LLM

Решение RAG, включающее поиск ИИ Azure, может использовать встроенные возможности блокирования и векторизации данных или создавать собственные платформы, такие как семантический ядро, LangChain или LlamaIndex.

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

Как приступить к работе

  • Используйте Azure AI Studio для создания индекса поиска.

  • Используйте Azure OpenAI Studio и "принесите собственные данные", чтобы экспериментировать с запросами на существующий индекс поиска на детской площадке. Этот шаг помогает решить, какую модель следует использовать, и показывает, насколько хорошо работает существующий индекс в сценарии RAG.

  • Ознакомьтесь с этим кратким руководством по RAG для демонстрации интеграции запросов с моделями чата по индексу поиска.

  • Начните с акселераторов решений:

    • Акселератор решений "Чат с данными" помогает создать пользовательское решение RAG по содержимому.

    • Акселератор решения "Анализ знаний бесед" помогает создать интерактивное решение для извлечения полезных аналитических сведений из расшифровок после контакта.

    • "Создайте собственный акселератор решений copilot", использует Службу OpenAI Azure, поиск ИИ Azure и Microsoft Fabric для создания пользовательских решений copilot.

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

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

  • Используйте шаблоны приложений корпоративного чата, развертывайте ресурсы Azure, код и примеры данных о заземления с помощью вымышленных документов плана работоспособности для Contoso и Northwind. Это комплексное решение дает вам рабочее приложение чата не более 15 минут. Код для этих шаблонов — это демонстрация azure-search-openai-demo , представленная в нескольких презентациях. Следующие ссылки предоставляют версии, относящиеся к языку:

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

  • Ознакомьтесь с созданием запросов , чтобы узнать больше синтаксиса и требований к поисковому запросу.

Примечание.

Некоторые функции поиска ИИ Azure предназначены для взаимодействия с человеком и не полезны в шаблоне RAG. В частности, можно пропустить автозавершение и предложения. Другие функции, такие как аспекты и упорядочение, могут быть полезными, но могут быть редкими в сценарии RAG.

См. также