Compartir a través de


Evaluación de una aplicación de IA generativa en la nube con el SDK de proyectos de Azure AI (versión preliminar)

Importante

Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Aunque el cliente del SDK de evaluación de Azure AI admite la ejecución de evaluaciones localmente en su propia máquina, es posible que desee delegar el trabajo de forma remota en la nube. Por ejemplo, después de ejecutar evaluaciones locales sobre datos de prueba pequeños para ayudar a evaluar los prototipos de la aplicación de IA generativa, ahora pasa a las pruebas previas a la implementación y necesita ejecutar evaluaciones sobre un conjunto de datos grande. La evaluación en la nube le libera de administrar la infraestructura del proceso local y le permite integrar evaluaciones como pruebas en las canalizaciones de CI/CD. Después de la implementación, es posible que quiera evaluar continuamente las aplicaciones para la supervisión posterior a la implementación.

En este artículo, aprenderá a ejecutar la evaluación en la nube (versión preliminar) en las pruebas previas a la implementación sobre un conjunto de datos de prueba. Con el SDK de proyectos de Azure AI, los resultados de la evaluación se registrarán automáticamente en el proyecto de Azure AI para mejorar la observabilidad. Esta característica admite todos los evaluadores integrados mantenidos por Microsoft y sus propios evaluadores personalizados que se pueden encontrar en la biblioteca de evaluadores y tienen el mismo RBAC de ámbito de proyecto.

Requisitos previos

  • Proyecto de Azure AI en las mismas regiones que los evaluadores de riesgos y seguridad (versión preliminar). Si aún no tiene un proyecto, siga la guía Creación de un proyecto de Azure AI para crear uno.

  • Implementación de Azure OpenAI con el modelo GPT compatible con chat completion, por ejemplo gpt-4.

  • Connection String para que el proyecto de Azure AI cree fácilmente un objeto AIProjectClient. Puede obtener la cadena de conexión del proyecto en Detalles del proyecto en la página Información general del proyecto.

  • Asegúrese de que ha iniciado sesión primero en la suscripción de Azure ejecutando az login.

Instrucciones de instalación

  1. Cree un entorno de Python virtual a su gusto. Para crear uno mediante Conda, ejecute el siguiente comando:

    conda create -n cloud-evaluation
    conda activate cloud-evaluation
    
  2. Instale los paquetes necesarios ejecutando los comandos siguientes:

    pip install azure-identity azure-ai-projects azure-ai-ml
    

    Opcionalmente, puede usar pip install azure-ai-evaluation si desea una experiencia de tipo código primero para capturar el identificador del evaluador en los evaluadores integrados en el código.

Ahora puede definir un cliente y una implementación que se usarán para ejecutar las evaluaciones en la nube:


import os, time
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import Evaluation, Dataset, EvaluatorConfiguration, ConnectionType
from azure.ai.evaluation import F1ScoreEvaluator, RelevanceEvaluator, ViolenceEvaluator

# Load your Azure OpenAI config
deployment_name = os.environ.get("AZURE_OPENAI_DEPLOYMENT")
api_version = os.environ.get("AZURE_OPENAI_API_VERSION")

# Create an Azure AI Client from a connection string. Available on Azure AI project Overview page.
project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str="<connection_string>"
)

Carga de datos de evaluación

Proporcionamos dos maneras de registrar los datos en el proyecto de Azure AI necesario para las evaluaciones en la nube:

  1. Desde el SDK: cargue nuevos datos desde el directorio local al proyecto de Azure AI en el SDK y capture el identificador del conjunto de datos como resultado:
data_id, _ = project_client.upload_file("./evaluate_test_data.jsonl")

Desde la interfaz de usuario: como alternativa, puede cargar nuevos datos o actualizar versiones de datos existentes siguiendo el tutorial de la interfaz de usuario de la pestaña Datos del proyecto de Azure AI.

  1. Dados los conjuntos de datos existentes cargados en el proyecto:
  • Desde el SDK: si ya conoce el nombre del conjunto de datos que ha creado, construya el identificador del conjunto de datos en este formato: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<project-name>/data/<dataset-name>/versions/<version-number>

  • Desde la interfaz de usuario: si no conoce el nombre del conjunto de datos, búsquelo en la pestaña Datos del proyecto de Azure AI y construya el identificador del conjunto de datos con el formato anterior.

Especificación de evaluadores de la biblioteca de evaluadores

Proporcionamos una lista de evaluadores integrados registrados en la biblioteca de evaluadores en la pestaña Evaluación del proyecto de Azure AI. También puede registrar evaluadores personalizados y usarlos para la evaluación en la nube. Proporcionamos dos maneras de especificar evaluadores registrados:

