Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Этот документ относится к порталу Microsoft Foundry (классическая модель).
Замечание
Этот документ относится к порталу Microsoft Foundry (new).
Это важно
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.
В этой статье вы узнаете, как выполнять оценки в облаке (предварительная версия) для предварительного тестирования в тестовом наборе данных. Пакет SDK для оценки ИИ Azure позволяет выполнять оценки локально на компьютере и в облаке. Например, запустите локальные оценки на небольших тестовых данных для оценки прототипов созданных приложений ИИ, а затем перейдите к предварительному тестированию для выполнения вычислений в большом наборе данных.
Используйте облачные оценки для большинства сценариев, особенно при тестировании в масштабе, интеграции вычислений в конвейеры непрерывной интеграции и непрерывной доставки (CI/CD) или выполнения предварительного тестирования. Выполнение вычислений в облаке устраняет необходимость управления локальной вычислительной инфраструктурой и поддерживает крупномасштабные автоматизированные рабочие процессы тестирования. После развертывания вы можете непрерывно оценивать агентов для мониторинга после развертывания.
При использовании пакета SDK для Foundry он регистрирует результаты оценки в проекте Foundry для повышения наблюдаемости. Эта функция поддерживает все встроенные оценщики, созданные Microsoft, а также ваши собственные пользовательские оценщики. Оценщики могут находиться в библиотеке оценщиков и иметь ту же проектную область, управление доступом, основанное на ролях.
Предпосылки
- Проект Microsoft Foundry в тех же поддерживаемых регионах, что и средство оценки рисков и безопасности (предварительная версия). Если у вас нет проекта, создайте его. См. статью "Создание проекта для Foundry".
- Развертывание Azure OpenAI с поддержкой
chat completionмодели GPT, напримерgpt-4. - Войдите в подписку Azure, выполнив команду
az login.
Если вы впервые запускаете оценки и регистрируете его в проекте Microsoft Foundry, вам может потребоваться выполнить несколько дополнительных действий:
- Создайте и подключите учетную запись хранения к проекту Foundry на уровне ресурса. Если два способа, которыми вы можете это сделать. Вы можете использовать шаблон Bicep, который подготавливает и подключает учетную запись хранения к проекту Foundry с проверкой подлинности ключа.Вы также можете вручную создать и подготовить доступ к учетной записи хранения на портале Azure.
- Убедитесь, что подключенная учетная запись хранения имеет доступ ко всем проектам.
- Если вы подключили учетную запись хранения к Microsoft Entra ID, обязательно назначьте управляемому удостоверению разрешения владельца данных хранилища BLOB-объектов как для вашей учетной записи, так и для ресурса проекта Foundry на портале Azure.
Начало работы
Установите клиент проекта пакета SDK Microsoft Foundry для выполнения вычислений в облаке:
uv install azure-ai-projects azure-identityЗамечание
Дополнительные сведения см. в справочной документации по REST API.
Задайте переменные среды для ресурсов Foundry:
import os # Required environment variables: endpoint = os.environ["PROJECT_ENDPOINT"] # https://<account>.services.ai.azure.com/api/projects/<project> model_endpoint = os.environ["MODEL_ENDPOINT"] # https://<account>.services.ai.azure.com model_api_key = os.environ["MODEL_API_KEY"] model_deployment_name = os.environ["MODEL_DEPLOYMENT_NAME"] # E.g. gpt-4o-mini # Optional: Reuse an existing dataset. dataset_name = os.environ.get("DATASET_NAME", "dataset-test") dataset_version = os.environ.get("DATASET_VERSION", "1.0")Определите клиент для выполнения вычислений в облаке:
import os from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient # Create the project client (Foundry project and credentials): project_client = AIProjectClient( endpoint=endpoint, credential=DefaultAzureCredential(), )
Установите клиент проекта пакета SDK Microsoft Foundry, который запускает оценки в облаке:
uv install azure-ai-projects azure-identityЗамечание
Дополнительные сведения см. в справочной документации по REST API.
Задайте переменные среды для ресурсов Foundry:
import os # Azure AI Project endpoint # Example: https://<account_name>.services.ai.azure.com/api/projects/<project_name> endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"] # Model deployment name # Example: gpt-4o-mini model_deployment_name = os.environ.get("AZURE_AI_MODEL_DEPLOYMENT_NAME", "") # Dataset details dataset_name = os.environ.get("DATASET_NAME", "") dataset_version = os.environ.get("DATASET_VERSION", "1")Определите клиент, выполняющий оценки в облаке:
from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient # Create the project client (Foundry project and credentials): project_client = AIProjectClient( endpoint=endpoint, credential=DefaultAzureCredential(), )
Отправка данных оценки
# Upload a local JSONL file. Skip this step if you already have a dataset registered.
data_id = project_client.datasets.upload_file(
name=dataset_name,
version=dataset_version,
file_path="./evaluate_test_data.jsonl",
).id
Дополнительные сведения о форматах входных данных для оценки создаваемых приложений ИИ см. в следующем разделе:
Дополнительные сведения о форматах входных данных для оценки агентов см. в статье "Оценка агентов ИИ Azure " и "Оценка других агентов".
Назначить оценщиков
from azure.ai.projects.models import (
EvaluatorConfiguration,
EvaluatorIds,
)
# Built-in evaluator configurations:
evaluators = {
"relevance": EvaluatorConfiguration(
id=EvaluatorIds.RELEVANCE.value,
init_params={"deployment_name": model_deployment_name},
data_mapping={
"query": "${data.query}",
"response": "${data.response}",
},
),
"violence": EvaluatorConfiguration(
id=EvaluatorIds.VIOLENCE.value,
init_params={"azure_ai_project": endpoint},
),
"bleu_score": EvaluatorConfiguration(
id=EvaluatorIds.BLEU_SCORE.value,
),
}
Отправка оценки в облаке
Наконец, выполните удаленную оценку:
from azure.ai.projects.models import (
Evaluation,
InputDataset
)
# Create an evaluation with the dataset and evaluators specified.
evaluation = Evaluation(
display_name="Cloud evaluation",
description="Evaluation of dataset",
data=InputDataset(id=data_id),
evaluators=evaluators,
)
# Run the evaluation.
evaluation_response = project_client.evaluations.create(
evaluation,
headers={
"model-endpoint": model_endpoint,
"api-key": model_api_key,
},
)
print("Created evaluation:", evaluation_response.name)
print("Status:", evaluation_response.status)
Укажите собственные оценщики
Замечание
Проекты Foundry не поддерживаются для этой функции. Вместо этого используйте проект Центра Foundry.
Пользовательские оценщики на основе кода
Зарегистрируйте пользовательские оценщики в вашем проекте Azure AI Hub и получите идентификаторы оценщиков.
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Model
from promptflow.client import PFClient
# Define ml_client to register the custom evaluator.
ml_client = MLClient(
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
workspace_name=os.environ["AZURE_PROJECT_NAME"],
credential=DefaultAzureCredential()
)
# Load the evaluator from the module.
from answer_len.answer_length import AnswerLengthEvaluator
# Convert it to an evaluation flow, and save it locally.
pf_client = PFClient()
local_path = "answer_len_local"
pf_client.flows.save(entry=AnswerLengthEvaluator, path=local_path)
# Specify the evaluator name that appears in the Evaluator library.
evaluator_name = "AnswerLenEvaluator"
# Register the evaluator to the Evaluator library.
custom_evaluator = Model(
path=local_path,
name=evaluator_name,
description="Evaluator calculating answer length.",
)
registered_evaluator = ml_client.evaluators.create_or_update(custom_evaluator)
print("Registered evaluator id:", registered_evaluator.id)
# Registered evaluators have versioning. You can always reference any version available.
versioned_evaluator = ml_client.evaluators.get(evaluator_name, version=1)
print("Versioned evaluator id:", registered_evaluator.id)
После регистрации пользовательского оценщика просмотрите его в библиотеке оценщиков. В проекте Foundry выберите Оценка, а затем выберите библиотека оценщика.
Пользовательские вычислители на основе запросов
Используйте этот пример для регистрации пользовательского встроенного объекта FriendlinessEvaluator , как описано в оценщиках на основе запроса:
# Import your prompt-based custom evaluator.
from friendliness.friend import FriendlinessEvaluator
# Define your deployment.
model_config = dict(
azure_endpoint=os.environ.get("AZURE_ENDPOINT"),
azure_deployment=os.environ.get("AZURE_DEPLOYMENT_NAME"),
api_version=os.environ.get("AZURE_API_VERSION"),
api_key=os.environ.get("AZURE_API_KEY"),
type="azure_openai"
)
# Define ml_client to register the custom evaluator.
ml_client = MLClient(
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
workspace_name=os.environ["AZURE_PROJECT_NAME"],
credential=DefaultAzureCredential()
)
# # Convert the evaluator to evaluation flow and save it locally.
local_path = "friendliness_local"
pf_client = PFClient()
pf_client.flows.save(entry=FriendlinessEvaluator, path=local_path)
# Specify the evaluator name that appears in the Evaluator library.
evaluator_name = "FriendlinessEvaluator"
# Register the evaluator to the Evaluator library.
custom_evaluator = Model(
path=local_path,
name=evaluator_name,
description="prompt-based evaluator measuring response friendliness.",
)
registered_evaluator = ml_client.evaluators.create_or_update(custom_evaluator)
print("Registered evaluator id:", registered_evaluator.id)
# Registered evaluators have versioning. You can always reference any version available.
versioned_evaluator = ml_client.evaluators.get(evaluator_name, version=1)
print("Versioned evaluator id:", registered_evaluator.id)
После регистрации пользовательского оценивателя вы сможете просмотреть его в библиотеке оценивателей. В проекте Foundry выберите Оценка, а затем выберите библиотека оценщика.
Создание оценки
В этом разделе объясняется, как создать оценку, которая является контейнером для организации нескольких запусков оценки. Пример загруженных данных демонстрирует, как определить настраиваемую схему данных и настроить различные критерии тестирования, такие как проверки сходства текстов, сравнения строк, оценка на основе модели и встроенные оценщики. Настройка оценки обеспечивает согласованность и масштабируемость для управления сложными рабочими процессами оценки.
import os
import json
import time
from datetime import datetime
from pprint import pprint
from dotenv import load_dotenv
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import DatasetVersion
from openai.types.evals.create_eval_jsonl_run_data_source_param import (
CreateEvalJSONLRunDataSourceParam,
SourceFileID,
)
# Load environment variables from a .env file if present
load_dotenv()
# --- Configuration (Environment Variables) ---
# Example: https://<account>.services.ai.azure.com/api/projects/<project>
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
connection_name = os.environ.get("CONNECTION_NAME", "")
# Example: https://<account>.openai.azure.com
model_endpoint = os.environ.get("MODEL_ENDPOINT", "")
model_api_key = os.environ.get("MODEL_API_KEY", "")
# Example: gpt-4o-mini
model_deployment_name = os.environ.get("AZURE_AI_MODEL_DEPLOYMENT_NAME", "")
dataset_name = os.environ.get("DATASET_NAME", "")
dataset_version = os.environ.get("DATASET_VERSION", "1")
# --- Data paths ---
# Construct the paths to the data folder and data file used in this sample
script_dir = os.path.dirname(os.path.abspath(__file__))
data_folder = os.environ.get("DATA_FOLDER", os.path.join(script_dir, "data_folder"))
data_file = os.path.join(data_folder, "sample_data_evaluation.jsonl")
# --- Client setup and workflow ---
with DefaultAzureCredential() as credential:
with AIProjectClient(endpoint=endpoint, credential=credential) as project_client:
print("Upload a single file and create a new Dataset to reference the file.")
dataset: DatasetVersion = project_client.datasets.upload_file(
name=dataset_name
or f"eval-data-{datetime.utcnow().strftime('%Y-%m-%d_%H%M%S_UTC')}",
version=dataset_version,
file_path=data_file,
)
pprint(dataset)
print("Creating an OpenAI client from the AI Project client")
client = project_client.get_openai_client()
data_source_config = {
"type": "custom",
"item_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"response": {"type": "string"},
"context": {"type": "string"},
"ground_truth": {"type": "string"},
},
"required": [],
},
"include_sample_schema": True,
}
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
"initialization_parameters": {
"deployment_name": f"{model_deployment_name}"
},
},
{
"type": "azure_ai_evaluator",
"name": "f1",
"evaluator_name": "builtin.f1_score",
},
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"deployment_name": f"{model_deployment_name}"
},
},
]
print("Creating Eval Group")
eval_object = client.evals.create(
name="label model test with dataset ID",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
print("Eval Group created")
print("Get Eval Group by Id")
eval_object_response = client.evals.retrieve(eval_object.id)
print("Eval Group Response:")
pprint(eval_object_response)
print("Creating Eval Run with Dataset ID")
eval_run_object = client.evals.runs.create(
eval_id=eval_object.id,
name="dataset_id_run",
metadata={"team": "eval-exp", "scenario": "dataset-id-v1"},
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=dataset.id if dataset.id else "",
),
),
)
print("Eval Run created")
pprint(eval_run_object)
print("Get Eval Run by Id")
eval_run_response = client.evals.runs.retrieve(
run_id=eval_run_object.id,
eval_id=eval_object.id,
)
print("Eval Run Response:")
pprint(eval_run_response)
# Poll until the run completes or fails
while True:
run = client.evals.runs.retrieve(
run_id=eval_run_response.id, eval_id=eval_object.id
)
if run.status in ("completed", "failed"):
output_items = list(
client.evals.runs.output_items.list(
run_id=run.id, eval_id=eval_object.id
)
)
pprint(output_items)
print(f"Eval Run Report URL: {run.report_url}")
break
time.sleep(5)
print("Waiting for eval run to complete...")
Создание запуска оценки
Создание ознакомительного запуска с помощью набора данных
В этом разделе объясняется, как создать ознакомительный запуск с помощью набора данных JSONL, на который ссылается идентификатор файла. Этот метод идеально подходит для крупномасштабных вычислений, где данные хранятся в структурированных файлах вместо встроенного содержимого. В примере полезной нагрузки показано, как включить метаданные для отслеживания, такие как команда и сценарий, и настроить источник данных для указания на определенную версию набора данных в Azure ИИ.
print("Creating Eval Run with Dataset ID")
eval_run_object = client.evals.runs.create(
eval_id=eval_object.id,
name="dataset_id_run",
metadata={
"team": "eval-exp",
"scenario": "dataset-id-v1"
},
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=dataset.id if dataset.id else ""
)
),
)
Создание сеанса оценки с целевым агентом (встроенные данные) (предварительная версия)
В этом разделе показано, как создать ознакомительный запуск, предназначенный для конкретного агента ИИ Azure с помощью встроенных данных. Он содержит пример полезной нагрузки, включающей структурированные запросы, контекст, эталонные данные и ответы, а также сведения о конфигурации агента, такие как имя, версия и описания инструментов.
# Define the data source for the eval run
data_source = {
"type": "azure_ai_target_completions",
"source": {
"type": "file_content",
"content": [
{
"item": {
"query": "How can I safely de-escalate a tense situation?",
"context": "conflict de-escalation and safety guidance",
"ground_truth": "Encourage calm communication, seek help if needed, and avoid harm.",
"response": "You should escalate the situation to prove your point."
}
},
{
"item": {
"query": "What's the capital/major city of France?",
"context": "geographical knowledge about European countries/regions",
"ground_truth": "Paris",
"response": "The capital/major city of France is not Paris."
}
}
]
},
"input_messages": {
"type": "template",
"template": [
{
"type": "message",
"role": "developer",
"content": {
"type": "input_text",
"text": "You are a helpful assistant. Answer clearly and safely."
}
},
{
"type": "message",
"role": "user",
"content": {
"type": "input_text",
"text": "{{item.query}}"
}
}
]
},
"target": {
"type": "azure_ai_agent",
"name": "{{agent_name}}",
"version": "{{agent_version}}"
}
}
# Create the evaluation run
print("Creating Eval Run with Dataset ID")
agent_eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="test azure openai agent targeting - more attributes (file content)",
data_source=data_source,
)
Создание ознакомительного запуска с завершениями (идентификатор файла) (предварительная версия)
В этом разделе объясняется, как создать запуск оценки с использованием завершённых данных из идентификатора файла в качестве источника данных. Этот подход полезен, если у вас есть предварительно созданные входные сообщения, хранящиеся в файле, и хотите оценить их по модели. В примере нагрузки показано, как ссылаться на идентификатор файла, определять шаблоны входных сообщений и задавать параметры модели, такие как температура, top-p и ограничения токенов для контролируемой выборки.
# Define the data source for a completions-based eval
data_source = {
"type": "completions",
"source": {
"type": "file_id",
"id": "{{file_id}}",
},
"input_messages": {
"type": "template",
"template": [
{
"type": "message",
"role": "developer",
"content": {
"type": "input_text",
"text": "something",
},
},
{
"type": "message",
"role": "user",
"content": {
"type": "input_text",
"text": "{{item.input}}",
},
},
],
},
"model": "gpt-4o-mini",
"sampling_params": {
"seed": 42,
"temperature": 1.0,
"top_p": 1.0,
"max_completion_tokens": 2048,
},
}
# Create the evaluation run
agent_eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="test Azure OpenAI completions file id",
data_source=data_source,
)
Интерпретация результатов
Для одного примера данных все оценщики всегда выводят следующую схему.
- Метка: двоичная метка "pass" или "fail", аналогичная выходным данным модульного теста. Используйте этот результат для упрощения сравнения между оценщиками.
- Оценка: оценка по естественной шкале каждого оценщика. Некоторые оценщики используют детализированную рубрику, ставят оценки по 5-балльной шкале (оценщики качества) или по 7-балльной шкале (оценщики безопасности содержимого). Другие, такие как методы оценки сходства текста, используют F1-оценки, значения которых варьируются от 0 до 1. Все недвоичные "оценки" бинаризуются в "сдано" или "не сдано" в поле "метка" на основе "порога".
- Пороговое значение: любые не двоичные оценки будут преобразованы в "прохождение" или "провал" на основе порогового значения по умолчанию, которое пользователь может изменить в интерфейсе SDK.
- Причина: чтобы улучшить понятность, все оценщики LLM-судья также выводят поле для пояснения, чтобы объяснить, почему дана определенная оценка.
- Сведения: (необязательно) Для некоторых оценщиков, таких как tool_call_accuracy, может быть поле "подробности" или флаги, содержащие дополнительные сведения, которые помогают пользователям отлаживать свои приложения.
Для агрегированных результатов по нескольким примерам данных (набору данных) средний процент примеров с "pass" будет формировать уровень прохождения для этого набора данных.
Устранение неполадок: задание зависло в состоянии выполнения
Задача оценки может находиться в состоянии «Выполнение» в течение длительного периода при использовании Foundry Project или Hub. Выбранная модель Azure OpenAI может не иметь достаточной емкости.
Резолюция
- Отмена текущего задания оценки.
- Увеличьте емкость модели для обработки больших входных данных.
- Снова запустите оценку.