你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure AI Foundry SDK 在云中运行评估(预览版)

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

虽然 Azure AI 评估 SDK 支持在本地计算机上本地运行评估,但你可能想要将作业远程委托给云。 例如,在对小型测试数据运行本地评估以帮助评估生成式 AI 应用程序原型后,现在进入了预部署测试阶段,需要在大型数据集上运行评估。 借助云评估,你无需管理本地计算基础结构,并能够将评估作为测试集成到 CI/CD 管道中。 完成部署后,可能需要持续评估应用程序进行部署后监视。

本文介绍如何在测试数据集的预部署测试中在云(预览版)中运行评估。 使用 Azure AI Projects SDK,你的评估结果将自动记录到 Azure AI 项目中,以提高可观测性。 此功能支持 Microsoft 精心策划的所有内置评估程序和你自己的自定义评估程序,这些评估程序可以位于评估程序库中,并且具有相同的项目范围 RBAC。

Azure AI Foundry 项目的设置前提步骤

  • Azure AI Foundry 项目,与风险和安全评估程序(预览版)位于相同的支持区域中。 如果没有现有项目,请按照指南 如何创建 Azure AI Foundry 项目 来创建一个。

  • 带有支持 chat completion 的 GPT 模型(例如 gpt-4)的 Azure OpenAI 部署。

  • 确保首先通过运行 az login 登录到 Azure 订阅。

如果这是首次运行评估并将其记录到 Azure AI Foundry 项目,则可能需要执行一些额外的设置步骤。

  1. 创建存储帐户并将其连接到资源级别的 Azure AI Foundry 项目。 此 bicep 模板预配存储帐户,并使用密钥身份验证将存储帐户连接到 Foundry 项目。
  2. 确保连接的存储帐户有权访问所有项目。
  3. 如果使用 Microsoft Entra ID 连接到存储帐户,请确保在 Azure 门户中向帐户和 Foundry 项目资源授予存储 Blob 数据所有者的 MSI(Microsoft 标识)权限。

入门指南

首先,安装 Azure AI Foundry SDK 的项目客户端,该客户端在云中运行评估

uv install azure-ai-projects azure-identity

注释

有关更多详细信息,请参阅 REST API 参考文档。 然后,为 Azure AI 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(),
)

上传评估数据

# Upload a local jsonl file (skip 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

若要详细了解用于评估 GenAI 应用程序的输入数据格式,请参阅单轮数据对话数据图像和多模态的对话数据

若要详细了解用于评估代理的输入数据格式,请参阅 评估 Azure AI 代理评估其他代理

指定评估者

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)

指定自定义评估程序

注释

此功能不支持 Azure AI Foundry 项目。 请改用 Azure AI Hub 项目。

基于代码的自定义评估器

将自定义评估器注册到 Azure AI Hub 项目并获取评估器 ID:

from azure.ai.ml import MLClient
from azure.ai.ml.entities import Model
from promptflow.client import PFClient

# Define ml_client to register 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 evaluator from module
from answer_len.answer_length import AnswerLengthEvaluator

# Then we convert it to evaluation flow and save it locally
pf_client = PFClient()
local_path = "answer_len_local"
pf_client.flows.save(entry=AnswerLengthEvaluator, path=local_path)

# Specify evaluator name to appear in the Evaluator library
evaluator_name = "AnswerLenEvaluator"

# Finally 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)

将自定义评估程序注册到 AI 项目后,可以在 Azure AI 项目的“评估”选项卡下的评估程序库中查看它。

基于提示的自定义评估程序

按照示例注册根据基于提示的评估程序所述生成的自定义 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 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 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 evaluator name to appear 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)

将自定义评估程序记录到 AI 项目后,可以在 Azure AI 项目的“评估”选项卡下的评估程序库中查看它。