Vyhodnocení stanoví výchozí úroveň kvality vašeho agenta a umožní vám nastavit akceptační prahy, například míru úspěšného splnění požadavků úlohy, ještě než změny zpřístupníte uživatelům.
Každý krok nabízí pět cest. Použijte podle toho, co dáváte přednost:
Vyhodnocení probíhá vůči nasazenému agentovi, kterého lze vyvolat. Před nastavením vyhodnocení ověřte, že je váš agent nasazený a dostupný.
Ve vašem azd adresáři projektu ověřte, že je agent nasazený a lze ho spustit:
azd ai agent show
Odeslat testovací výzvu:
azd ai agent invoke "Write a haiku about deploying cloud applications."
Během několika sekund by se měla zobrazit odpověď.
- Otevřete portál Foundry a přejděte do projektu.
- Vyberte svého agenta a pak vyberte kartu Dětské hřiště .
- Odeslání testovací výzvy, například
Write a haiku about deploying cloud applications.
Během několika sekund by se měla zobrazit odpověď.
Nainstalujte sadu Foundry SDK:
pip install "azure-ai-projects>=2.0.0" azure-identity
Nastavte dvě proměnné prostředí a pak vytvořte klienta projektu. Nastavte FOUNDRY_PROJECT_ENDPOINT na koncový bod vašeho projektu a FOUNDRY_MODEL_NAME na nasazení pro dokončování chatu, které se bude používat jako hodnoticí model. Následující ukázky kódu předpokládají, že je spustíte v tomto kontextu:
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_deployment = os.environ["FOUNDRY_MODEL_NAME"]
credential = DefaultAzureCredential()
project_client = AIProjectClient(endpoint=endpoint, credential=credential)
client = project_client.get_openai_client()
Ověřte, že je nasazený agent zaregistrovaný a dostupný. Nahraďte <your-agent-name> názvem hostovaného agenta:
agent = project_client.agents.get("<your-agent-name>")
print(f"Found agent: {agent.name}")
Volání vrátí agenta, pokud existuje, nebo vyvolá chybu, pokud je název nesprávný nebo agent není nasazený.
Nainstalujte sadu Foundry SDK a klienta openAI evals:
dotnet add package Azure.AI.Projects --prerelease
dotnet add package OpenAI
dotnet add package Azure.Identity
Nastavte dvě proměnné prostředí a pak vytvořte klienty. Nastavte FOUNDRY_PROJECT_ENDPOINT na koncový bod vašeho projektu a FOUNDRY_MODEL_NAME na nasazení pro dokončování chatu, které se bude používat jako hodnoticí model. Následující ukázky kódu předpokládají, že je spustíte v tomto kontextu:
using System.ClientModel;
using System.Text.Json;
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Core;
using Azure.Identity;
using OpenAI;
using OpenAI.Evals;
#pragma warning disable AAIP001, OPENAI001
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")!;
var modelDeployment = Environment.GetEnvironmentVariable("FOUNDRY_MODEL_NAME")!;
var credential = new DefaultAzureCredential();
AIProjectClient projectClient = new(new Uri(endpoint), credential);
// OpenAI-compatible evals client bound to the Foundry project endpoint.
// A Microsoft Entra token works as the credential because both use "Authorization: Bearer".
var token = credential.GetToken(new TokenRequestContext(["https://ai.azure.com/.default"])).Token;
EvaluationClient evalClient = new(
new ApiKeyCredential(token),
new OpenAIClientOptions { Endpoint = new Uri($"{endpoint}/openai/v1") });
Ověřte, že je nasazený agent zaregistrovaný a dostupný. Nahraďte <your-agent-name> názvem hostovaného agenta:
ProjectsAgentRecord agent = projectClient.AgentAdministrationClient.GetAgent("<your-agent-name>");
Console.WriteLine($"Found agent: {agent.Name}");
Volání vrátí agenta, pokud existuje, nebo vyvolá chybu, pokud je název nesprávný nebo agent není nasazený.
Nainstalujte sadu Foundry SDK:
npm install @azure/ai-projects @azure/identity dotenv
Nastavte dvě proměnné prostředí a pak vytvořte klienta projektu. Nastavte FOUNDRY_PROJECT_ENDPOINT na koncový bod vašeho projektu a FOUNDRY_MODEL_NAME na nasazení pro dokončování chatu, které se bude používat jako hodnoticí model. Následující ukázky kódu předpokládají, že je spustíte v tomto kontextu:
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import "dotenv/config";
const endpoint = process.env["FOUNDRY_PROJECT_ENDPOINT"] || "";
const modelDeployment = process.env["FOUNDRY_MODEL_NAME"] || "";
const projectClient = new AIProjectClient(
endpoint,
new DefaultAzureCredential(),
);
const client = projectClient.getOpenAIClient();
Ověřte, že je nasazený agent zaregistrovaný a dostupný. Nahraďte <your-agent-name> názvem hostovaného agenta:
const agent = await projectClient.agents.get("<your-agent-name>");
console.log(`Found agent: ${agent.name}`);
Volání vrátí agenta, pokud existuje, nebo vyvolá chybu, pokud je název nesprávný nebo agent není nasazený.
Referenční informace: Třída AIProjectClient
Začněte s integrovanými vyhodnocovači, které vyhodnotí agenta proti testovací datové sadě.
Nejprve vytvořte soubor JSONL s testovacími dotazy pro vašeho agenta. Každý řádek je objekt JSON s polem query . Uložte ho do zdrojové složky vašeho agenta jako src/<your-agent-name>/tests/queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Potom vytvořte eval.yaml soubor ve stejné zdrojové složce agenta jako src/<your-agent-name>/eval.yaml. Odkazuje na vaši datovou sadu a zobrazí seznam předdefinovaných vyhodnocovačů, které se mají použít. Cesta dataset.local_uri je relativní k této složce. Nahraďte <your-agent-name> názvem hostovaného agenta a <your-chat-completion-deployment> nasazením modelu soudce:
name: agent-eval
agent:
name: <your-agent-name>
kind: hosted
dataset:
local_uri: tests/queries.jsonl
evaluators:
- builtin.intent_resolution
- builtin.task_adherence
options:
eval_model: <your-chat-completion-deployment>
max_samples: 15
Hodnota eval_model je hodnoticí model, který hodnotí odpovědi; můžete znovu použít nasazení, které už váš agent používá.
- Na portálu Foundry otevřete svého agenta a vyberte kartu Vyhodnocení a pak vyberte Vytvořit.
- Pro výběr cíle vyhodnocení vyberte agenta.
- U možnosti Vybrat rozsah vyhodnocení vyberte Jednotlivá otočení.
- V části Vybrat zdroj dat vyberte Existující datovou sadu a zvolte soubor CSV nebo JSONL testovacích dotazů z datových prostředků projektu.
- Pokud se zobrazí krok Konfigurovat agenty, zkontrolujte agenta a přijměte výchozí výzvu uživatele.
{{item.query}} Upravte ho jenom v případě, že váš agent očekává jiný vstupní formát.
- Pro výběr kritérií testování vyberte jeden nebo více vyhodnocovačů agentů, jako je například dodržování úkolů a řešení záměru.
Ponechte průvodce otevřeného. Hodnocení odešlete v dalším kroku.
Nejprve vytvořte soubor JSONL s testovacími dotazy pro vašeho agenta. Každý řádek je objekt JSON s polem query . Uložte ho jako queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Nahrajte soubor jako datovou sadu v projektu:
dataset = project_client.datasets.upload_file(
name="agent-test-queries",
version="1",
file_path="./queries.jsonl",
)
Dále zvolte předdefinované vyhodnocovače a namapovat jejich vstupy. Parametr data_mapping každému vyhodnocovače řekne, kde najít dotaz a odpověď agenta. Vyhodnocovací nástroje s podporou AI vyžadují v initialization_parameters rozhodčí model; hodnota musí být nasazení pro dokončování chatu v rámci vašeho projektu.
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="Intent Resolution",
evaluator_name="builtin.intent_resolution",
initialization_parameters={"model": model_deployment},
data_mapping={
"query": "{{item.query}}",
"response": "{{sample.output_items}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="Task Adherence",
evaluator_name="builtin.task_adherence",
initialization_parameters={"model": model_deployment},
data_mapping={
"query": "{{item.query}}",
"response": "{{sample.output_items}}",
},
),
]
Vytvořte vyhodnocení. Definuje testovací schéma dat a kritéria testování a slouží jako kontejner pro jedno nebo více spuštění:
from openai.types.eval_create_params import DataSourceConfigCustom
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
},
include_sample_schema=True,
)
evaluation = client.evals.create(
name="Agent Quality Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
print(f"Evaluation created: {evaluation.id}")
Nejprve vytvořte soubor JSONL s testovacími dotazy pro vašeho agenta. Každý řádek je objekt JSON s polem query . Uložte ho jako queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Nahrajte soubor jako datovou sadu v projektu:
AIProjectDataset dataset = projectClient.Datasets.UploadFile(
name: "agent-test-queries",
version: "1",
filePath: "./queries.jsonl");
Dále zvolte předdefinované vyhodnocovače a namapovat jejich vstupy. Parametr data_mapping každému vyhodnocovače řekne, kde najít dotaz a odpověď agenta. Vyhodnocovací nástroje s podporou AI vyžadují v initialization_parameters rozhodčí model; hodnota musí být nasazení pro dokončování chatu v rámci vašeho projektu.
var testingCriteria = new object[]
{
new
{
type = "azure_ai_evaluator",
name = "Intent Resolution",
evaluator_name = "builtin.intent_resolution",
initialization_parameters = new { model = modelDeployment },
data_mapping = new { query = "{{item.query}}", response = "{{sample.output_items}}" },
},
new
{
type = "azure_ai_evaluator",
name = "Task Adherence",
evaluator_name = "builtin.task_adherence",
initialization_parameters = new { model = modelDeployment },
data_mapping = new { query = "{{item.query}}", response = "{{sample.output_items}}" },
},
};
Vytvořte vyhodnocení. Definuje testovací schéma dat a kritéria testování a slouží jako kontejner pro jedno nebo více spuštění:
var createEvaluation = new
{
name = "Agent Quality Evaluation",
data_source_config = new
{
type = "custom",
item_schema = new
{
type = "object",
properties = new { query = new { type = "string" } },
required = new[] { "query" },
},
include_sample_schema = true,
},
testing_criteria = testingCriteria,
};
ClientResult evaluationResult = evalClient.CreateEvaluation(
BinaryContent.Create(BinaryData.FromObjectAsJson(createEvaluation)));
string evaluationId = JsonDocument.Parse(evaluationResult.GetRawResponse().Content.ToString())
.RootElement.GetProperty("id").GetString()!;
Console.WriteLine($"Evaluation created: {evaluationId}");
Nejprve vytvořte soubor JSONL s testovacími dotazy pro vašeho agenta. Každý řádek je objekt JSON s polem query . Uložte ho jako queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Nahrajte soubor jako datovou sadu v projektu:
const dataset = await projectClient.datasets.uploadFile(
"agent-test-queries",
"1",
"./queries.jsonl",
);
Dále zvolte předdefinované vyhodnocovače a namapovat jejich vstupy. Parametr data_mapping každému vyhodnocovače řekne, kde najít dotaz a odpověď agenta. Vyhodnocovací nástroje s podporou AI vyžadují v initialization_parameters rozhodčí model; hodnota musí být nasazení pro dokončování chatu v rámci vašeho projektu.
const testingCriteria = [
{
type: "azure_ai_evaluator",
name: "Intent Resolution",
evaluator_name: "builtin.intent_resolution",
initialization_parameters: { model: modelDeployment },
data_mapping: {
query: "{{item.query}}",
response: "{{sample.output_items}}",
},
},
{
type: "azure_ai_evaluator",
name: "Task Adherence",
evaluator_name: "builtin.task_adherence",
initialization_parameters: { model: modelDeployment },
data_mapping: {
query: "{{item.query}}",
response: "{{sample.output_items}}",
},
},
];
Vytvořte vyhodnocení. Definuje testovací schéma dat a kritéria testování a slouží jako kontejner pro jedno nebo více spuštění:
const dataSourceConfig = {
type: "custom",
item_schema: {
type: "object",
properties: { query: { type: "string" } },
required: ["query"],
},
include_sample_schema: true,
};
const evaluation = await client.evals.create({
name: "Agent Quality Evaluation",
data_source_config: dataSourceConfig,
testing_criteria: testingCriteria,
});
console.log(`Evaluation created: ${evaluation.id}`);
Spusťte sadu testů vůči vašemu nasazenému agentovi. Služba odešle každý testovací dotaz agentovi, zachytí odpověď a ohodnotí ji pomocí vámi vybraných evaluátorů.
Spusťte vyhodnocení z kořenového adresáře pracovního prostoru azd:
azd ai agent eval run --config eval.yaml
Note
azd ai agent eval run vyhodnotí cestu --config relativně ke zdrojové složce vašeho agenta v rámci src/ (například src/<your-agent-name>/eval.yaml), nikoli k aktuálnímu adresáři. V této složce ponechte eval.yamla datovou sadu, na kterou odkazuje local_uri .
Příkaz přečte eval.yaml, odešle každý dotaz vašemu agentovi, ohodnotí odpovědi a po dokončení vypíše shrnutí:
Eval run started
Eval: eval_b36748dede424e4ba3f8e6c99ca2cf27
Run: evalrun_5f72ef189ad24790a32128e6f230b131
(✓) Done Eval run
Results: 1 total, 1 passed, 0 failed, 0 errored
Per-criteria results:
intent_resolution: 1 passed, 0 failed, 0 errored
task_adherence: 1 passed, 0 failed, 0 errored
- V kroku Kontrola a odeslání zadejte název vyhodnocení.
- Zkontrolujte cíl, rozsah, zdroj dat a vybrané vyhodnocovače.
- Vyberte Odeslat a spusťte běh.
Vytvořte spuštění, které odešle každý testovací dotaz vašemu agentu a použije vyhodnocovače. Nahraďte <your-agent-name> názvem hostovaného agenta:
eval_run = client.evals.runs.create(
eval_id=evaluation.id,
name="Agent Evaluation Run",
data_source={
"type": "azure_ai_target_completions",
"source": {"type": "file_id", "id": dataset.id},
"input_messages": {
"type": "template",
"template": [
{
"type": "message",
"role": "user",
"content": {"type": "input_text", "text": "{{item.query}}"},
}
],
},
"target": {
"type": "azure_ai_agent",
"name": "<your-agent-name>",
# "version": "1", # Optional; omit to use the latest version
},
},
)
print(f"Evaluation run started: {eval_run.id}")
Vytvořte spuštění, které odešle každý testovací dotaz vašemu agentu a použije vyhodnocovače. Nahraďte <your-agent-name> názvem hostovaného agenta:
var createRun = new
{
name = "Agent Evaluation Run",
data_source = new
{
type = "azure_ai_target_completions",
source = new { type = "file_id", id = dataset.Id },
input_messages = new
{
type = "template",
template = new object[]
{
new { type = "message", role = "user", content = new { type = "input_text", text = "{{item.query}}" } },
},
},
// Add a "version" property to the target to pin a specific agent version; omit to use the latest.
target = new { type = "azure_ai_agent", name = "<your-agent-name>" },
},
};
ClientResult runResult = evalClient.CreateEvaluationRun(
evaluationId, BinaryContent.Create(BinaryData.FromObjectAsJson(createRun)));
string runId = JsonDocument.Parse(runResult.GetRawResponse().Content.ToString())
.RootElement.GetProperty("id").GetString()!;
Console.WriteLine($"Evaluation run started: {runId}");
Vytvořte spuštění, které odešle každý testovací dotaz vašemu agentu a použije vyhodnocovače. Nahraďte <your-agent-name> názvem hostovaného agenta:
const evalRun = await client.evals.runs.create(evaluation.id, {
name: "Agent Evaluation Run",
data_source: {
type: "azure_ai_target_completions",
source: { type: "file_id", id: dataset.id },
input_messages: {
type: "template",
template: [
{
type: "message",
role: "user",
content: { type: "input_text", text: "{{item.query}}" },
},
],
},
target: {
type: "azure_ai_agent",
name: "<your-agent-name>",
// version: "1", // Optional; omit to use the latest version
},
},
});
console.log(`Evaluation run started: ${evalRun.id}`);
Vyhodnocení se obvykle dokončí během několika minut v závislosti na počtu dotazů.
Výpis nedávných vyhodnocení:
azd ai agent eval list
Eval ID Name Status of last run Runs
------- ---- ------------------ ----
* eval_b36748dede424e4ba3f8e6c99ca2cf27 agent-eval Completed 1
* = active eval in current environment
Zobrazte nejnovější hodnocení a jeho běhy:
azd ai agent eval show
Eval: eval_b36748dede424e4ba3f8e6c99ca2cf27
Name: agent-eval
Agent: <your-agent-name>
Runs: 1
Recent runs:
Run ID Status Passed Failed Created
------ ------ ------ ------ -------
evalrun_5f72ef189ad24790a32128e6f230b131 Completed 1/1 0 2026-06-17 14:52 UTC
Pomocí výsledků potvrďte, která verze agenta byla vyhodnocena a jaká skóre vyhodnocovače byla vygenerována. Chcete-li zobrazit podrobnosti pro jednotlivé vyhodnocovače a odkaz na sestavu v portálu Foundry, spusťte azd ai agent eval show <eval-id> --eval-run-id <run-id>.
- Na stránce podrobností se zobrazí cíl, datová sada, stav, využití tokenu a agregované skóre pro každý vyhodnocovač.
- Výběrem názvu spuštění zobrazíte výsledky na úrovni řádků: každý dotaz, odpověď agenta, skóre vyhodnocovače a vysvětlení skóre.
Počkejte na dokončení a pak vypište stav a adresu URL sestavy, která otevře stránku s výsledky na portálu Foundry:
import time
while True:
run = client.evals.runs.retrieve(run_id=eval_run.id, eval_id=evaluation.id)
if run.status in ["completed", "failed"]:
break
time.sleep(5)
print(f"Status: {run.status}")
print(f"Report URL: {run.report_url}")
Na úrovni spuštění můžete zobrazit agregované počty průchodů a selhání pro každý vyhodnocovací nástroj:
print(run.result_counts)
for criteria in run.per_testing_criteria_results:
print(criteria.testing_criteria, "passed:", criteria.passed, "failed:", criteria.failed)
ResultCounts(errored=0, failed=0, passed=1, total=1, skipped=0)
Intent Resolution passed: 1 failed: 0
Task Adherence passed: 1 failed: 0
Pro podrobnosti na úrovni řádků vypište výstupní položky. Každý výsledek obsahuje jméno hodnotitele, informaci o tom, zda bylo hodnocení úspěšné, nebo neúspěšné, a skóre:
for item in client.evals.runs.output_items.list(run_id=eval_run.id, eval_id=evaluation.id):
for result in item.results:
print(item.id, result.name, "passed:", result.passed, "score:", result.score)
Hlasování o dokončení a pak vytiskněte stav a adresu URL sestavy, která otevře výsledky na portálu Foundry:
JsonElement run = default;
while (true)
{
ClientResult runStatus = evalClient.GetEvaluationRun(evaluationId, runId, options: null);
run = JsonDocument.Parse(runStatus.GetRawResponse().Content.ToString()).RootElement;
string status = run.GetProperty("status").GetString()!;
if (status is "completed" or "failed") break;
Thread.Sleep(TimeSpan.FromSeconds(5));
}
Console.WriteLine($"Status: {run.GetProperty("status").GetString()}");
Console.WriteLine($"Report URL: {run.GetProperty("report_url").GetString()}");
Na úrovni spuštění můžete zobrazit agregované počty průchodů a selhání pro každý vyhodnocovací nástroj:
Console.WriteLine(run.GetProperty("result_counts").GetRawText());
foreach (JsonElement criteria in run.GetProperty("per_testing_criteria_results").EnumerateArray())
{
Console.WriteLine(
$"{criteria.GetProperty("testing_criteria").GetString()} " +
$"passed: {criteria.GetProperty("passed").GetInt32()} " +
$"failed: {criteria.GetProperty("failed").GetInt32()}");
}
Pro podrobnosti na úrovni řádků vypište výstupní položky. Každý výsledek obsahuje jméno hodnotitele, informaci o tom, zda bylo hodnocení úspěšné, nebo neúspěšné, a skóre:
ClientResult outputItems = evalClient.GetEvaluationRunOutputItems(
evaluationId, runId, limit: 100, order: null, after: null, outputItemStatus: null, options: null);
foreach (JsonElement item in JsonDocument.Parse(outputItems.GetRawResponse().Content.ToString())
.RootElement.GetProperty("data").EnumerateArray())
{
foreach (JsonElement result in item.GetProperty("results").EnumerateArray())
{
Console.WriteLine(
$"{item.GetProperty("id").GetString()} {result.GetProperty("name").GetString()} " +
$"passed: {result.GetProperty("passed")} score: {result.GetProperty("score")}");
}
}
Hlasování o dokončení a pak vytiskněte stav a adresu URL sestavy, která otevře výsledky na portálu Foundry:
let run = evalRun;
while (!["completed", "failed"].includes(run.status)) {
run = await client.evals.runs.retrieve(run.id, {
eval_id: evaluation.id,
});
await new Promise((resolve) => setTimeout(resolve, 5000));
}
console.log(`Status: ${run.status}`);
console.log(`Report URL: ${run.report_url}`);
Na úrovni spuštění můžete zobrazit agregované počty průchodů a selhání pro každý vyhodnocovací nástroj:
console.log(JSON.stringify(run.result_counts));
for (const criteria of run.per_testing_criteria_results) {
console.log(
criteria.testing_criteria,
"passed:",
criteria.passed,
"failed:",
criteria.failed,
);
}
{"errored":0,"failed":0,"passed":1,"total":1,"skipped":0}
Intent Resolution passed: 1 failed: 0
Task Adherence passed: 1 failed: 0
Pro podrobnosti na úrovni řádků vypište výstupní položky. Každý výsledek obsahuje jméno hodnotitele, informaci o tom, zda bylo hodnocení úspěšné, nebo neúspěšné, a skóre:
for await (const item of client.evals.runs.outputItems.list(run.id, {
eval_id: evaluation.id,
})) {
for (const result of item.results) {
console.log(item.id, result.name, "passed:", result.passed, "score:", result.score);
}
}
Tento rychlý start zaregistruje datovou sadu, vyhodnocení a historii spuštění v projektu Foundry. Tato aktiva jsou spojena s minimálními nebo nulovými průběžnými náklady.