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


Получение данных с помощью агента знаний в службе "Поиск ИИ Azure"

Замечание

Эта функция сейчас доступна в общедоступной предварительной версии. Этот предварительный просмотр предоставляется без соглашения об уровне обслуживания и не предназначается для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.

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

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

  • извлеченный ответ для модели LLM
  • ссылки на результаты
  • Активность запроса

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

Замечание

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

Предпосылки

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

  • Поиск ИИ Azure в любом регионе, который предоставляет семантический рангер, на ценовой категории "Базовый" и выше. Службе поиска необходимо иметь управляемое удостоверение для роль-ориентированного доступа к модели завершения чата.

  • Разрешения для поиска ИИ Azure. Читатель данных индекса поиска может выполнять запросы в службе "Поиск на базе ИИ Azure", но управляемое удостоверение службы поиска должно иметь разрешения Cognitive Services User на ресурсе Azure OpenAI. Дополнительные сведения о локальном тестировании и получении маркеров доступа см. в кратком руководстве по подключению без ключей.

  • Требования API. Чтобы создать или использовать агент знаний, воспользуйтесь REST API для управления данными 2025-05-01-preview. Кроме того, используйте предварительно подготовленный пакет пакета Azure SDK, который предоставляет API агента знаний: Пакет SDK azure для Python, пакет SDK Azure для .NET, пакет SDK Azure для Java.

Чтобы выполнить действия, описанные в этом руководстве, рекомендуется использовать Visual Studio Code с клиентом REST для отправки вызовов REST API в поиск ИИ Azure. В настоящее время нет поддержки портала.

Вызов действия извлечения

Вызовите действие извлечения для объекта агента знаний, чтобы вызвать извлечение и вернуть ответ. Используйте REST API плоскости данных 2025-05-01-preview или пакет предварительной версии Azure SDK, который предоставляет эквивалентную функциональность для этой задачи.

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

Входные данные для пути поиска — это история чатов на естественном языке, где массив messages содержит разговор.

@search-url=<YOUR SEARCH SERVICE URL>
@accessToken=<YOUR PERSONAL ID>

# Send grounding request
POST https://{{search-url}}/agents/{{agent-name}}/retrieve?api-version=2025-05-01-preview
    Content-Type: application/json
    Authorization: Bearer {{accessToken}}

