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

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

重要

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

本文介绍如何在测试数据集的预部署测试中在云(预览版)中运行评估。 Azure AI 评估 SDK 支持在本地计算机和云中运行评估。 例如,可以对小型测试数据运行本地评估,以评估生成 AI 应用程序原型。 然后移动到预部署测试中,并在大型数据集上运行评估。

在云中评估应用可以使你不再需要管理本地计算资源。 还可以将评估作为测试集成到持续集成和持续交付管道中。 部署后,可以 持续监视 应用程序进行部署后监视。

使用 Azure AI 项目 SDK 时,它会在 Azure AI 项目中记录评估结果,以提高可观测性。 此功能支持所有Microsoft精选的 内置评估器 以及您自己的 自定义评估器。 计算器可以位于 计算器库中 ,并具有相同的项目范围基于角色的访问控制。

先决条件

  • Azure AI Foundry 项目,与风险和安全评估程序(预览版)位于相同的支持区域中。 如果没有项目,请创建一个项目。 请参阅 为 Azure AI Foundry 创建项目
  • 带有支持 chat completion 的 GPT 模型的 Azure OpenAI 部署。 例如,gpt-4
  • 确保已通过运行 az login登录到 Azure 订阅。

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

  1. 在资源级别创建存储帐户并将其连接到 Azure AI Foundry 项目。 可以采用两种方法执行此操作。 可以使用 Bicep 模板,该模板通过密钥身份验证预配存储帐户并将其连接到 Foundry 项目。 还可以在 Azure 门户中 手动创建和预配 对存储帐户的访问权限。
  2. 确保连接的存储帐户有权访问所有项目。
  3. 如果使用 Microsoft Entra ID 连接存储帐户,请确保在 Azure 门户中向帐户和 Foundry 项目资源提供托管标识“存储 Blob 数据所有者”权限

注释

基于云的评估目前不支持虚拟网络配置。 为 Azure OpenAI 资源启用公用网络访问。

开始

  1. 安装在云中运行评估的 Azure AI Foundry SDK 项目客户端:

    uv install azure-ai-projects azure-identity
    

    注释

    有关详细信息,请参阅 REST API 参考文档

  2. 为 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")
    
  3. 定义在云中运行评估的客户端:

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

若要详细了解用于评估生成 AI 应用程序的输入数据格式,请执行以下作:

若要详细了解用于评估代理的输入数据格式,请参阅 评估 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 Foundry 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 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)

注册自定义计算器后,可以在 计算器库中查看它。 在 Azure AI Foundry 项目中,选择“ 评估”,然后选择“ 评估器库”。

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

按照以下示例注册基于 Prompt 的计算器中所述的自定义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)

注册自定义计算器后,可以在 计算器库中查看它。 在 Azure AI Foundry 项目中,选择“ 评估”,然后选择“ 评估器库”。

故障排除:作业停滞在正在运行状态

使用 Azure AI Foundry 项目或中心时,评估作业可能会长时间处于 “正在运行” 状态。 所选的 Azure OpenAI 模型可能没有足够的容量。

解决方案

  1. 取消当前评估作业。
  2. 增加模型容量以处理更大的输入数据。
  3. 再次运行评估。