A avaliação estabelece uma referência de qualidade para seu agente e permite definir critérios de aceitação, como uma taxa de aprovação de aderência à tarefa, antes de disponibilizar alterações aos usuários.
Cada etapa oferece cinco caminhos. Use o que preferir:
A avaliação é executada em um agente implantado que pode ser invocado. Confirme se o agente está implantado e disponível antes de configurar a avaliação.
No diretório do projeto azd, verifique se o agente está implantado e pode ser invocado:
azd ai agent show
Enviar um prompt de teste:
azd ai agent invoke "Write a haiku about deploying cloud applications."
Você deverá ver uma resposta dentro de alguns segundos.
- Abra o portal do Foundry e acesse seu projeto.
- Selecione seu agente e, em seguida, selecione a guia Playground .
- Enviar um prompt de teste, como
Write a haiku about deploying cloud applications.
Você deverá ver uma resposta dentro de alguns segundos.
Instale o SDK do Foundry:
pip install "azure-ai-projects>=2.0.0" azure-identity
Defina duas variáveis de ambiente e, em seguida, crie o cliente do projeto. Defina FOUNDRY_PROJECT_ENDPOINT como o ponto de extremidade do projeto e FOUNDRY_MODEL_NAME como uma implantação para conclusão de chat a ser usada como modelo avaliador. Os exemplos de código a seguir pressupõem que você os execute neste contexto:
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()
Confirme se o agente implantado está registrado e disponível. Substitua <your-agent-name> pelo nome do agente hospedado:
agent = project_client.agents.get("<your-agent-name>")
print(f"Found agent: {agent.name}")
A chamada retorna o agente se ele existir ou gera um erro se o nome estiver errado ou se o agente não estiver implantado.
Instale o SDK do Foundry e o cliente de avaliações openai:
dotnet add package Azure.AI.Projects --prerelease
dotnet add package OpenAI
dotnet add package Azure.Identity
Defina duas variáveis de ambiente e crie os clientes. Defina FOUNDRY_PROJECT_ENDPOINT como o ponto de extremidade do projeto e FOUNDRY_MODEL_NAME como uma implantação para conclusão de chat a ser usada como modelo avaliador. Os exemplos de código a seguir pressupõem que você os execute neste contexto:
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") });
Confirme se o agente implantado está registrado e disponível. Substitua <your-agent-name> pelo nome do agente hospedado:
ProjectsAgentRecord agent = projectClient.AgentAdministrationClient.GetAgent("<your-agent-name>");
Console.WriteLine($"Found agent: {agent.Name}");
A chamada retorna o agente se ele existir ou gera um erro se o nome estiver errado ou se o agente não estiver implantado.
Instale o SDK do Foundry:
npm install @azure/ai-projects @azure/identity dotenv
Defina duas variáveis de ambiente e, em seguida, crie o cliente do projeto. Defina FOUNDRY_PROJECT_ENDPOINT como o ponto de extremidade do projeto e FOUNDRY_MODEL_NAME como uma implantação para conclusão de chat a ser usada como modelo avaliador. Os exemplos de código a seguir pressupõem que você os execute neste contexto:
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();
Confirme se o agente implantado está registrado e disponível. Substitua <your-agent-name> pelo nome do agente hospedado:
const agent = await projectClient.agents.get("<your-agent-name>");
console.log(`Found agent: ${agent.name}`);
A chamada retorna o agente se ele existir ou gera um erro se o nome estiver errado ou se o agente não estiver implantado.
Referência: classe AIProjectClient
Comece com avaliadores internos para pontuar seu agente em um conjunto de dados de teste.
Primeiro, crie um arquivo JSONL de consultas de teste para seu agente. Cada linha é um objeto JSON com um query campo. Salve-o dentro da pasta de origem do agente, como src/<your-agent-name>/tests/queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Em seguida, crie um eval.yaml arquivo na mesma pasta de origem do agente, como src/<your-agent-name>/eval.yaml. Ele aponta para o conjunto de dados e lista os avaliadores integrados para aplicar. O dataset.local_uri caminho é relativo a essa pasta. Substitua <your-agent-name> pelo nome do seu agente hospedado e <your-chat-completion-deployment> pela implantação do modelo de juiz:
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
O valor eval_model é o modelo avaliador que pontua as respostas; você pode reutilizar a implantação que seu agente já usa.
- No portal do Foundry, abra o agente e selecione a guia Avaliação e, em seguida, selecione Criar.
- Para Selecionar destino de avaliação, selecione Agente.
- Para selecionar o escopo de avaliação, selecione Turnos individuais.
- Para Selecionar fonte de dados, selecione o conjunto de dados existente e escolha um arquivo CSV ou JSONL de consultas de teste dos ativos de dados do projeto.
- Se a etapa Configurar agentes for exibida, revise o agente e aceite o prompt do usuário padrão,
{{item.query}}. Ajuste-o somente se o agente esperar um formato de entrada diferente.
- Para selecionar critérios de teste, selecione um ou mais avaliadores de agente, como a Adesão à Tarefa e a Resolução de Intenções.
Mantenha o assistente aberto. Envie a avaliação na próxima etapa.
Primeiro, crie um arquivo JSONL de consultas de teste para seu agente. Cada linha é um objeto JSON com um query campo. Salve-o como queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Carregue o arquivo como um conjunto de dados em seu projeto:
dataset = project_client.datasets.upload_file(
name="agent-test-queries",
version="1",
file_path="./queries.jsonl",
)
Em seguida, escolha os avaliadores internos e mapeie suas entradas. O data_mapping parâmetro informa a cada avaliador onde localizar a consulta e a resposta do agente. Os avaliadores assistidos por IA precisam de um modelo de avaliação em initialization_parameters; o valor deve ser uma implantação de conclusão de chat no seu projeto.
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}}",
},
),
]
Crie a avaliação. Ele define o esquema de dados de teste e os critérios de teste e serve como um contêiner para uma ou mais execuções:
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}")
Primeiro, crie um arquivo JSONL de consultas de teste para seu agente. Cada linha é um objeto JSON com um query campo. Salve-o como queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Carregue o arquivo como um conjunto de dados em seu projeto:
AIProjectDataset dataset = projectClient.Datasets.UploadFile(
name: "agent-test-queries",
version: "1",
filePath: "./queries.jsonl");
Em seguida, escolha os avaliadores internos e mapeie suas entradas. O data_mapping parâmetro informa a cada avaliador onde localizar a consulta e a resposta do agente. Os avaliadores assistidos por IA precisam de um modelo de avaliação em initialization_parameters; o valor deve ser uma implantação de conclusão de chat no seu projeto.
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}}" },
},
};
Crie a avaliação. Ele define o esquema de dados de teste e os critérios de teste e serve como um contêiner para uma ou mais execuções:
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}");
Primeiro, crie um arquivo JSONL de consultas de teste para seu agente. Cada linha é um objeto JSON com um query campo. Salve-o como queries.jsonl:
{"query": "Write a haiku about deploying cloud applications."}
Carregue o arquivo como um conjunto de dados em seu projeto:
const dataset = await projectClient.datasets.uploadFile(
"agent-test-queries",
"1",
"./queries.jsonl",
);
Em seguida, escolha os avaliadores internos e mapeie suas entradas. O data_mapping parâmetro informa a cada avaliador onde localizar a consulta e a resposta do agente. Os avaliadores assistidos por IA precisam de um modelo de avaliação em initialization_parameters; o valor deve ser uma implantação de conclusão de chat no seu projeto.
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}}",
},
},
];
Crie a avaliação. Ele define o esquema de dados de teste e os critérios de teste e serve como um contêiner para uma ou mais execuções:
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}`);
Execute o pacote em relação ao agente implantado. O serviço envia cada consulta de teste para o agente, captura a resposta e a pontua com seus avaliadores selecionados.
Execute a avaliação na raiz azd workspace:
azd ai agent eval run --config eval.yaml
Note
azd ai agent eval run resolve o caminho --config em relação à pasta de origem do seu agente em src/ (por exemplo, src/<your-agent-name>/eval.yaml), e não ao diretório atual. Mantenha eval.yaml e o conjunto de dados para o qual local_uri aponta dentro dessa pasta.
O comando lê eval.yaml, envia cada consulta ao seu agente, pontua as respostas e imprime um resumo quando ele termina:
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
- Na etapa Examinar e enviar , insira um nome para a avaliação.
- Examine o destino, o escopo, a fonte de dados e os avaliadores selecionados.
- Selecione Enviar para iniciar a execução.
Crie uma execução que envie cada consulta de teste ao seu agente e aplique os avaliadores. Substitua <your-agent-name> pelo nome do agente hospedado:
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}")
Crie uma execução que envie cada consulta de teste ao seu agente e aplique os avaliadores. Substitua <your-agent-name> pelo nome do agente hospedado:
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}");
Crie uma execução que envie cada consulta de teste ao seu agente e aplique os avaliadores. Substitua <your-agent-name> pelo nome do agente hospedado:
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}`);
As avaliações normalmente são concluídas em alguns minutos, dependendo do número de consultas.
Listar avaliações recentes:
azd ai agent eval list
Eval ID Name Status of last run Runs
------- ---- ------------------ ----
* eval_b36748dede424e4ba3f8e6c99ca2cf27 agent-eval Completed 1
* = active eval in current environment
Mostrar a avaliação mais recente e suas execuções:
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
Use os resultados para confirmar qual versão do agente foi avaliada e quais pontuações do avaliador foram produzidas. Para ver os detalhes por avaliador e um link para o relatório no portal do Foundry, execute azd ai agent eval show <eval-id> --eval-run-id <run-id>.
- A página de detalhes mostra o destino, o conjunto de dados, o status, o uso do token e uma pontuação de agregação para cada avaliador.
- Selecione o nome da execução para exibir os resultados em nível de linha: cada consulta, a resposta do agente, a pontuação do avaliador e a explicação da pontuação.
Verifique a conclusão e, em seguida, exiba o status e o URL do relatório que abre os resultados no portal do 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}")
No nível da execução, você pode ver contagens agregadas de aprovações e falhas para cada avaliador:
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
Para obter detalhes em nível de linha, liste os itens de saída. Cada resultado inclui o nome do avaliador, o passe ou a falha e uma pontuação:
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)
Verifique até a conclusão e, em seguida, exiba o status e a URL do relatório que abre os resultados no portal 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()}");
No nível da execução, você pode ver contagens agregadas de aprovações e falhas para cada avaliador:
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()}");
}
Para obter detalhes em nível de linha, liste os itens de saída. Cada resultado inclui o nome do avaliador, o passe ou a falha e uma pontuação:
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")}");
}
}
Verifique até a conclusão e, em seguida, exiba o status e a URL do relatório que abre os resultados no portal 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}`);
No nível da execução, você pode ver contagens agregadas de aprovações e falhas para cada avaliador:
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
Para obter detalhes em nível de linha, liste os itens de saída. Cada resultado inclui o nome do avaliador, o passe ou a falha e uma pontuação:
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);
}
}
Este início rápido registra um conjunto de dados, uma avaliação e um histórico de execução em seu projeto do Foundry. Esses ativos incorrem em pouco ou nenhum custo contínuo.