{
    "messages" : [
            {
                "role" : "assistant",
                "content" : [
                  { "type" : "text", "text" : "You can answer questions about the Earth at night.
                    Sources have a JSON format with a ref_id that must be cited in the answer.
                    If you do not have the answer, respond with "I don't know"." }
                ]
            },
            {
                "role" : "user",
                "content" : [
                  { "type" : "text", "text" : "Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?" }
                ]
            }
        ],
    "targetIndexParams" :  [
        { 
            "indexName" : "{{index-name}}",
            "filterAddOn" : "page_number eq '105'",
            "IncludeReferenceSourceData": true, 
            "rerankerThreshold" : 2.5,
            "maxDocsForReranker": 50
        } 
    ]
}

Основные моменты:

  • messages формулирует сообщения, отправленные в модель. Формат сообщения аналогичен API-интерфейсам Azure OpenAI.

    • role определяет, откуда поступило сообщение, например assistant или user. Используемая модель определяет допустимые роли.

    • content — сообщение, отправленное в LLM. Это должен быть текст в этом предпросмотре.

  • targetIndexParams укажите инструкции по извлечению. В настоящее время в этой предварительной версии можно использовать только один индекс.

    • filterAddOn позволяет задать выражение фильтра OData для ключевого слова или гибридного поиска.

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

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

      rerankerThreshold — это минимальная оценка семантического переборщика, которая приемлема для включения в ответ. Оценки ранжировщика варьируются от 1 до 4. Запланируйте изменение этого значения на основе тестирования и того, что работает для вашего содержимого.

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

      Часть content ответа состоит из 200 блоков или менее, исключая любые результаты, которые не соответствуют минимальному порогу в значении 2,5 повторной оценки.

Просмотр извлеченного ответа

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

Текст ответа также структурирован в формате стиля сообщения чата. В настоящее время в этом выпуске предварительной версии содержимое сериализуется в формате JSON.

"response": [
    {
        "role": "assistant",
        "content": [
            {
                "type": "text",
                "text": "[{\"ref_id\":0,\"title\":\"Urban Structure\",\"terms\":\"Location of Phoenix, Grid of City Blocks, Phoenix Metropolitan Area at Night\",\"content\":\"<content chunk redacted>\"}]"
            }
        ]
    }
]

Основные моменты:

  • content — это массив JSON. Это одна строка, состоящая из наиболее релевантных документов (или блоков), найденных в индексе поиска, учитывая входные данные журнала запросов и чата. Этот массив – это базовые данные, которые модель завершения чата использует для формирования ответа на вопрос пользователя.

  • "Text" является единственным допустимым значением для type, и значение состоит из идентификатора ссылки на блок (используемого при цитировании) и любых полей, указанных в семантической конфигурации целевого индекса. В этом примере следует предположить, что семантическая конфигурация в целевом индексе имеет поле "title", поле "термины" и поле "content".

Замечание

Свойство maxOutputSizeагента знаний определяет длину строки. Рекомендуется 5000 токенов.

Анализ массива действий

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

Выходные данные включают:

  • Маркер, используемый для ввода
  • Количество токенов для выходных данных
  • Вложенные запросы, отправленные в конвейер извлечения данных
  • Количество результатов на подзапрос
  • Фильтры в вложенных запросах, если это применимо
  • Счетчики маркеров, используемые для ранжирования и извлечения

Ниже приведен пример массива действий.

"activity": [
    {
      "type": "ModelQueryPlanning",
      "id": 0,
      "inputTokens": 1261,
      "outputTokens": 270
    },
    {
      "type": "AzureSearchQuery",
      "id": 1,
      "targetIndex": "earth_at_night",
      "query": {
        "search": "suburban belts December brightening urban cores comparison",
        "filter": null
      },
      "queryTime": "2025-05-30T21:23:25.944Z",
      "count": 0,
      "elapsedMs": 600
    },
    {
      "type": "AzureSearchQuery",
      "id": 2,
      "targetIndex": "earth_at_night",
      "query": {
        "search": "Phoenix nighttime street grid visibility from space",
        "filter": null
      },
      "queryTime": "2025-05-30T21:23:26.128Z",
      "count": 2,
      "elapsedMs": 161
    },
    {
      "type": "AzureSearchQuery",
      "id": 3,
      "targetIndex": "earth_at_night",
      "query": {
        "search": "interstate visibility from space midwestern cities",
        "filter": null
      },
      "queryTime": "2025-05-30T21:23:26.277Z",
      "count": 0,
      "elapsedMs": 147
    },
    {
      "type": "AzureSearchSemanticRanker",
      "id": 4,
      "inputTokens": 2622
    }
  ],

Просмотр массива ссылок

Массив references является прямой ссылкой на основные данные основы и включает sourceData, используемые для формирования ответа. Он состоит из каждого документа, который был найден и семантически ранжирован поисковой системой. Поля в списке sourceData включают в себя id и семантические поля: title, terms, content.

Это id идентификатор ссылки для элемента в определенном ответе. Это не ключ документа в индексе поиска. Он используется для предоставления ссылок.

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

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

Ниже приведен пример массива ссылок.

  "references": [
    {
      "type": "AzureSearchDoc",
      "id": "0",
      "activitySource": 2,
      "docKey": "earth_at_night_508_page_104_verbalized",
      "sourceData": null
    },
    {
      "type": "AzureSearchDoc",
      "id": "1",
      "activitySource": 2,
      "docKey": "earth_at_night_508_page_105_verbalized",
      "sourceData": null
    }
  ]