Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта функция сейчас доступна в общедоступной предварительной версии. Этот предварительный просмотр предоставляется без соглашения об уровне обслуживания и не предназначается для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.
В этой статье описывается подход или шаблон для создания решения, использующего поиск знаний Azure AI для получения знаний, и как интегрировать извлечение знаний в пользовательское решение, включающее агент ИИ Azure. В этом шаблоне используется инструмент агента для вызова агентского конвейера извлечения в службе Azure AI Search.
Эта статья поддерживает пример кода agentic-retrieval-pipeline-example на сайте GitHub.
Это упражнение отличается от Краткого руководства по извлечению агента тем, как используется ИИ-агент Azure для извлечения данных из индекса и как используется инструмент агента для оркестрации. Если вы хотите понять конвейер извлечения в самой простой форме, начните с краткого руководства.
Предпосылки
Для этого шаблона конструктора требуются следующие ресурсы:
Поиск ИИ Azure, ценовая категория "Базовый" или выше, в регионе, предоставляющем семантическое ранжирование.
Индекс поиска, удовлетворяющий критериям индексного поиска для агентного извлечения.
Проект в Azure AI Foundry с агентом ИИ Azure в базовой настройке.
Выполните действия, описанные в статье "Создание проекта для Azure AI Foundry". При создании проекта также создается ресурс Azure AI Foundry в вашей подписке Azure.
Azure OpenAI с развертыванием одной из моделей завершения чата, перечисленных ниже. Для модели рекомендуется вместимость не менее 100 000 маркеров. Емкость и ограничение скорости можно найти в списке развертываний моделей на портале Azure AI Foundry. Вы также можете развернуть модели интеграции текста, если вы хотите векторизацию во время запроса.
Поддерживаемые крупные языковые модели
Используйте одну из следующих моделей завершения чата с агентом ИИ:
gpt-4o
gpt-4o-mini
gpt-4.1
gpt-4.1-nano
gpt-4.1-mini
Требования к версии пакета
Используйте версию пакета, которая предоставляет функции предварительной версии.
requirements.txt
Дополнительные пакеты, используемые в примере решения, см. в файле.
azure-ai-projects==1.0.0b11
azure-ai-agents==1.0.0
azure-search-documents==11.6.0b12
Настройка доступа
Перед началом работы убедитесь, что у вас есть разрешения на доступ к содержимому и операциям. Для авторизации рекомендуется использовать аутентификацию и доступ на основе ролей Microsoft Entra ID. Для назначения ролей необходимо быть владельцем или администратором доступа пользователей . Если роли не являются возможными, вместо этого можно использовать проверку подлинности на основе ключей .
Настройте доступ к каждому ресурсу, определенному в этом разделе.
Поиск ИИ Azure предоставляет конвейер извлечения с применением агентов. Настройте доступ для себя, приложения и службы поиска для последующего доступа к моделям.
-
Для локального тестирования необходимо иметь назначенные роли участника службы поиска, участника данных индекса поиска и читателя данных индекса поиска для создания, загрузки и извлечения в службе поиска Azure AI.
Для интегрированных операций убедитесь, что все клиенты, использующие конвейер извлечения (агент и инструмент), имеют назначения роли чтения данных индекса поиска для отправки запросов на извлечение.
Задачи разработки
Задачи разработки на стороне поиска ИИ Azure включают:
- Создайте агент знаний в службе "Поиск ИИ Azure", который сопоставляется с развернутой моделью в модели Azure AI Foundry.
- Вызовите извлекатель и предоставьте параметры запроса, беседы и переопределения.
- Анализ ответа для частей, которые вы хотите включить в приложение чата. Для многих сценариев достаточно только содержимого ответа.
Компоненты решения
Пользовательское приложение делает запросы API в службу Azure AI Search и к пакету SDK Azure.
- Внешние данные из любого места, хотя мы рекомендуем источники данных, используемые для интегрированного индексирования.
- Поиск Azure AI, хранение индексированных данных и агентный модуль извлечения данных.
- Azure AI Foundry, на котором размещены агент ИИ и инструмент.
- Пакет SDK Azure с проектом Foundry, предоставляющий программный доступ к Azure AI Foundry.
- Azure OpenAI, в котором размещена модель завершения чата, используемая агентом знаний, и все модели внедрения, используемые векторизаторами для поиска векторов.
Настройка среды
Каноническое использование агентского извлечения осуществляется через службу Azure AI Agent. Мы рекомендуем его, так как это самый простой способ создать чат-бот.
Решение взаимодействия агентов объединяет Azure AI Search с проектами Foundry, которые используются для создания пользовательских агентов. Агент упрощает разработку, отслеживая историю бесед и вызывая другие инструменты.
Вам нужны конечные точки:
- Поиск с использованием ИИ Azure
- Azure OpenAI
- Проект Azure AI Foundry
Конечные точки для поиска ИИ Azure и Azure OpenAI можно найти на портале Azure на страницах обзора для каждого ресурса.
Конечную точку проекта можно найти на портале Azure AI Foundry:
Войдите на портал Azure AI Foundry и откройте проект.
На плитке "Обзор" найдите и скопируйте конечную точку проекта Azure AI Foundry.
Гипотетическая конечная точка может выглядеть следующим образом:
https://your-foundry-resource.services.ai.azure.com/api/projects/your-foundry-project
Если у вас нет ресурса Azure OpenAI в проекте Foundry, повторите предварительные требования к развертыванию модели. При развертывании модели создается подключение к ресурсу.
Настройка клиента проекта ИИ и создание агента
Используйте AIProjectClient для создания агента ИИ.
from azure.ai.projects import AIProjectClient
project_client = AIProjectClient(endpoint=project_endpoint, credential=credential)
list(project_client.agents.list_agents())
Агент работает на основе поддерживаемой языковой модели, а инструкции указывают агенту на его область применения.
instructions = """
A Q&A agent that can answer questions about the Earth at night.
Sources have a JSON format with a ref_id that must be cited in the answer using the format [ref_id].
If you do not have the answer, respond with "I don't know".
"""
agent = project_client.agents.create_agent(
model=agent_model,
name=agent_name,
instructions=instructions
)
print(f"AI agent '{agent_name}' created or updated successfully")
Добавить инструмент агентного извлечения в агент ИИ
Для сквозного конвейера требуется механизм оркестрации для координации работы средства поиска и агента знаний. Для этой задачи можно использовать инструмент . Инструмент вызывает клиента Azure AI для поиска знаний и агента Azure AI, а также управляет беседами с пользователем.
from azure.ai.agents.models import FunctionTool, ToolSet, ListSortOrder
from azure.search.documents.agent import KnowledgeAgentRetrievalClient
from azure.search.documents.agent.models import KnowledgeAgentRetrievalRequest, KnowledgeAgentMessage, KnowledgeAgentMessageTextContent, KnowledgeAgentIndexParams
agent_client = KnowledgeAgentRetrievalClient(endpoint=endpoint, agent_name=agent_name, credential=credential)
thread = project_client.agents.threads.create()
retrieval_results = {}
# AGENTIC RETRIEVAL DEFINITION DEFERRED TO NEXT SECTION
functions = FunctionTool({ agentic_retrieval })
toolset = ToolSet()
toolset.add(functions)
project_client.agents.enable_auto_function_calls(toolset)
Структура сообщений
Сообщения, отправляемые средству агента, содержат инструкции по журналу чата и использованию результатов, полученных из получения знаний в службе поиска ИИ Azure. Ответ передается как большая одна строка без сериализации или структуры.
def agentic_retrieval() -> str:
"""
Searches a NASA e-book about images of Earth at night and other science related facts.
The returned string is in a JSON format that contains the reference id.
Be sure to use the same format in your agent's response
"""
# Take the last 5 messages in the conversation
messages = project_client.agents.list_messages(thread.id, limit=5, order=ListSortOrder.DESCENDING)
# Reverse the order so the most recent message is last
messages.data.reverse()
retrieval_result = retrieval_result = agent_client.retrieve(
retrieval_request=KnowledgeAgentRetrievalRequest(
messages=[KnowledgeAgentMessage(role=msg["role"], content=[KnowledgeAgentMessageTextContent(text=msg.content[0].text)]) for msg in messages.data],
target_index_params=[KnowledgeAgentIndexParams(index_name=index_name, reranker_threshold=2.5)]
)
)
# Associate the retrieval results with the last message in the conversation
last_message = messages.data[-1]
retrieval_results[last_message.id] = retrieval_result
# Return the grounding response to the agent
return retrieval_result.response[0].content[0].text
Улучшение качества данных
Результаты поиска объединяются в большую единую строку, которую можно передать в модель завершения диалога для обоснованного ответа. Следующие функции индексирования и настройки релевантности в службе "Поиск ИИ Azure" доступны для создания высококачественных результатов. Эти функции можно реализовать в индексе поиска, а улучшения релевантности поиска очевидны в качестве ответа, возвращаемого во время извлечения.
Профили оценки (добавленные в индекс поиска) предоставляют встроенные критерии повышения. Индекс должен указать профиль оценки по умолчанию, который используется подсистемой извлечения, когда запросы включают поля, связанные с этим профилем.
Требуется семантическая конфигурация, но вы определяете, какие поля являются приоритетными и используются для ранжирования.
Для содержимого обычного текста можно использовать анализаторы для управления маркеризацией во время индексирования.
Для мультимодального или графического контента можно использовать озвучивание изображений для описаний, созданных LLM, или классический OCR и анализ изображений с использованием наборов навыков во время индексирования.
Управление количеством вложенных запросов
LLM определяет количество подзапросов на основе следующих факторов:
- Запрос пользователя
- Журнал чата
- Ограничения входных данных семантического рангателя
Как разработчик, лучший способ контролировать количество вложенных запросов — задать defaultMaxDocsForReranker
определение агента знаний или переопределить действие извлечения.
Семантический рангировщик обрабатывает до 50 документов в качестве входных данных, а система создает вложенные запросы для размещения всех входных данных для семантического рангера. Например, если нужно всего два вложенных запроса, можно установить defaultMaxDocsForReranker
на 100, чтобы включить все документы в двух пакетах.
Семантическая конфигурация в индексе определяет, равен ли вход 50 или нет. Если значение меньше, план запроса указывает, сколько вложенных запросов необходимо для достижения порогового значения defaultMaxDocsForReranker
.
Управление числом потоков в истории чата
Объект агента знаний в службе "Поиск ИИ Azure" получает журнал чатов с помощью вызовов API к пакету SDK для оценки Azure, который поддерживает журнал потоков. Этот список можно отфильтровать, чтобы получить подмножество сообщений, например, последние пять обменов репликами.
Управление затратами и ограничением операций
Просмотрите выходные маркеры в массиве действий , чтобы получить аналитические сведения о плане запроса.
Советы по улучшению производительности
Суммирование цепочек сообщений.
Используйте
gpt mini
или меньшую, более быструю модель.Задайте
maxOutputSize
в агенте знаний значение для управления размером ответа илиmaxRuntimeInSeconds
для обработки с привязкой к времени.