Непрерывно отслеживайте созданные приложения ИИ
Внимание
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Непрерывные достижения в Генеривном ИИ привели организации к созданию все более сложных приложений для решения различных проблем (чат-боты, системы RAG, агентические системы и т. д.). Эти приложения используются для внедрения инноваций, улучшения взаимодействия с клиентами и улучшения принятия решений. Хотя модели (например, GPT-4) с поддержкой этих приложений генерированного искусственного интеллекта очень способны, непрерывный мониторинг никогда не был более важным для обеспечения высококачественных, безопасных и надежных результатов. Непрерывный мониторинг эффективен, если при наблюдении за приложением учитывается несколько перспектив. Эти перспективы включают использование маркеров и затраты, операционные метрики — задержку, количество запросов и т. д. и, что важно, непрерывную оценку. Дополнительные сведения об оценке см. в статье "Оценка создаваемых приложений ИИ".
Azure AI и Azure Monitor предоставляют средства для непрерывного мониторинга производительности приложений сгенерированных ИИ с нескольких перспектив. С помощью оценки Azure AI Online вы можете непрерывно оценивать приложение, не зависящее от того, где оно развернуто или какая платформа оркестрации используется (например, LangChain). Вы можете использовать различные встроенные вычислители , которые поддерживают четность с пакетом SDK для оценки ИИ Azure или определяют собственные пользовательские вычислители. Постоянно выполняя правильные вычислители по собранным данным трассировки, ваша команда может более эффективно выявлять и устранять проблемы безопасности, качества и безопасности по мере их возникновения в предварительной или после рабочей среде. Оценка Azure AI Online обеспечивает полную интеграцию с комплексным набором средств наблюдения, доступных в Azure Monitor Application Insights, что позволяет создавать пользовательские панели мониторинга, визуализировать результаты оценки с течением времени и настраивать оповещения для расширенного мониторинга приложений.
В итоге мониторинг созданных приложений ИИ никогда не был более важным из-за сложности и быстрого развития отрасли ИИ. Оценка Azure AI Online, интегрированная с Azure Monitor Application Insights, позволяет непрерывно оценивать развернутые приложения, чтобы обеспечить их производительность, безопасность и получение высококачественных результатов в рабочей среде.
Как работает онлайн-оценка
В этом разделе вы узнаете, как работает оценка Azure AI Online, как она интегрируется с Azure Monitor Application Insights и как ее можно использовать для выполнения непрерывных вычислений по данным трассировки из созданных приложений ИИ.
Трассировка создаваемого приложения ИИ
Первым шагом в непрерывном мониторинге приложения является обеспечение сбора и хранения данных телеметрии для анализа. Для этого вам потребуется инструментировать код создаваемого приложения ИИ, чтобы использовать пакет трассировки ИИ Azure для регистрации данных трассировки в выбранный ресурс Azure Monitor Application Insights. Этот пакет полностью соответствует стандарту OpenTelemetry для наблюдения. После инструментирования кода приложения данные трассировки записываются в ресурс Application Insights.
После включения трассировки в код приложения можно просмотреть данные трассировки в Azure AI Foundry или в ресурсе Azure Monitor Application Insights. Дополнительные сведения о том, как это сделать, см. в статье "Мониторинг создания приложения ИИ".
Онлайн-оценка
После инструментирования приложения для отправки данных трассировки в Application Insights пришло время настроить расписание оценки по сети для непрерывной оценки этих данных. Оценка Azure AI Online — это служба, которая использует вычисления ИИ Azure для непрерывного выполнения набора оценщиков. После настройки расписания оценки по сети с помощью пакета SDK для проектов искусственного интеллекта Azure она выполняется в настраиваемом расписании. При каждом запуске службы выполняется следующее:
- Запрос данных трассировки приложения из подключенного ресурса Application Insights с помощью предоставленного запроса Kusto.
- Запустите каждый вычислитель по данным трассировки и вычислите каждую метрику (например, заземленность: 3).
- Записывает оценки оценки обратно в каждую трассировку с помощью стандартных семантических соглашений.
Примечание.
Оценка Azure AI Online поддерживает те же метрики, что и оценка ИИ Azure. Дополнительные сведения о том, как работает оценка и какие метрики оценки поддерживаются, см. в статье "Оценка приложения для создания ИИ" с помощью пакета SDK для оценки ИИ Azure
Например, предположим, что у вас развернутое приложение чата, которое ежедневно получает множество вопросов о клиентах. Вы хотите непрерывно оценить качество ответов из приложения. Вы настраиваете расписание оценки по сети с ежедневным повторением. Вы настраиваете вычислители: заземление, согласованность и флуентность. Каждый день служба вычисляет оценки для этих метрик и записывает данные обратно в Application Insights для каждой трассировки, которая была собрана в течение периода времени повторения (в этом примере за последние 24 часа). Затем данные можно запрашивать из каждой трассировки и сделать доступными в Azure AI Foundry и Azure Monitor Application Insights.
Результаты оценки, записанные обратно в каждую трассировку в Application Insights, соответствуют следующим соглашениям. Уникальный диапазон будет добавлен в каждую трассировку для каждой метрики оценки.
Свойство | Таблица Application Insights | Поля для заданного operation_ID | Пример значения |
---|---|---|---|
Метрика оценки | трассировки, AppTraces | customDimensions[“event.name”] |
gen_ai.evaluation.relevance |
Оценка метрик оценки | трассировки, AppTraces | customDimensions[“gen_ai.evaluation.score”] |
3 |
Комментарий метрики оценки (если применимо) | трассировки, AppTraces | message |
{“comment”: “I like the response”} |
Теперь, когда вы узнаете, как работает оценка Azure AI Online и как он подключается к Azure Monitor Application Insights, пришло время узнать, как настроить службу.
Настройка онлайн-оценки
В этом разделе вы узнаете, как настроить расписание оценки по сети для непрерывного мониторинга развернутого созданного приложения искусственного интеллекта. Пакет SDK для Проектов искусственного интеллекта Azure предоставляет такие возможности через API Python и поддерживает все функции, доступные в локальных оценках. Выполните следующие действия, чтобы отправить расписание оценки по сети для данных с помощью встроенных или пользовательских вычислителей.
Примечание.
Оценки поддерживаются только в том же регионе , что и метрики рисков, поддерживаемых ИИ.
Необходимые компоненты
Выполните следующие действия, необходимые для настройки среды и проверки подлинности в необходимых ресурсах:
- подписка Azure;
- Группа ресурсов в поддерживаемом для оценки регионе.
- Новое управляемое удостоверение , назначаемое пользователем, в одной группе ресурсов и регионе. Запишите
clientId
его позже. - Центр искусственного интеллекта Azure в одной группе ресурсов и регионе.
- Проект Azure AI в этом центре см. в статье "Создание проекта на портале Azure AI Foundry".
- Ресурс Azure Monitor Application Insights.
- Перейдите на центральную страницу в портал Azure и добавьте ресурс Application Insights, см. статью Update приложение Azure Insights и Реестр контейнеров Azure.
- Развертывание Azure OpenAI с поддержкой
chat completion
модели GPT, напримерgpt-4
. Connection String
для проекта ИИ Azure для упрощения созданияAIProjectClient
объекта. Вы можете получить строка подключения project в разделе "Сведения о проекте" на странице обзора проекта.- Перейдите к ресурсу Application Insights в портал Azure и перейдите на вкладку управления доступом (IAM), чтобы добавить
Log Analytics Contributor
роль в созданное ранее управляемое удостоверение, назначаемое пользователем. - Присоединение управляемого удостоверения , назначаемого пользователем, к проекту.
- Перейдите к службам ИИ Azure в портал Azure и перейдите на вкладку управления доступом (IAM), чтобы добавить
Cognitive Services OpenAI Contributor
роль в созданное ранее управляемое удостоверение, назначаемое пользователем. - Убедитесь, что вы вошли в подписку Azure, выполнив команду
az login
.
Инструкции по установке
- Создайте виртуальную среду по своему усмотрению. Чтобы создать его с помощью conda, выполните следующую команду:
conda create -n online-evaluation
conda activate online-evaluation
- Установите необходимые пакеты, выполнив следующую команду:
pip install azure-identity azure-ai-projects azure-ai-ml
Совет
При необходимости можно pip install azure-ai-evaluation
при желании получить идентификатор вычислителя для встроенных вычислителей в коде. Сведения о том, как это сделать, см. в разделе "Указание оценщиков" из библиотеки оценщиков.
Настройка трассировки для создаваемого приложения ИИ
Первым шагом в мониторинге приложения является настройка трассировки. Сведения о том, как это сделать, чтобы данные регистрировались в Application Insights, см . в статье о настройке трассировки для создаваемого приложения ИИ.
Использование имени службы в данных трассировки
Чтобы определить службу с помощью уникального идентификатора в Application Insights, можно использовать свойство OpenTelemetry службы в данных трассировки. Это особенно полезно, если вы регистрируете данные из нескольких приложений в один ресурс Application Insights и хотите различать их. Например, можно сказать, что у вас есть два приложения: App-1 и App-2, с трассировкой, настроенной для записи данных в один ресурс Application Insights. Возможно, вы хотите настроить App-1 для непрерывной оценки релевантности и App-2 для непрерывной оценки по заземленности. Имя службы можно использовать для различения приложений в конфигурациях оценки по сети.
Чтобы настроить свойство имени службы, вы можете сделать это непосредственно в коде приложения, выполнив действия, описанные в разделе "Использование нескольких поставщиков трассировки с разными ресурсами". Кроме того, можно задать переменную OTEL_SERVICE_NAME
среды перед развертыванием приложения. Дополнительные сведения о работе с именем службы см. в статье OTEL Environment Variables and Service Resource Semantic Conventions.
Чтобы запросить данные трассировки для заданного имени службы, выполните запрос к свойству cloud_roleName
. Добавьте следующую строку в запрос KQL, который вы используете в настройке онлайн-оценки:
| where cloud_RoleName == "service_name"
Запрос сохраненных данных трассировки в Application Insights
Используя язык запросов Kusto (KQL), вы можете запрашивать данные трассировки созданного приложения ИИ из Application Insights, чтобы использовать для непрерывной оценки в Интернете. Если вы используете пакет трассировки ИИ Azure для трассировки созданного приложения ИИ, вы можете использовать следующий запрос Kusto для просмотра данных в Application Insights:
Внимание
Запрос KQL, используемый службой онлайн-оценки, должен выводить следующие столбцы: operation_Id
, operation_ParentId
и gen_ai_response_id
. Кроме того, каждый вычислитель имеет собственные требования к входным данным. Запрос KQL должен выводить эти столбцы, которые будут использоваться в качестве входных данных для самих вычислителей. Список требований к данным для оценщиков см. в разделе о требованиях к данным для встроенных оценщиков.
let gen_ai_spans = (
dependencies
| where isnotnull(customDimensions["gen_ai.system"])
| extend response_id = tostring(customDimensions["gen_ai.response.id"])
| project id, operation_Id, operation_ParentId, timestamp, response_id
);
let gen_ai_events = (
traces
| where message in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
or tostring(customDimensions["event.name"]) in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
| project
id = operation_ParentId,
operation_Id,
operation_ParentId,
user_input = iff(
message == "gen_ai.user.message" or tostring(customDimensions["event.name"]) == "gen_ai.user.message",
parse_json(iff(message == "gen_ai.user.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
system = iff(
message == "gen_ai.system.message" or tostring(customDimensions["event.name"]) == "gen_ai.system.message",
parse_json(iff(message == "gen_ai.system.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
llm_response = iff(
message == "gen_ai.choice",
parse_json(tostring(parse_json(tostring(customDimensions["gen_ai.event.content"])).message)).content,
iff(tostring(customDimensions["event.name"]) == "gen_ai.choice", parse_json(parse_json(message).message).content, "")
)
| summarize
operation_ParentId = any(operation_ParentId),
Input = maxif(user_input, user_input != ""),
System = maxif(system, system != ""),
Output = maxif(llm_response, llm_response != "")
by operation_Id, id
);
gen_ai_spans
| join kind=inner (gen_ai_events) on id, operation_Id
| project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id
При необходимости можно использовать пример оператора или принять оператор в запросе Kusto, чтобы он возвращал только подмножество трассировок. Так как оценки с поддержкой искусственного интеллекта могут быть дорогостоящими, этот подход может помочь вам управлять затратами, только оценивая случайный выборку (или n
трассировки) данных.
Настройка онлайн-оценки с помощью пакета SDK для проектов Искусственного интеллекта Azure
Вы можете отправить запланированное задание оценки по сети с помощью пакета SDK для проектов искусственного интеллекта Azure с помощью API Python. См. приведенный ниже сценарий, чтобы узнать, как настроить онлайн-оценку с помощью оценки производительности и качества (СИ). Чтобы просмотреть полный список поддерживаемых вычислителей, ознакомьтесь с пакетом SDK для оценки ИИ Azure. Чтобы узнать, как использовать пользовательские вычислители, ознакомьтесь с настраиваемыми вычислителями.
Начните с импорта необходимых пакетов и настройки необходимых переменных:
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import (
ApplicationInsightsConfiguration,
EvaluatorConfiguration,
EvaluationSchedule,
RecurrenceTrigger,
)
from azure.ai.evaluation import CoherenceEvaluator
# This sample includes the setup for an online evaluation schedule using the Azure AI Project SDK and Azure AI Evaluation SDK
# The schedule is configured to run daily over the collected trace data while running two evaluators: CoherenceEvaluator and RelevanceEvaluator
# This sample can be modified to fit your application's requirements
# Name of your online evaluation schedule
SAMPLE_NAME = "online_eval_name"
# Name of your generative AI application (will be available in trace data in Application Insights)
SERVICE_NAME = "service_name"
# Connection string to your Azure AI Foundry project
# Currently, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
PROJECT_CONNECTION_STRING = "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# Your Application Insights resource ID
APPLICATION_INSIGHTS_RESOURCE_ID = "appinsights_resource_id"
# Kusto Query Language (KQL) query to query data from Application Insights resource
# This query is compatible with data logged by the Azure AI Inferencing Tracing SDK (linked in documentation)
# You can modify it depending on your data schema
# The KQL query must output these required columns: operation_ID, operation_ParentID, and gen_ai_response_id
# You can choose which other columns to output as required by the evaluators you are using
KUSTO_QUERY = "let gen_ai_spans=(dependencies | where isnotnull(customDimensions[\"gen_ai.system\"]) | extend response_id = tostring(customDimensions[\"gen_ai.response.id\"]) | project id, operation_Id, operation_ParentId, timestamp, response_id); let gen_ai_events=(traces | where message in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") or tostring(customDimensions[\"event.name\"]) in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") | project id= operation_ParentId, operation_Id, operation_ParentId, user_input = iff(message == \"gen_ai.user.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.user.message\", parse_json(iff(message == \"gen_ai.user.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), system = iff(message == \"gen_ai.system.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.system.message\", parse_json(iff(message == \"gen_ai.system.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), llm_response = iff(message == \"gen_ai.choice\", parse_json(tostring(parse_json(tostring(customDimensions[\"gen_ai.event.content\"])).message)).content, iff(tostring(customDimensions[\"event.name\"]) == \"gen_ai.choice\", parse_json(parse_json(message).message).content, \"\")) | summarize operation_ParentId = any(operation_ParentId), Input = maxif(user_input, user_input != \"\"), System = maxif(system, system != \"\"), Output = maxif(llm_response, llm_response != \"\") by operation_Id, id); gen_ai_spans | join kind=inner (gen_ai_events) on id, operation_Id | project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id"
Затем определите клиент и развертывание Azure OpenAI GPT (например GPT-4
), которое будет использоваться для запуска расписания оценки в Интернете. Кроме того, подключитесь к ресурсу Application Insights:
# Connect to your Azure AI Foundry Project
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=PROJECT_CONNECTION_STRING
)
# Connect to your Application Insights resource
app_insights_config = ApplicationInsightsConfiguration(
resource_id=APPLICATION_INSIGHTS_RESOURCE_ID,
query=KUSTO_QUERY,
service_name=SERVICE_NAME
)
# Connect to your AOAI resource, you must use an AOAI GPT model
deployment_name = "gpt-4"
api_version = "2024-08-01-preview"
# This is your AOAI connection name, which can be found in your AI Foundry project under the 'Models + Endpoints' tab
default_connection = project_client.connections._get_connection(
"aoai_connection_name"
)
model_config = {
"azure_deployment": deployment_name,
"api_version": api_version,
"type": "azure_openai",
"azure_endpoint": default_connection.properties["target"]
}
Затем настройте вычислители, которые вы хотите использовать:
# RelevanceEvaluator
# id for each evaluator can be found in your AI Foundry registry - please see documentation for more information
# init_params is the configuration for the model to use to perform the evaluation
# data_mapping is used to map the output columns of your query to the names required by the evaluator
relevance_evaluator_config = EvaluatorConfiguration(
id="azureml://registries/azureml-staging/models/Relevance-Evaluator/versions/4",
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
# CoherenceEvaluator
coherence_evaluator_config = EvaluatorConfiguration(
id=CoherenceEvaluator.id,
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
Наконец, определите повторение и создайте расписание:
Примечание. На этапах предварительных требований вы создали управляемое удостоверение, назначаемое пользователем, для проверки подлинности расписания оценки по сети в ресурсе Application Insights. В AzureMSIClientId
параметре properties
EvaluationSchedule
класса используется clientId
это удостоверение.
# Frequency to run the schedule
recurrence_trigger = RecurrenceTrigger(frequency="day", interval=1)
# Dictionary of evaluators
evaluators = {
"relevance": relevance_evaluator_config,
"coherence" : coherence_evaluator_config
}
name = SAMPLE_NAME
description = f"{SAMPLE_NAME} description"
# AzureMSIClientId is the clientID of the User-assigned managed identity created during set-up - see documentation for how to find it
properties = {"AzureMSIClientId": "your_client_id"}
# Configure the online evaluation schedule
evaluation_schedule = EvaluationSchedule(
data=app_insights_config,
evaluators=evaluators,
trigger=recurrence_trigger,
description=description,
properties=properties)
# Create the online evaluation schedule
created_evaluation_schedule = project_client.evaluations.create_or_replace_schedule(name, evaluation_schedule)
print(f"Successfully submitted the online evaluation schedule creation request - {created_evaluation_schedule.name}, currently in {created_evaluation_schedule.provisioning_state} state.")
Выполнение операций с расписанием оценки по сети
Вы можете получить, перечислить и отключить расписания оценки по сети, добавив следующий код в скрипт конфигурации онлайн-оценки:
Предупреждение. Подождите небольшое время (около 30 секунд) между созданием расписания оценки по сети и запуском get_schedule()
API.
Получите расписание оценки по сети:
name = "<my-online-evaluation-name>"
get_evaluation_schedule = project_client.evaluations.get_schedule(name)
Список всех расписаний оценки по сети:
count = 0
for evaluation_schedule in project_client.evaluations.list_schedule():
count += 1
print(f"{count}. {evaluation_schedule.name} "
f"[IsEnabled: {evaluation_schedule.is_enabled}]")
print(f"Total evaluation schedules: {count}")
Отключите (обратимое удаление) расписание онлайн-оценки:
name = "<my-online-evaluation-name>"
project_client.evaluations.disable_schedule(name)
Мониторинг создаваемого приложения ИИ
В этом разделе вы узнаете, как Azure AI интегрируется с Azure Monitor Application Insights, чтобы предоставить вам встроенное представление панели мониторинга, которое предназначено для получения аналитических сведений о создании приложения искусственного интеллекта, чтобы вы могли оставаться в курсе последних состояний приложения.
Аналитика для создания приложения искусственного интеллекта
Если вы этого не настроили, сделайте следующее:
- Перейдите к проекту в Azure AI Foundry.
- Выберите страницу трассировки в левой части.
- Подключите ресурс Application Insights к проекту.
Если вы уже настроили трассировку на портале Azure AI Foundry, все, что вам нужно сделать, — выбрать ссылку для получения информационной панели приложений Generative AI.
После передачи данных в ресурс Application Insights вы автоматически увидите, что он заполняется на этой настраиваемой панели мониторинга.
Это отличное место для начала работы с потребностями мониторинга.
- С течением времени можно просмотреть использование маркеров, чтобы понять, нужно ли увеличить ограничения использования или выполнить дополнительный анализ затрат.
- Вы можете просматривать метрики оценки как линии тренда, чтобы понять качество приложения ежедневно.
- Вы можете выполнить отладку при возникновении исключений и детализации трассировок с помощью представления сведений о сквозной транзакции Azure Monitor, чтобы выяснить, что произошло неправильно.
Это книга Azure, которая запрашивает данные, хранящиеся в ресурсе Application Insights. Вы можете настроить эту книгу и настроить ее в соответствии с потребностями бизнеса. Дополнительные сведения см . в разделе "Редактирование книг Azure".
Это позволяет добавлять дополнительные пользовательские вычислители, которые, возможно, зарегистрировали или другой текст markdown, чтобы предоставить общий доступ к сводке и использовать для создания отчетов.
Вы также можете поделиться этой книгой с вашей командой, чтобы они оставались в курсе последних!