Поделиться через


Руководство. Поиск данных с помощью модели чата (RAG в поиске ИИ Azure)

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

Изучив это руководство, вы:

  • Настройка клиентов
  • Написание инструкций для LLM
  • Предоставление запроса, предназначенного для входных данных LLM
  • Просмотр результатов и изучение следующих шагов

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

Необходимые компоненты

Скачивание примера приложения

Вы используете ту же записную книжку из предыдущего руководства по индексации конвейера. Скрипты для запроса LLM выполните действия по созданию конвейера. Если у вас еще нет записной книжки, скачайте ее из GitHub.

Настройка клиентов для отправки запросов

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

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

# Set endpoints and API keys for Azure services
AZURE_SEARCH_SERVICE: str = "PUT YOUR SEARCH SERVICE ENDPOINT HERE"
# AZURE_SEARCH_KEY: str = "DELETE IF USING ROLES, OTHERWISE PUT YOUR SEARCH SERVICE ADMIN KEY HERE"
AZURE_OPENAI_ACCOUNT: str = "PUR YOUR AZURE OPENAI ENDPOINT HERE"
# AZURE_OPENAI_KEY: str = "DELETE IF USING ROLES, OTHERWISE PUT YOUR AZURE OPENAI KEY HERE"

Пример скрипта для запроса и запроса

Ниже приведен скрипт Python, который создает экземпляры клиентов, определяет запрос и настраивает запрос. Этот скрипт можно запустить в записной книжке, чтобы создать ответ из развертывания модели чата.

Для облака Azure для государственных организаций измените конечную точку API в поставщике "https://cognitiveservices.azure.us/.default"маркеров.

# Import libraries
from azure.search.documents import SearchClient
from openai import AzureOpenAI

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
 )

deployment_name = "gpt-4o"

search_client = SearchClient(
     endpoint=AZURE_SEARCH_SERVICE,
     index_name=index_name,
     credential=credential
 )

# Provide instructions to the model
GROUNDED_PROMPT="""
You are an AI assistant that helps users learn from the information found in the source material.
Answer the query using only the sources provided below.
Use bullets if the answer has multiple points.
If the answer is longer than 3 sentences, provide a summary.
Answer ONLY with the facts listed in the list of sources below. Cite your source when you answer the question
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}
"""

# Provide the search query. 
# It's hybrid: a keyword search on "query", with text-to-vector conversion for "vector_query".
# The vector query finds 50 nearest neighbor matches in the search index
query="What's the NASA earth book about?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")

# Set up the search results and the chat thread.
# Retrieve the selected fields from the search index related to the question.
# Search results are limited to the top 5 matches. Limiting top can help you stay under LLM quotas.
search_results = search_client.search(
    search_text=query,
    vector_queries= [vector_query],
    select=["title", "chunk", "locations"],
    top=5,
)

# Newlines could be in the OCR'd content or in PDFs, as is the case for the sample PDFs used for this tutorial.
# Use a unique separator to make the sources distinct. 
# We chose repeated equal signs (=) followed by a newline because it's unlikely the source documents contain this sequence.
sources_formatted = "=================\n".join([f'TITLE: {document["title"]}, CONTENT: {document["chunk"]}, LOCATIONS: {document["locations"]}' for document in search_results])

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

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

Просмотр результатов

В этом ответе ответ основан на пяти входных данных (top=5), состоящих из блоков, определенных поисковой системой, наиболее релевантными. Инструкции в запросе сообщают LLM использовать только информацию в результатах поиска или sourcesформатированных результатах поиска.

Результаты первого запроса "What's the NASA earth book about?" должны выглядеть примерно так, как показано в следующем примере.

The NASA Earth book is about the intricate and captivating science of our planet, studied 
through NASA's unique perspective and tools. It presents Earth as a dynamic and complex 
system, observed through various cycles and processes such as the water cycle and ocean 
circulation. The book combines stunning satellite images with detailed scientific insights, 
portraying Earth’s beauty and the continuous interaction of land, wind, water, ice, and 
air seen from above. It aims to inspire and demonstrate that the truth of our planet is 
as compelling as any fiction.

Source: page-8.pdf

Ожидается, что llms возвращает различные ответы, даже если запросы и запросы не изменяются. Результат может отличаться от примера. Дополнительные сведения см. в статье Об использовании воспроизводимых выходных данных.

Примечание.

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

Добавить фильтр

Помните, что вы создали locations поле с помощью примененного ИИ, заполненного местами, распознаваемыми навыком распознавания сущностей. Определение поля для расположений filterable включает атрибут. Давайте повторим предыдущий запрос, но на этот раз добавьте фильтр, который выбирает термин лед в поле расположения.

