Jak spouštět hodnocení online pomocí sady Azure AI Foundry SDK
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
V tomto článku se dozvíte, jak s využitím sady Azure AI Foundry SDK průběžně spouštět hodnocení online. Vyhodnocení v předprodukčním prostředí je nezbytné pro zajištění bezpečnosti, výkonu a vytváření vysoce kvalitních výsledků vaší aplikace. Vyhodnocení se ale po nasazení aplikace nezastaví. V produkčním prostředí se můžou měnit různé věci, například typy dotazů, které uživatelé odesílají do vaší aplikace, což může ovlivnit výkon vaší aplikace. Pokud chcete zachovat vysoký stupeň pozorovatelnosti v produkční aplikaci AI, je důležité sledovat a průběžně vyhodnocovat data vaší aplikace. Díky tomu můžete zachovat důvěru v bezpečnost, kvalitu a výkon vaší aplikace.
Jak funguje online vyhodnocení
V této části se dozvíte, jak funguje online vyhodnocení, jak se integruje se službou Azure Monitor Application Insights a jak ho můžete použít ke spouštění průběžných vyhodnocování dat trasování z vašich aplikací generující umělé inteligence.
Po instrumentaci aplikace pro odesílání dat trasování do Application Insights nastavte plán online vyhodnocení, který bude tato data průběžně vyhodnocovat. Online vyhodnocení je služba, která používá výpočetní prostředky Azure AI k nepřetržitému spouštění konfigurovatelné sady vyhodnocovačů. Jakmile pomocí sady Azure AI Foundry SDK nastavíte plán online vyhodnocení, spustí se podle konfigurovatelného plánu. Při každém spuštění naplánované úlohy provede následující kroky:
- Dotazování dat trasování aplikace z připojeného prostředku Application Insights pomocí zadaného dotazu Kusto (KQL).
- Spusťte každý vyhodnocovač nad daty trasování a vypočítejte každou metriku (například uzemnění: 3).
- Napište hodnocení zpět do každého trasování pomocí standardizovaných sémantických konvencí.
Poznámka:
Online vyhodnocení podporuje stejné metriky jako azure AI Evaluation. Další informace o tom, jak funguje vyhodnocení a které metriky vyhodnocení se podporují, najdete v tématu Vyhodnocení aplikace Generative AI pomocí sady Azure AI Evaluation SDK.
Řekněme například, že máte nasazenou chatovací aplikaci, která denně dostává mnoho dotazů zákazníků. Chcete průběžně vyhodnocovat kvalitu odpovědí z vaší aplikace. Nastavíte plán online vyhodnocení s denním opakováním. Konfigurujete vyhodnocovače: Uzemnění, soudržnost a plynulost. Služba každý den vypočítá hodnocení těchto metrik a zapíše data zpět do Application Insights pro každé trasování, které se shromáždilo během časového intervalu opakování (v tomto příkladu za posledních 24 hodin). Data se pak dají dotazovat z každého trasování a zpřístupnit je v Azure AI Foundry a Azure Monitor Application Insights.
Výsledky vyhodnocení napsané zpět na každé trasování v Application Insights se řídí následujícími konvencemi. Do každého trasování pro každou metriku vyhodnocení se přidá jedinečné rozpětí:
Vlastnost | Tabulka Application Insights | Pole pro danou operation_ID | Příklad hodnoty |
---|---|---|---|
Metrika vyhodnocení | traces, AppTraces | customDimensions[“event.name”] |
gen_ai.evaluation.relevance |
Hodnocení skóre metriky | traces, AppTraces | customDimensions[“gen_ai.evaluation.score”] |
3 |
Komentář k metrikě vyhodnocení (pokud je k dispozici) | traces, AppTraces | message |
{“comment”: “I like the response”} |
Teď, když rozumíte tomu, jak funguje online vyhodnocení a jak se připojuje ke službě Azure Monitor Application Insights, je dalším krokem nastavení služby.
Nastavení online vyhodnocení
V této části se dozvíte, jak nakonfigurovat plán online vyhodnocení pro průběžné monitorování nasazené aplikace generující AI. Sada Azure AI Foundry SDK nabízí tyto funkce prostřednictvím. Rozhraní Python API a podporuje všechny funkce dostupné v místních vyhodnoceních. Pomocí následujících kroků odešlete plán online vyhodnocení dat pomocí předdefinovaných nebo vlastních vyhodnocovačů.
Poznámka:
Hodnocení jsou podporována pouze ve stejných oblastech jako metriky rizika a bezpečnosti s asistencí umělé inteligence.
Požadavky
Provedením následujících kroků požadavků nastavte prostředí a ověřování na nezbytné prostředky:
- Předplatné Azure.
- Skupina prostředků v oblasti podporované vyhodnocením
- Nová spravovaná identita přiřazená uživatelem ve stejné skupině prostředků a oblasti Poznamenejte si ho
clientId
. Budete ho potřebovat později. - Centrum Azure AI ve stejné skupině prostředků a oblasti.
- Projekt Azure AI v tomto centru najdete v tématu Vytvoření projektu na portálu Azure AI Foundry.
- Prostředek Azure Monitor Application Insights
- Přejděte na stránku centra na webu Azure Portal a přidejte prostředek Application Insights, viz Aktualizace Aplikace Azure lication Insights a Azure Container Registry.
- Nasazení Azure OpenAI s podporou
chat completion
modelu GPT , napříkladgpt-4
. -
Connection String
pro projekt Azure AI pro snadné vytvořeníAIProjectClient
objektu. Project připojovací řetězec můžete získat na stránce Přehled projektu v části Podrobnosti projektu. - Na webu Azure Portal přejděte k prostředku Application Insights a pomocí karty Řízení přístupu (IAM) přidejte
Log Analytics Contributor
roli do spravované identity přiřazené uživatelem, kterou jste vytvořili dříve. - Připojte spravovanou identitu přiřazenou uživatelem k projektu.
- Na webu Azure Portal přejděte ke službám Azure AI a pomocí karty Řízení přístupu (IAM) přidejte
Cognitive Services OpenAI Contributor
roli do spravované identity přiřazené uživatelem, kterou jste vytvořili dříve.
Pokyny k instalaci
Instalace Azure CLI a přihlášení
Nainstalujete Azure CLI a přihlásíte se z místního vývojového prostředí, abyste mohli pomocí přihlašovacích údajů uživatele volat službu Azure OpenAI.
Ve většině případů můžete Azure CLI nainstalovat z terminálu pomocí následujícího příkazu:
Pokud tyto příkazy nefungují pro konkrétní operační systém nebo nastavení, můžete postupovat podle pokynů , jak nainstalovat Azure CLI .
Po instalaci Azure CLI se přihlaste pomocí az login
příkazu a přihlaste se pomocí prohlížeče:
az login
Alternativně se můžete přihlásit ručně pomocí prohlížeče pomocí kódu zařízení.
az login --use-device-code
Vytvoření nového prostředí Pythonu
Nejprve musíte vytvořit nové prostředí Pythonu, které se použije k instalaci balíčku, který potřebujete pro účely tohoto kurzu. Neinstalujte balíčky do globální instalace Pythonu. Při instalaci balíčků Pythonu byste měli vždy používat virtuální prostředí nebo prostředí Conda, jinak můžete přerušit globální instalaci Pythonu.
V případě potřeby nainstalujte Python.
Doporučujeme používat Python 3.10 nebo novější, ale vyžaduje se aspoň Python 3.8. Pokud nemáte nainstalovanou vhodnou verzi Pythonu, můžete postupovat podle pokynů v kurzu VS Code Python pro nejjednodušší způsob instalace Pythonu do operačního systému.
Vytvoříte virtuální prostředí.
Pokud už máte nainstalovaný Python 3.10 nebo novější, můžete vytvořit virtuální prostředí pomocí následujících příkazů:
Aktivace prostředí Python znamená, že při spuštění python
nebo pip
z příkazového řádku pak použijete interpret Pythonu obsažený ve .venv
složce vaší aplikace.
Poznámka:
Pomocí příkazu můžete deactivate
ukončit virtuální prostředí Pythonu a později ho v případě potřeby znovu aktivovat.
Můžete také vytvořit nové prostředí Pythonu pomocí conda
:
conda create -n online-evaluation
conda activate online-evaluation
Nainstalujte požadované balíčky:
pip install azure-identity azure-ai-projects azure-ai-ml
Tip
Volitelně můžete použít pip install azure-ai-evaluation
, pokud chcete, aby prostředí prvního kódu načítá ID vyhodnocovače pro předdefinované vyhodnocovače v kódu. Informace o tom, jak to provést, najdete v tématu Určení vyhodnocovačů z knihovny vyhodnocovačů.
Nastavení trasování pro generující aplikaci AI
Před nastavením online vyhodnocení se ujistěte, že jste nejprve nastavili trasování pro svoji aplikaci generující AI.
Použití názvu služby v datech trasování
K identifikaci aplikace prostřednictvím jedinečného ID v Application Insights můžete ve svých trasovacích datech použít vlastnost OpenTelemetry s názvem služby. To je zvlášť užitečné, pokud protokolujete data z více aplikací do stejného prostředku Application Insights a chcete mezi nimi rozlišovat. Řekněme například, že máte dvě aplikace: App-1 a App-2 s trasováním nakonfigurovaným pro protokolování dat do stejného prostředku Application Insights. Možná byste chtěli nastavit , aby se aplikace App-1 vyhodnocovala nepřetržitě podle relevance a app-2 , aby se vyhodnocovala nepřetržitě podle zemnění. Název služby můžete použít k rozlišení aplikací v konfiguracích online vyhodnocení.
Pokud chcete nastavit vlastnost názvu služby, můžete to provést přímo v kódu aplikace pomocí kroků, viz Použití více zprostředkovatelů trasování s jiným prostředkem. Případně můžete proměnnou OTEL_SERVICE_NAME
prostředí nastavit před nasazením aplikace. Další informace o práci s názvem služby najdete v tématu Proměnné prostředí OTEL a sémantické konvence prostředků služby.
Další informace o použití názvu služby k rozlišení mezi generujícími aplikacemi AI najdete v tématu trasování.
Dotazování uložených dat trasování v Application Insights
Pomocí dotazovací jazyk Kusto (KQL) můžete dotazovat data trasování generující aplikace AI z Application Insights, která se použijí k průběžnému online hodnocení. Pokud k trasování aplikace generující AI použijete balíček Azure AI Tracing, můžete použít následující dotaz Kusto:
Důležité
Dotaz KQL používaný službou pro online vyhodnocení musí vypíše následující sloupce: operation_Id
, operation_ParentId
a gen_ai_response_id
. Každý vyhodnocovací objekt má navíc vlastní požadavky na vstupní data. Dotaz KQL musí vypíše tyto sloupce, které se použijí jako vstupy do samotných vyhodnocovačů. Seznampožadavkůch
let gen_ai_spans = (
dependencies
| where isnotnull(customDimensions["gen_ai.system"])
| extend response_id = tostring(customDimensions["gen_ai.response.id"])
| project id, operation_Id, operation_ParentId, timestamp, response_id
);
let gen_ai_events = (
traces
| where message in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
or tostring(customDimensions["event.name"]) in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
| project
id = operation_ParentId,
operation_Id,
operation_ParentId,
user_input = iff(
message == "gen_ai.user.message" or tostring(customDimensions["event.name"]) == "gen_ai.user.message",
parse_json(iff(message == "gen_ai.user.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
system = iff(
message == "gen_ai.system.message" or tostring(customDimensions["event.name"]) == "gen_ai.system.message",
parse_json(iff(message == "gen_ai.system.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
llm_response = iff(
message == "gen_ai.choice",
parse_json(tostring(parse_json(tostring(customDimensions["gen_ai.event.content"])).message)).content,
iff(tostring(customDimensions["event.name"]) == "gen_ai.choice", parse_json(parse_json(message).message).content, "")
)
| summarize
operation_ParentId = any(operation_ParentId),
Input = maxif(user_input, user_input != ""),
System = maxif(system, system != ""),
Output = maxif(llm_response, llm_response != "")
by operation_Id, id
);
gen_ai_spans
| join kind=inner (gen_ai_events) on id, operation_Id
| project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id
Pokud k nastavení názvu služby používáte OTEL_SERVICE_NAME
proměnnou prostředí ve generační aplikaci AI, můžete dotazovat v cloud_RoleName
rámci plánu online vyhodnocení přidáním následujícího řádku do dotazu Kusto (KQL):
| where cloud_RoleName == "service_name"
Volitelně můžete použít ukázkový operátor nebo operátor vzít v dotazu Kusto tak, aby vracel pouze podmnožinu trasování. Vzhledem k tomu, že hodnocení s asistencí AI můžou být nákladná ve velkém, může vám tento přístup pomoct řídit náklady pouze vyhodnocením náhodného vzorku (nebo n
trasování) dat.
Nastavení online vyhodnocení pomocí sady Azure AI Project SDK
Naplánovanou online úlohu vyhodnocení můžete odeslat pomocí sady Azure AI Project SDK prostřednictvím rozhraní Python API. V následujícím skriptu se dozvíte, jak nastavit online hodnocení pomocí vyhodnocovačů výkonu a kvality (asistované umělé inteligence). Pokud chcete zobrazit úplný seznam podporovaných vyhodnocovačů, přečtěte si téma Vyhodnocení pomocí sady Azure AI Evaluation SDK. Pokud chcete zjistit, jak používat vlastní vyhodnocovače, podívejte se na vlastní vyhodnocovače.
Začněte importem požadovaných balíčků a konfigurací požadovaných proměnných:
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import (
ApplicationInsightsConfiguration,
EvaluatorConfiguration,
EvaluationSchedule,
RecurrenceTrigger,
)
from azure.ai.evaluation import CoherenceEvaluator
# This sample includes the setup for an online evaluation schedule using the Azure AI Project SDK and Azure AI Evaluation SDK
# The schedule is configured to run daily over the collected trace data while running two evaluators: CoherenceEvaluator and RelevanceEvaluator
# This sample can be modified to fit your application's requirements
# Name of your online evaluation schedule
SAMPLE_NAME = "online_eval_name"
# Connection string to your Azure AI Foundry project
# Currently, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
PROJECT_CONNECTION_STRING = "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# Your Application Insights resource ID
APPLICATION_INSIGHTS_RESOURCE_ID = "appinsights_resource_id"
# Kusto Query Language (KQL) query to query data from Application Insights resource
# This query is compatible with data logged by the Azure AI Inferencing Tracing SDK (linked in documentation)
# You can modify it depending on your data schema
# The KQL query must output these required columns: operation_ID, operation_ParentID, and gen_ai_response_id
# You can choose which other columns to output as required by the evaluators you are using
KUSTO_QUERY = "let gen_ai_spans=(dependencies | where isnotnull(customDimensions[\"gen_ai.system\"]) | extend response_id = tostring(customDimensions[\"gen_ai.response.id\"]) | project id, operation_Id, operation_ParentId, timestamp, response_id); let gen_ai_events=(traces | where message in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") or tostring(customDimensions[\"event.name\"]) in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") | project id= operation_ParentId, operation_Id, operation_ParentId, user_input = iff(message == \"gen_ai.user.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.user.message\", parse_json(iff(message == \"gen_ai.user.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), system = iff(message == \"gen_ai.system.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.system.message\", parse_json(iff(message == \"gen_ai.system.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), llm_response = iff(message == \"gen_ai.choice\", parse_json(tostring(parse_json(tostring(customDimensions[\"gen_ai.event.content\"])).message)).content, iff(tostring(customDimensions[\"event.name\"]) == \"gen_ai.choice\", parse_json(parse_json(message).message).content, \"\")) | summarize operation_ParentId = any(operation_ParentId), Input = maxif(user_input, user_input != \"\"), System = maxif(system, system != \"\"), Output = maxif(llm_response, llm_response != \"\") by operation_Id, id); gen_ai_spans | join kind=inner (gen_ai_events) on id, operation_Id | project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id"
Dále definujte klienta a nasazení Azure OpenAI GPT (například GPT-4
), které se použije ke spuštění plánu online vyhodnocení. Připojte se také k prostředku Application Insights:
# Connect to your Azure AI Foundry Project
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=PROJECT_CONNECTION_STRING
)
# Connect to your Application Insights resource
app_insights_config = ApplicationInsightsConfiguration(
resource_id=APPLICATION_INSIGHTS_RESOURCE_ID,
query=KUSTO_QUERY
)
# Connect to your Azure OpenAI Service resource. You must use a GPT model deployment for this example.
deployment_name = "gpt-4"
api_version = "2024-08-01-preview"
# This is your Azure OpenAI Service connection name, which can be found in your Azure AI Foundry project under the 'Models + Endpoints' tab.
default_connection = project_client.connections._get_connection(
"aoai_connection_name"
)
model_config = {
"azure_deployment": deployment_name,
"api_version": api_version,
"type": "azure_openai",
"azure_endpoint": default_connection.properties["target"]
}
Dále nakonfigurujte vyhodnocovače, které chcete použít:
# RelevanceEvaluator
# id for each evaluator can be found in your Azure AI Foundry registry - please see documentation for more information
# init_params is the configuration for the model to use to perform the evaluation
# data_mapping is used to map the output columns of your query to the names required by the evaluator
relevance_evaluator_config = EvaluatorConfiguration(
id="azureml://registries/azureml-staging/models/Relevance-Evaluator/versions/4",
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
# CoherenceEvaluator
coherence_evaluator_config = EvaluatorConfiguration(
id=CoherenceEvaluator.id,
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
Nakonec definujte opakování a vytvořte plán:
Poznámka: V požadovaných krocích jste vytvořili spravovanou identitu přiřazenou uživatelem, abyste ověřili plán online vyhodnocení vašeho prostředku Application Insights.
properties
EvaluationSchedule
Parametr AzureMSIClientId
třídy je clientId
tato identita.
# Frequency to run the schedule
recurrence_trigger = RecurrenceTrigger(frequency="day", interval=1)
# Dictionary of evaluators
evaluators = {
"relevance": relevance_evaluator_config,
"coherence" : coherence_evaluator_config
}
name = SAMPLE_NAME
description = f"{SAMPLE_NAME} description"
# AzureMSIClientId is the clientID of the User-assigned managed identity created during set-up - see documentation for how to find it
properties = {"AzureMSIClientId": "your_client_id"}
# Configure the online evaluation schedule
evaluation_schedule = EvaluationSchedule(
data=app_insights_config,
evaluators=evaluators,
trigger=recurrence_trigger,
description=description,
properties=properties)
# Create the online evaluation schedule
created_evaluation_schedule = project_client.evaluations.create_or_replace_schedule(name, evaluation_schedule)
print(f"Successfully submitted the online evaluation schedule creation request - {created_evaluation_schedule.name}, currently in {created_evaluation_schedule.provisioning_state} state.")
Provádění operací podle plánu online vyhodnocení
Plány online vyhodnocení můžete získat, vypsat a zakázat přidáním následujícího kódu do konfiguračního skriptu pro online vyhodnocení:
Upozornění: Počkejte prosím malou dobu (přibližně 30 sekund) mezi vytvořením plánu online vyhodnocení a spuštěním get_schedule()
rozhraní API.
Získejte plán online vyhodnocení:
name = "<my-online-evaluation-name>"
get_evaluation_schedule = project_client.evaluations.get_schedule(name)
Zobrazit seznam všech plánů online vyhodnocení:
count = 0
for evaluation_schedule in project_client.evaluations.list_schedule():
count += 1
print(f"{count}. {evaluation_schedule.name} "
f"[IsEnabled: {evaluation_schedule.is_enabled}]")
print(f"Total evaluation schedules: {count}")
Zakázat (obnovitelné odstranění) plánu online vyhodnocení:
name = "<my-online-evaluation-name>"
project_client.evaluations.disable_schedule(name)