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


Как выполнять оценки в Интернете с помощью пакета SDK для Azure AI Foundry

Внимание

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

Из этой статьи вы узнаете, как выполнять оценки в Сети непрерывно с помощью пакета SDK для Azure AI Foundry. Оценки в предпроизводствующих средах важны для обеспечения безопасности, производительности приложения и получения высококачественных результатов. Однако оценка не останавливается после развертывания приложения. В рабочей среде различные вещи могут измениться, например типы запросов, которые пользователи отправляют в приложение, что может повлиять на производительность вашего приложения. Чтобы обеспечить высокую степень наблюдаемости в рабочем приложении для создания искусственного интеллекта, важно отслеживать и непрерывно оценивать данные приложения. Таким образом, вы можете обеспечить уверенность в безопасности, качестве и производительности приложения.

Как работает онлайн-оценка

В этом разделе вы узнаете, как работает онлайн-оценка, как она интегрируется с Azure Monitor Application Insights и как ее можно использовать для выполнения непрерывных вычислений по данным трассировки из созданных приложений ИИ.

После инструментирования приложения для отправки данных трассировки в Application Insights настройте расписание онлайн-оценки для непрерывной оценки этих данных. Онлайн-оценка — это служба, использующая вычисления ИИ Azure для непрерывного запуска настраиваемого набора оценщиков. После настройки расписания онлайн-оценки с помощью пакета SDK для Azure AI Foundry он выполняется по настраиваемому расписанию. Каждый раз при выполнении запланированного задания он выполняет следующие действия:

  1. Запрос данных трассировки приложения из подключенного ресурса Application Insights с помощью предоставленного запроса Kusto (KQL).
  2. Запустите каждый вычислитель по данным трассировки и вычислите каждую метрику (например, заземленность: 3).
  3. Записывает оценки оценки обратно в каждую трассировку с помощью стандартных семантических соглашений.

Примечание.

Онлайн-оценка поддерживает те же метрики, что и оценка ИИ 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 Monitor Application Insights, следующим шагом является настройка службы.

Настройка онлайн-оценки

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

Примечание.

Оценки поддерживаются только в том же регионе , что и метрики рисков, поддерживаемых ИИ.

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

Выполните следующие действия, необходимые для настройки среды и проверки подлинности в необходимых ресурсах:

  1. подписка Azure;
  2. Группа ресурсов в поддерживаемом для оценки регионе.
  3. Новое управляемое удостоверение , назначаемое пользователем, в одной группе ресурсов и регионе. Запишите clientIdего позже.
  4. Центр искусственного интеллекта Azure в одной группе ресурсов и регионе.
  5. Проект Azure AI в этом центре см. в статье "Создание проекта на портале Azure AI Foundry".
  6. Ресурс Azure Monitor Application Insights.
  7. Перейдите на центральную страницу в портал Azure и добавьте ресурс Application Insights, см. статью Update приложение Azure Insights и Реестр контейнеров Azure.
  8. Развертывание Azure OpenAI с поддержкой chat completionмодели GPT, например gpt-4.
  9. Connection String для проекта ИИ Azure для упрощения создания AIProjectClient объекта. Вы можете получить строка подключения project в разделе "Сведения о проекте" на странице обзора проекта.
  10. Перейдите к ресурсу Application Insights в портал Azure и перейдите на вкладку управления доступом (IAM), чтобы добавить Log Analytics Contributor роль в созданное ранее управляемое удостоверение, назначаемое пользователем.
  11. Присоединение управляемого удостоверения , назначаемого пользователем, к проекту.
  12. Перейдите к службам ИИ Azure в портал Azure и перейдите на вкладку управления доступом (IAM), чтобы добавить Cognitive Services OpenAI Contributor роль в созданное ранее управляемое удостоверение, назначаемое пользователем.

Инструкции по установке

Установка Azure CLI и вход

Вы устанавливаете Azure CLI и войдите из локальной среды разработки, чтобы использовать учетные данные пользователя для вызова службы Azure OpenAI.

В большинстве случаев azure CLI можно установить из терминала с помощью следующей команды:

winget install -e --id Microsoft.AzureCLI

Инструкции по установке Azure CLI можно выполнить, если эти команды не работают для конкретной операционной системы или установки.

После установки Azure CLI выполните вход с помощью az login команды и входа с помощью браузера:

az login

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

az login --use-device-code

Создание новой среды Python.

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

При необходимости установите Python

Рекомендуется использовать Python 3.10 или более поздней версии, но требуется по крайней мере Python 3.8. Если у вас нет подходящей версии Python, вы можете следовать инструкциям в руководстве по Python VS Code для простого способа установки Python в операционной системе.

Создание виртуальной среды

Если у вас уже установлен Python 3.10 или более поздней версии, можно создать виртуальную среду с помощью следующих команд:

py -3 -m venv .venv
.venv\scripts\activate

Активация среды Python означает, что при запуске python или pip из командной строки используется интерпретатор Python, содержащийся в .venv папке приложения.

Примечание.

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

Вы также можете создать новую среду Python с помощью 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, можно использовать свойство службы OpenTelemetry в данных трассировки. Это особенно полезно, если вы регистрируете данные из нескольких приложений в один ресурс Application Insights и хотите различать их. Например, можно сказать, что у вас есть два приложения: App-1 и App-2, с трассировкой, настроенной для записи данных в один ресурс Application Insights. Возможно, вы хотите настроить App-1 для непрерывной оценки релевантности и App-2 для непрерывной оценки по заземленности. Имя службы можно использовать для различения приложений в конфигурациях оценки в сети.

Чтобы настроить свойство имени службы, вы можете сделать это непосредственно в коде приложения, выполнив действия, описанные в разделе "Использование нескольких поставщиков трассировки с разными ресурсами". Кроме того, можно задать переменную OTEL_SERVICE_NAME среды перед развертыванием приложения. Дополнительные сведения о работе с именем службы см. в статье OTEL Environment Variables and Service Resource Semantic Conventions.

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

Запрос сохраненных данных трассировки в Application Insights

Используя язык запросов Kusto (KQL), вы можете запрашивать данные трассировки созданного приложения ИИ из Application Insights, чтобы использовать для непрерывной онлайн-оценки. Если вы используете пакет трассировки ИИ Azure для трассировки создаваемого приложения ИИ, можно использовать следующий запрос Kusto:

Внимание

Запрос 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

Если вы используете OTEL_SERVICE_NAME переменную среды в созданном приложении ИИ для задания имени службы, вы можете запросить cloud_RoleName в расписании оценки по сети, добавив следующую строку в запрос Kusto (KQL):

| where cloud_RoleName == "service_name"

При необходимости можно использовать пример оператора или принять оператор в запросе Kusto, чтобы он возвращал только подмножество трассировок. Так как оценки с поддержкой искусственного интеллекта могут быть дорогостоящими, этот подход может помочь вам управлять затратами, только оценивая случайный выборку (или n трассировки) данных.

Настройка онлайн-оценки с помощью пакета SDK для Azure AI Project

Вы можете отправить запланированное задание онлайн-оценки с помощью пакета 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"

# 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"

Затем определите клиент и развертывание GPT Azure OpenAI (например 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
)

# Connect to your Azure OpenAI Service resource. You must use a GPT model deployment for this example.
deployment_name = "gpt-4"
api_version = "2024-08-01-preview"

# This is your Azure OpenAI Service connection name, which can be found in your Azure 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 Azure 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 параметре propertiesEvaluationSchedule класса используется 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)