Especificación de evaluadores integrados

  • Desde el SDK: use la propiedad id del evaluador integrado compatible con el SDK de azure-ai-evaluation:
from azure.ai.evaluation import F1ScoreEvaluator, RelevanceEvaluator, ViolenceEvaluator
print("F1 Score evaluator id:", F1ScoreEvaluator.id)
  • Desde la interfaz de usuario: siga estos pasos para capturar los identificadores de los evaluadores después de que se han registrado en el proyecto:
    • Seleccione la pestaña Evaluación en el proyecto de Azure AI.
    • Seleccione la biblioteca de evaluadores.
    • Seleccione los evaluadores que prefiera comparando las descripciones;
    • Copie su "Id. de activo", que será el identificador del evaluador, por ejemplo, azureml://registries/azureml/models/Groundedness-Evaluator/versions/1.

Especificación de evaluadores personalizados

  • En el caso de los evaluadores personalizados basados en código, regístrelos en el proyecto de Azure AI y capture los identificadores de la manera siguiente:
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)

Después de registrar el evaluador personalizado en el proyecto de Azure AI, puede verlo en la biblioteca de evaluadores en la pestaña Evaluación del proyecto de Azure AI.

  • En el caso de evaluadores personalizados basados en indicaciones, use este fragmento de código para registrarlos. Por ejemplo, vamos a registrar el evaluador FriendlinessEvaluator que se ha creado como se describe en Evaluadores basados en indicaciones:
# 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)

Después de registrar el evaluador personalizado en el proyecto de IA, puede verlo en la biblioteca de evaluadores en la pestaña Evaluación del proyecto de Azure AI.

Evaluación en la nube (versión preliminar) con el SDK de proyectos de Azure AI

Ahora, puede enviar una evaluación en la nube con el SDK de proyecto de Azure AI a través de una API de Python. Consulte el ejemplo siguiente que especifica un evaluador de NLP (puntuación F1), un evaluador de calidad y seguridad asistido por IA (relevancia y violencia) y un evaluador personalizado (facilidad de uso) con sus identificadores de evaluador:

import os, time
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import Evaluation, Dataset, EvaluatorConfiguration, ConnectionType
from azure.ai.evaluation import F1ScoreEvaluator, RelevanceEvaluator, ViolenceEvaluator

# Load your Azure OpenAI config
deployment_name = os.environ.get("AZURE_OPENAI_DEPLOYMENT")
api_version = os.environ.get("AZURE_OPENAI_API_VERSION")

# Create an Azure AI Client from a connection string. Avaiable on project overview page on Azure AI project UI.
project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str="<connection_string>"
)

# Construct dataset ID per the instruction
data_id = "<dataset-id>"

default_connection = project_client.connections.get_default(connection_type=ConnectionType.AZURE_OPEN_AI)

# Use the same model_config for your evaluator (or use different ones if needed)
model_config = default_connection.to_evaluator_model_config(deployment_name=deployment_name, api_version=api_version)

# Create an evaluation
evaluation = Evaluation(
    display_name="Cloud evaluation",
    description="Evaluation of dataset",
    data=Dataset(id=data_id),
    evaluators={
        # Note the evaluator configuration key must follow a naming convention
        # the string must start with a letter with only alphanumeric characters 
        # and underscores. Take "f1_score" as example: "f1score" or "f1_evaluator" 
        # will also be acceptable, but "f1-score-eval" or "1score" will result in errors.
        "f1_score": EvaluatorConfiguration(
            id=F1ScoreEvaluator.id,
        ),
        "relevance": EvaluatorConfiguration(
            id=RelevanceEvaluator.id,
            init_params={
                "model_config": model_config
            },
        ),
        "violence": EvaluatorConfiguration(
            id=ViolenceEvaluator.id,
            init_params={
                "azure_ai_project": project_client.scope
            },
        ),
        "friendliness": EvaluatorConfiguration(
            id="<custom_evaluator_id>",
            init_params={
                "model_config": model_config
            }
        )
    },
)

# Create evaluation
evaluation_response = project_client.evaluations.create(
    evaluation=evaluation,
)

# Get evaluation
get_evaluation_response = project_client.evaluations.get(evaluation_response.id)

print("----------------------------------------------------------------")
print("Created evaluation, evaluation ID: ", get_evaluation_response.id)
print("Evaluation status: ", get_evaluation_response.status)
print("AI project URI: ", get_evaluation_response.properties["AiStudioEvaluationUri"])
print("----------------------------------------------------------------")

Ahora puede usar el URI para ver los resultados de evaluación del proyecto de Azure AI, con el fin de evaluar mejor la calidad y el rendimiento de la seguridad de las aplicaciones.