Фильтр вводит критерии включения или исключения. Поиск в поисковой системе по-прежнему выполняется векторный поиск "What's the NASA earth book about?", но теперь исключает совпадения, которые не включают лед. Дополнительные сведения о фильтрации строковых коллекций и векторных запросах см. в статьях основы текстового фильтра, общие сведения о фильтрах коллекций и добавлении фильтров в векторный запрос.

Замените определение search_results следующим примером, включающим фильтр:

query="what is the NASA earth book about?"
vector_query = VectorizableTextQuery(text=query, k_nearest_neighbors=50, fields="text_vector")

# Add a filter that selects documents based on whether locations includes the term "ice".
search_results = search_client.search(
    search_text=query,
    vector_queries= [vector_query],
    filter="search.ismatch('ice*', 'locations', 'full', 'any')",
    select=["title", "chunk", "locations"],
    top=5
)

sources_formatted = "=================\n".join([f'TITLE: {document["title"]}, CONTENT: {document["chunk"]}, LOCATIONS: {document["locations"]}' for document in search_results])

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

The NASA Earth book showcases various geographic and environmental features of Earth through 
satellite imagery, highlighting remarkable landscapes and natural phenomena. 

- It features extraordinary views like the Holuhraun Lava Field in Iceland, captured by 
Landsat 8 during an eruption in 2014, with false-color images illustrating different elements 
such as ice, steam, sulfur dioxide, and fresh lava ([source](page-43.pdf)).
- Other examples include the North Patagonian Icefield in South America, depicted through 
clear satellite images showing glaciers and their changes over time ([source](page-147.pdf)).
- It documents melt ponds in the Arctic, exploring their effects on ice melting and 
- heat absorption ([source](page-153.pdf)).
  
Overall, the book uses satellite imagery to give insights into Earth's dynamic systems 
and natural changes.

Изменение входных данных

Увеличение или уменьшение количества входных данных в LLM может иметь большое влияние на ответ. Попробуйте выполнить тот же запрос еще раз после настройки top=8. При увеличении входных данных модель возвращает разные результаты каждый раз, даже если запрос не изменяется.

Ниже приведен один из примеров того, что модель возвращает после увеличения входных данных до 8.

The NASA Earth book features a range of satellite images capturing various natural phenomena 
across the globe. These include:

- The Holuhraun Lava Field in Iceland documented by Landsat 8 during a 2014 volcanic 
eruption (Source: page-43.pdf).
- The North Patagonian Icefield in South America, highlighting glacial landscapes 
captured in a rare cloud-free view in 2017 (Source: page-147.pdf).
- The impact of melt ponds on ice sheets and sea ice in the Arctic, with images from 
an airborne research campaign in Alaska during July 2014 (Source: page-153.pdf).
- Sea ice formations at Shikotan, Japan, and other notable geographic features in various 
locations recorded by different Landsat missions (Source: page-168.pdf).

Summary: The book showcases satellite images of diverse Earth phenomena, such as volcanic 
eruptions, icefields, and sea ice, to provide insights into natural processes and landscapes.

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

Изменение запроса

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

Ниже приведен еще один пример выходных данных LLM, если мы перенаправим запрос на определение расположений для научного исследования.

# Provide instructions to the model
GROUNDED_PROMPT="""
You are an AI assistant that helps scientists identify locations for future study.
Answer the query cocisely, using bulleted points.
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.
Do not exceed 5 bullets.
Query: {query}
Sources:\n{sources}
"""

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

The NASA Earth book appears to showcase various locations on Earth captured through satellite imagery, 
highlighting natural phenomena and geographic features. For instance, the book includes:

- The Holuhraun Lava Field in Iceland, detailing volcanic activity and its observation via Landsat 8.
- The North Patagonian Icefield in South America, covering its glaciers and changes over time as seen by Landsat 8.
- Melt ponds in the Arctic and their impacts on the heat balance and ice melting.
- Iceberg A-56 in the South Atlantic Ocean and its interaction with cloud formations.

(Source: page-43.pdf, page-147.pdf, page-153.pdf, page-39.pdf)

Совет

Если вы продолжаете работу с руководством, не забудьте восстановить запрос до предыдущего значения (You are an AI assistant that helps users learn from the information found in the source material).

Изменение параметров и запросов влияет на ответ от LLM. При изучении самостоятельно имейте в виду следующие советы:

  • top Повышение значения может исчерпать доступную квоту для модели. Если квоты нет, возвращается сообщение об ошибке или модель может вернуть сообщение "Я не знаю".

  • top Повышение значения не обязательно улучшает результат. При тестировании с верхней частью мы иногда замечаем, что ответы не значительно лучше.

  • Так что может помочь? Как правило, ответ — настройка релевантности. Повышение релевантности результатов поиска из службы "Поиск ИИ Azure" обычно является наиболее эффективным подходом для максимизации служебной программы LLM.

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

Следующий шаг