Valutare l'applicazione generativa per intelligenza artificiale nel cloud con Azure AI Projects SDK (anteprima)
Importante
Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente disponibili in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Anche se il client Azure AI Evaluation SDK supporta l'esecuzione di valutazioni in locale nel proprio computer, potrebbe essere necessario delegare il processo in modalità remota al cloud. Ad esempio, dopo aver eseguito valutazioni locali su dati di test di piccole dimensioni per valutare i prototipi di applicazioni di intelligenza artificiale generativi, ora si passa ai test di pre-distribuzione e sono necessarie valutazioni in un set di dati di grandi dimensioni. La valutazione cloud consente di gestire l'infrastruttura di calcolo locale e di integrare valutazioni come test nelle pipeline CI/CD. Dopo la distribuzione, è possibile valutare continuamente le applicazioni per il monitoraggio post-distribuzione.
Questo articolo illustra come eseguire la valutazione cloud (anteprima) nei test di pre-distribuzione in un set di dati di test. Usando Azure AI Projects SDK, i risultati della valutazione verranno registrati automaticamente nel progetto di intelligenza artificiale di Azure per migliorare l'osservabilità. Questa funzionalità supporta tutti gli analizzatori predefiniti curati da Microsoft e i propri analizzatori personalizzati che possono trovarsi nella libreria dell'analizzatore e hanno lo stesso controllo degli accessi in base al ruolo con ambito di progetto.
Prerequisiti
Progetto di Intelligenza artificiale di Azure nelle stesse aree degli analizzatori di rischi e sicurezza (anteprima). Se non si ha un progetto esistente, seguire la guida Come creare un progetto di Intelligenza artificiale di Azure per crearne uno.
Distribuzione OpenAI di Azure con il modello GPT che supporta
chat completion
, ad esempiogpt-4
.Connection String
per il progetto di intelligenza artificiale di Azure per creareAIProjectClient
facilmente l'oggetto. È possibile ottenere il stringa di connessione progetto in Dettagli progetto dalla pagina Panoramica del progetto.Assicurarsi di essere prima connessi alla sottoscrizione di Azure eseguendo
az login
.
Istruzioni di installazione
Creare un ambiente Python virtuale preferito. Per crearne uno usando conda, eseguire il comando seguente:
conda create -n cloud-evaluation conda activate cloud-evaluation
Installare i pacchetti necessari eseguendo il comando seguente:
pip install azure-identity azure-ai-projects azure-ai-ml
Facoltativamente, è possibile usare
pip install azure-ai-evaluation
se si vuole un'esperienza code-first per recuperare l'ID dell'analizzatore per gli analizzatori predefiniti nel codice.
È ora possibile definire un client e una distribuzione che verrà usata per eseguire le valutazioni nel cloud:
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>"
)
Caricamento dei dati di valutazione
Sono disponibili due modi per registrare i dati nel progetto di intelligenza artificiale di Azure necessari per le valutazioni nel cloud:
- Da SDK: caricare nuovi dati dalla directory locale al progetto di Intelligenza artificiale di Azure nell'SDK e recuperare l'ID del set di dati come risultato:
data_id, _ = project_client.upload_file("./evaluate_test_data.jsonl")
Dall'interfaccia utente: in alternativa, è possibile caricare nuovi dati o aggiornare le versioni dei dati esistenti seguendo la procedura dettagliata dell'interfaccia utente nella scheda Dati del progetto di Intelligenza artificiale di Azure.
- Dati dei set di dati esistenti caricati nel progetto:
Da SDK: se si conosce già il nome del set di dati creato, costruire l'ID del set di dati in questo formato:
/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<project-name>/data/<dataset-name>/versions/<version-number>
Dall'interfaccia utente: se non si conosce il nome del set di dati, individuarlo nella scheda Dati del progetto di Azure per intelligenza artificiale e costruire l'ID del set di dati come in precedenza.
Specifica di analizzatori dalla libreria dell'analizzatore
Viene fornito un elenco degli analizzatori predefiniti registrati nella libreria analizzatore nella scheda Valutazione del progetto di Intelligenza artificiale di Azure. È anche possibile registrare analizzatori personalizzati e usarli per la valutazione cloud. Sono disponibili due modi per specificare gli analizzatori registrati:
Specifica di analizzatori predefiniti
-
Da SDK: usare la proprietà dell'analizzatore
id
predefinita supportata dall'SDKazure-ai-evaluation
:
from azure.ai.evaluation import F1ScoreEvaluator, RelevanceEvaluator, ViolenceEvaluator
print("F1 Score evaluator id:", F1ScoreEvaluator.id)
-
Dall'interfaccia utente: seguire questa procedura per recuperare gli ID dell'analizzatore dopo la registrazione al progetto:
- Selezionare la scheda Valutazione nel progetto di Intelligenza artificiale di Azure;
- Selezionare libreria dell'analizzatore;
- Selezionare gli analizzatori scelti confrontando le descrizioni;
- Copiare il relativo "ID asset" che sarà l'ID dell'analizzatore,
azureml://registries/azureml/models/Groundedness-Evaluator/versions/1
ad esempio .
Specifica di analizzatori personalizzati
- Per gli analizzatori personalizzati basati su codice, registrarli nel progetto di Intelligenza artificiale di Azure e recuperare gli ID dell'analizzatore come in questo esempio:
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)
Dopo aver registrato l'analizzatore personalizzato nel progetto di Intelligenza artificiale di Azure, è possibile visualizzarlo nella libreria dell'analizzatore nella scheda Valutazione nel progetto di Intelligenza artificiale di Azure.
- Per gli analizzatori personalizzati basati su prompt, usare questo frammento di codice per registrarli. Ad esempio, registrare la
FriendlinessEvaluator
compilazione come descritto in Analizzatori basati su prompt:
# 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)
Dopo aver effettuato la registrazione dell'analizzatore personalizzato nel progetto di Intelligenza artificiale di Azure, è possibile visualizzarlo nella libreria dell'analizzatore nella scheda Valutazione del progetto di Intelligenza artificiale di Azure.
Valutazione cloud (anteprima) con Azure AI Projects SDK
È ora possibile inviare una valutazione cloud con Azure AI Projects SDK tramite un'API Python. Vedere l'esempio seguente che specifica un analizzatore NLP (punteggio F1), l'analizzatore di qualità e sicurezza assistita dall'intelligenza artificiale (pertinenza e violenza) e un analizzatore personalizzato con gli ID dell'analizzatore:
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("----------------------------------------------------------------")
È ora possibile usare l'URI per visualizzare i risultati della valutazione nel progetto di intelligenza artificiale di Azure per valutare meglio le prestazioni di qualità e sicurezza delle applicazioni.
Contenuto correlato
- Valutare le applicazioni di intelligenza artificiale generative in locale
- Valutare le applicazioni di intelligenza artificiale generative online
- Altre informazioni sulla simulazione dei set di dati di test per la valutazione
- Visualizzare i risultati della valutazione nel progetto di intelligenza artificiale di Azure
- Introduzione alla creazione di un'app di chat con Azure AI Foundry SDK
- Introduzione agli esempi di valutazione