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


Учебное руководство: Создание комплексного решения для агентского поиска с использованием Azure AI Search

Замечание

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

В этом руководстве описано, как создать решение, которое интегрирует Службу поиска ИИ Azure и агента Foundry для интеллектуального извлечения знаний.

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

На следующей схеме показана высокоуровневая архитектура этого агентного решения для поиска данных.

Схема интеграции поиска ИИ Azure с службой агента Foundry с помощью MCP.

Подсказка

Предпосылки

Проверка подлинности и разрешения

Перед началом работы убедитесь, что у вас есть разрешения на доступ к содержимому и операциям. Для авторизации рекомендуется использовать аутентификацию и доступ на основе ролей Microsoft Entra ID. Для назначения ролей необходимо быть владельцем или администратором доступа пользователей . Если роли не являются возможными, вместо этого можно использовать проверку подлинности на основе ключей .

Чтобы настроить доступ для этого решения, выберите обе следующие вкладки.

  1. Включите доступ на основе ролей.

  2. Настройте управляемое удостоверение.

  3. Назначение ролей:

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

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

Понять решение

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

Служба "Поиск ИИ Azure" размещает индексированное содержимое и агенты извлечения. К задачам разработки относятся следующие задачи:

  • Создайте источник знаний. Агентическое извлечение поддерживает несколько типов источников знаний, но это решение создает индекс поиска как источник знаний.

  • Создайте базу знаний , которая сопоставляется с развертыванием LLM и использует режим вывода извлеченных данных. Мы рекомендуем этот выходной режим для взаимодействия со службой агента Foundry, так как он предоставляет агенту подлинный, необработанный контент для основы и рассуждений.

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

Создание решения

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

Получение конечных точек

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

  • Конечная точка службы поиска, которую можно найти на странице обзора на портале Azure. Это должно выглядеть следующим образом: https://{your-service-name}.search.windows.net/

Создание объектов агентного извлечения

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

Создание подключения к проекту

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

import requests
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

# Provide connection details
credential = DefaultAzureCredential()
project_resource_id = "{project_resource_id}" # e.g. /subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{account_name}/projects/{project_name}
project_connection_name = "{project_connection_name}"
mcp_endpoint = "{search_service_endpoint}/knowledgebases/{knowledge_base_name}/mcp?api-version=2025-11-01-preview" # This endpoint enables the MCP connection between the agent and knowledge base

# Get bearer token for authentication
bearer_token_provider = get_bearer_token_provider(credential, "https://management.azure.com/.default")
headers = {
  "Authorization": f"Bearer {bearer_token_provider()}",
}

# Create project connection
response = requests.put(
  f"https://management.azure.com{project_resource_id}/connections/{project_connection_name}?api-version=2025-10-01-preview",
  headers = headers,
  json = {
    "name": "project_connection_name",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "ProjectManagedIdentity",
      "category": "RemoteTool",
      "target": mcp_endpoint,
      "isSharedToAll": True,
      "audience": "https://search.azure.com/",
      "metadata": { "ApiType": "Azure" }
    }
  }
)

response.raise_for_status()
print(f"Connection '{project_connection_name}' created or updated successfully.")

Настройка клиента проекта ИИ

Используйте AIProjectClient , чтобы создать клиентское подключение к проекту Foundry.

from azure.ai.projects import AIProjectClient

project_client = AIProjectClient(endpoint=project_endpoint, credential=credential)

list(project_client.agents.list())

Создание агента, использующего средство MCP

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

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

from azure.ai.projects.models import PromptAgentDefinition, MCPTool

# Define agent instructions
instructions = """
A Q&A agent that can answer questions based on the attached knowledge base.
Always provide references to the ID of the data source used to answer the question.
If you don't have the answer, respond with "I don't know".
"""

# Create MCP tool with knowledge base connection
mcp_kb_tool = MCPTool(
    server_label = "knowledge-base",
    server_url = mcp_endpoint,
    require_approval = "never",
    allowed_tools = ["knowledge_base_retrieve"],
    project_connection_id = project_connection_name
)

# Create agent with MCP tool
agent = project_client.agents.create_version(
    agent_name = agent_name,
    definition = PromptAgentDefinition(
        model = agent_model,
        instructions = instructions,
        tools = [mcp_kb_tool]
    )
)

print(f"Agent '{agent_name}' created or updated successfully.")

Чат с агентом

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

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

# Get the OpenAI client for responses and conversations
openai_client = project_client.get_openai_client()

# Create conversation
conversation = openai_client.conversations.create()

# Send request to trigger the MCP tool
response = openai_client.responses.create(
    conversation = conversation.id,
    input = """
        Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown?
        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?
    """,
    extra_body = {"agent": {"name": agent.name, "type": "agent_reference"}},
)

print(f"Response: {response.output_text}")

Улучшение качества данных

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

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

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

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

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

Управление количеством вложенных запросов

LLM, который обрабатывает базу знаний, определяет количество вложенных запросов на основе следующих факторов:

  • Запрос пользователя
  • Журнал чата
  • Ограничения входных данных семантического рангателя

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

Управление контекстом, отправленным агенту

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

Управление затратами и ограничением операций

Сведения о плане запроса смотрите по выходным токенам в массиве активности ответов базы знаний.

Повышение производительности

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

  • Суммирование цепочек сообщений.

  • Используйте gpt-4.1-mini или меньшую, более быструю модель.

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

Очистите ресурсы

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

Вы также можете удалить отдельные объекты:

# Delete the agent
project_client.agents.delete_version(agent.name, agent.version)
print(f"AI agent '{agent.name}' version '{agent.version}' deleted successfully")

# Delete the knowledge base
index_client.delete_knowledge_base(base_name)
print(f"Knowledge base '{base_name}' deleted successfully")

# Delete the knowledge source
index_client.delete_knowledge_source(knowledge_source=knowledge_source_name) # This is new feature in 2025-08-01-Preview api version
print(f"Knowledge source '{knowledge_source_name}' deleted successfully.")

# Delete the search index
index_client.delete_index(index)
print(f"Index '{index_name}' deleted successfully")