Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Agent Framework, aracı kalitesini, güvenliğini ve doğruluğunu ölçmenize olanak tanıyan yerleşik bir değerlendirme çerçevesi içerir. Geliştirme sırasında hızlı yerel denetimler çalıştırabilir, üretim sınıfı değerlendirme için Azure Yapay Zeka Atölyesi bulut tabanlı değerlendiricilerini kullanabilir veya her ikisini tek bir değerlendirme çalıştırmasında birleştirebilirsiniz.
Değerlendirme çerçevesi birkaç temel ilke çerçevesinde tasarlanmıştır:
- Sağlayıcıdan bağımsız — Temel değerlendirme türleri ve düzenleme işlevleri tüm değerlendirme sağlayıcılarıyla birlikte çalışır.
- Sıfır sürtünme — En az kodla "Bir temsilcim var"dan "Değerlendirme sonuçlarım var" bölümüne gidin.
- Aşamalı açıklama — Basit senaryolar neredeyse sıfır kod gerektirir. Gelişmiş senaryolar aynı temel öğelere dayalıdır.
Temel kavramlar
Değerlendirme çerçevesi üç tür üzerine kurulmuştur:
| Türü | Amaç |
|---|---|
| EvalItem | Değerlendirilecek tek bir öğe — konuşmanın bütününü kapsar ve bölme stratejisi kullanarak sorgu/yanıt türetir. |
| Değerlendir -ici | Yerel denetimler, Azure Yapay Zeka Atölyesi veya herhangi bir özel uygulama gibi öğeleri puanlayan bir sağlayıcı. |
| EvalResults | Değerlendirme koşumundan elde edilen sonuçlar — başarı/başarısızlık sayıları, öğe bazında detaylar ve isteğe bağlı portal bağlantıları. |
.NET'de değerlendirme çerçevesi IAgentEvaluator arabirimini uygular ve AIAgent ve Run üzerindeki uzantı yöntemleri aracılığıyla koordine edilir.
Çekirdek türleri Microsoft.Agents.AI ad alanında yer alır:
using Microsoft.Agents.AI;
Python'da değerlendirme çerçevesi, çekirdek agent_framework paketinin bir parçasıdır. Değerlendiriciler Evaluator protokolünü uygular ve orkestrasyon evaluate_agent() ve evaluate_workflow() işlevleri aracılığıyla sağlanır.
from agent_framework import (
evaluate_agent,
evaluate_workflow,
EvalItem,
EvalResults,
LocalEvaluator,
)
Yerel değerlendiriciler
LocalEvaluator IÇ döngü geliştirme, CI duman testleri ve hızlı yineleme için ideal olan API çağrıları olmadan yerel olarak denetimleri çalıştırır. Herhangi bir sayıda denetim işlevini kabul eder ve her öğeye her birini uygular.
Yerleşik denetimler
Agent Framework, yaygın senaryolar için yerleşik denetimlerle birlikte sunulmaktadır.
using Microsoft.Agents.AI;
var local = new LocalEvaluator(
EvalChecks.KeywordCheck("weather", "temperature"), // Response must contain these keywords
EvalChecks.ToolCalledCheck("get_weather") // Agent must have called this tool
);
Özel işlev değerlendiricileri
Herhangi bir işlevi değerlendirici denetimi olarak sarmak için FunctionEvaluator.Create() kullanın. İhtiyacınız olan verilere bağlı olarak birden çok aşırı yükleme kullanılabilir:
using Microsoft.Agents.AI;
var local = new LocalEvaluator(
// Simple: check only the response text
FunctionEvaluator.Create("is_concise",
(string response) => response.Split(' ').Length < 500),
// With expected output: compare against ground truth
FunctionEvaluator.Create("mentions_city",
(string response, string? expectedOutput) =>
expectedOutput != null && response.Contains(expectedOutput, StringComparison.OrdinalIgnoreCase)),
// Full context: access the complete EvalItem
FunctionEvaluator.Create("used_search",
(EvalItem item) => item.Conversation.Any(m =>
m.Text?.Contains("search", StringComparison.OrdinalIgnoreCase) == true))
);
Yerleşik denetimler
Agent Framework, yaygın senaryolar için yerleşik denetimlerle birlikte sunulmaktadır.
| Kontrol | Ne yapar? |
|---|---|
keyword_check(*keywords) |
Yanıt, belirtilen tüm anahtar sözcükleri içermelidir |
tool_called_check(*tool_names) |
Temsilci belirtilen araçları çağırmış olmalıdır |
tool_calls_present |
Konuşmada tüm expected_tool_calls adlar görünür (sıralanmamış, ek değerler sorun değil) |
tool_call_args_match |
Beklenen araç çağrıları ad ve bağımsız değişkenlerle eşleşmektedir (bağımsız değişkenler üzerinde alt küme eşleşmesi) |
from agent_framework import (
LocalEvaluator,
keyword_check,
tool_called_check,
tool_calls_present,
tool_call_args_match,
)
local = LocalEvaluator(
keyword_check("weather", "temperature"), # Response must contain these keywords
tool_called_check("get_weather"), # Agent must have called this tool
tool_calls_present, # All expected tool call names were made
tool_call_args_match, # Expected tool calls match on name + args
)
Özel işlev değerlendiricileri
@evaluator Herhangi bir işlevi değerlendirici denetimi olarak sarmak için dekoratör kullanın. İşlevin parametre adları , içinden EvalItemhangi verileri alacağını belirler:
from agent_framework import evaluator, LocalEvaluator
@evaluator
def is_concise(response: str) -> bool:
"""Check response is under 500 words."""
return len(response.split()) < 500
@evaluator
def mentions_city(response: str, expected_output: str) -> bool:
"""Check response contains the expected city name."""
return expected_output.lower() in response.lower()
@evaluator
def used_tools(conversation: list, tools: list) -> float:
"""Score based on tool usage. Returns 0.0–1.0 (>= 0.5 passes)."""
tool_calls = [c for m in conversation for c in (m.contents or []) if c.type == "function_call"]
return min(len(tool_calls) / max(len(tools), 1), 1.0)
local = LocalEvaluator(is_concise, mentions_city, used_tools)
Desteklenen parametre adları: query, response, expected_output, expected_tool_calls, , conversation, toolscontext.
Dönüş türleri: bool, float (≥ 0,5 = geçer), dict ile score veya passed anahtarıyla, veya CheckResult. Async fonksiyonlar otomatik olarak işlenir.
Azure Yapay Zeka Atölyesi değerlendiricileri
FoundryEvals, bulut tabanlı LLM-as-judge değerlendirmesi için Azure Yapay Zeka Atölyesi değerlendirme hizmetine bağlanır. Sonuçlar, dökümhane portalında panolar ve karşılaştırma görünümleri ile görüntülenebilir.
using Microsoft.Agents.AI.AzureAI;
var foundry = new FoundryEvals(chatConfiguration, FoundryEvals.Relevance, FoundryEvals.Coherence);
from agent_framework.foundry import FoundryEvals
evals = FoundryEvals(
project_client=project_client,
model="gpt-4o",
evaluators=[FoundryEvals.RELEVANCE, FoundryEvals.COHERENCE],
)
Varsayılan olarak, FoundryEvalsilgi, tutarlılık ve görev uyumluluğu değerlendiricilerini çalıştırır. Öğeler araç tanımları içerdiğinde, otomatik olarak araç çağrısı doğruluğu ekler.
Kullanılabilir değerlendiriciler
FoundryEvals tüm yerleşik değerlendirici adları için sabitler sağlar:
| Kategori | Değerlendiriciler |
|---|---|
| Aracı davranışı |
intent_resolution, task_adherence, task_completion, task_navigation_efficiency |
| Araç kullanımı |
tool_call_accuracy, tool_selection, tool_input_accuracy, tool_output_utilization, , tool_call_success |
| Kalite |
coherence, fluency, relevance, , groundedness, response_completeness, similarity |
| Safety |
violence, sexual, self_harm, hate_unfairness |
Uyarı
FoundryEvals, yapay zeka modeli dağıtımına sahip bir Azure Yapay Zeka Atölyesi projesi gerektirir.
model parametresi, hangi modelin LLM hakemi olarak kullanılacağını belirtir.
Aracıyı değerlendirme
En basit değerlendirme senaryosu, test sorgularına karşı bir aracı çalıştırır ve yanıtları puanlar. İstatistiksel olarak anlamlı değerlendirme için birden çok farklı sorgu sağlayın.
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;
var foundry = new FoundryEvals(chatConfiguration, FoundryEvals.Relevance, FoundryEvals.Coherence);
AgentEvaluationResults results = await agent.EvaluateAsync(
new[]
{
"What's the weather in Seattle?",
"Plan a weekend trip to Portland",
"What restaurants are near Pike Place?",
},
foundry);
results.AssertAllPassed(); // Throws if any item failed
EvaluateAsync, AIAgent üzerinde bir uzantı yöntemidir. Sorgu başına bir kez ajanı çalıştırır, her etkileşimi EvalItem öğesine dönüştürür ve toplu işlemi değerlendiriciye iletir.
from agent_framework import evaluate_agent
from agent_framework.foundry import FoundryEvals
evals = FoundryEvals(
project_client=project_client,
model="gpt-4o",
evaluators=[FoundryEvals.RELEVANCE, FoundryEvals.COHERENCE],
)
results = await evaluate_agent(
agent=my_agent,
queries=[
"What's the weather in Seattle?",
"Plan a weekend trip to Portland",
"What restaurants are near Pike Place?",
],
evaluators=evals,
)
for r in results:
print(f"{r.provider}: {r.passed}/{r.total}")
r.raise_for_status() # Raises EvalNotPassedError if any item failed
evaluate_agent aracıyı sorgu başına bir kez çalıştırır, her etkileşimi öğesine EvalItemdönüştürür ve toplu işlemi değerlendiriciye geçirir. Değerlendirici sağlayıcısı başına bir tane EvalResults döndürür.
Yinelemelerle tutarlılığı ölçme
Belirlenemeyen davranışı algılamak için her sorguyu birden çok kez çalıştırın:
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { "What's the weather in Seattle?" },
foundry,
numRepetitions: 3); // Each query runs 3 times independently
// Results contain 3 items (1 query × 3 repetitions)
results = await evaluate_agent(
agent=my_agent,
queries=["What's the weather in Seattle?"],
evaluators=evals,
num_repetitions=3, # Each query runs 3 times independently
)
# Results contain 3 items (1 query × 3 repetitions)
Beklenen sonuçlarla değerlendirme
Doğruluğu değerlendirmek için beklenen gerçek yanıtlar sağlayın. Beklenen çıkışlar sorgularla konum olarak eşleştirilir:
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { "What's 2+2?", "Capital of France?" },
foundry,
expectedOutput: new[] { "4", "Paris" });
Beklenen araç çağrılarını da belirtebilirsiniz:
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { "What's the weather in NYC?" },
new LocalEvaluator(EvalChecks.ToolCalledCheck("get_weather")),
expectedToolCalls: new[]
{
new[] { new ExpectedToolCall("get_weather") },
});
from agent_framework import evaluate_agent, ExpectedToolCall
results = await evaluate_agent(
agent=my_agent,
queries=["What's 2+2?", "Capital of France?"],
expected_output=["4", "Paris"],
evaluators=evals,
)
Beklenen araç çağrılarını da belirtebilirsiniz:
results = await evaluate_agent(
agent=my_agent,
queries=["What's the weather in NYC?"],
expected_tool_calls=[ExpectedToolCall("get_weather", {"location": "NYC"})],
evaluators=local,
)
Önceden var olan yanıtları değerlendirme
Günlüklerden veya önceki çalıştırmalardan zaten aracı yanıtlarınız varsa, aracıyı yeniden çalıştırmadan bunları doğrudan değerlendirin:
var response = await agent.RunAsync(new[] { new ChatMessage(ChatRole.User, "What's the weather?") });
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { response },
new[] { "What's the weather?" },
foundry);
from agent_framework import Message, evaluate_agent
response = await agent.run([Message("user", ["What's the weather?"])])
results = await evaluate_agent(
agent=agent,
responses=response,
queries="What's the weather?",
evaluators=evals,
)
Konuşma bölme stratejileri
Çok aşamalı konuşmalar, değerlendirme için sorgu ve yanıt yarılarına bölünmelidir. Neleri değerlendirdiğiniz, bölme yönteminizi belirler.
| Strateji | Davranış | En iyi kullanım alanı: |
|---|---|---|
| Son dönüş (varsayılan) | Son kullanıcı mesajında bölün. Buna kadar olan her şey sorgu bağlamıdır; sonrasındaki her şey yanıttır. | Belirli bir noktada yanıt kalitesi |
| Tam | İlk kullanıcı iletisi sorgudur; geri kalanın tamamı yanıttır. | Görev tamamlama ve genel yörünge |
| Dönüş başına | Her kullanıcı→assistant exchange, kümülatif bağlamla bağımsız olarak puanlanır. | Ayrıntılı analiz |
// Full conversation as context
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { "Plan a 3-day trip to Paris" },
foundry,
splitter: ConversationSplitters.Full);
// Per-turn: each exchange scored independently
var items = EvalItem.PerTurnItems(conversation);
var perTurnResults = await evaluator.EvaluateAsync(items);
Özel bir bölücü de uygulamak için IConversationSplitter uygulayabilirsiniz.
public class SplitBeforeToolCall : IConversationSplitter
{
public (IReadOnlyList<ChatMessage> QueryMessages, IReadOnlyList<ChatMessage> ResponseMessages) Split(
IReadOnlyList<ChatMessage> conversation)
{
// Custom split logic
for (int i = 0; i < conversation.Count; i++)
{
if (conversation[i].Text?.Contains("tool_call") == true)
return (conversation.Take(i).ToList(), conversation.Skip(i).ToList());
}
return ConversationSplitters.LastTurn.Split(conversation);
}
}
from agent_framework import evaluate_agent, ConversationSplit
# Full conversation as context
results = await evaluate_agent(
agent=agent,
queries=["Plan a 3-day trip to Paris"],
evaluators=evals,
conversation_split=ConversationSplit.FULL,
)
# Per-turn: each exchange scored independently
from agent_framework import EvalItem
items = EvalItem.per_turn_items(conversation)
# Pass items directly to an evaluator
per_turn_results = await evaluator.evaluate(items)
Ayrıca özel bir bölücü de sağlayabilirsiniz; konuşma alıp döndüren (query_messages, response_messages)herhangi bir çağrılabilir öğe:
def split_before_memory(conversation):
"""Split just before a memory-retrieval tool call."""
for i, msg in enumerate(conversation):
for c in msg.contents or []:
if c.type == "function_call" and c.name == "retrieve_memory":
return conversation[:i], conversation[i:]
# Fallback to default
return EvalItem._split_last_turn_static(conversation)
results = await evaluate_agent(
agent=agent,
queries=queries,
evaluators=evals,
conversation_split=split_before_memory,
)
İş akışlarını değerlendirme
Her bir aracıya göre detaylı analiz ile çok aracılı iş akışlarını değerlendirin. Çerçeve, her alt aracının etkileşimlerini ayıklar ve iş akışının genel çıkışıyla birlikte bunları ayrı ayrı değerlendirir.
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.AzureAI;
Run run = await workflowRunner.RunAsync(workflow, "Plan a trip to Paris");
AgentEvaluationResults results = await run.EvaluateAsync(
new FoundryEvals(chatConfiguration, FoundryEvals.Relevance));
Console.WriteLine($"Overall: {results.Passed}/{results.Total}");
// Per-agent breakdown
if (results.SubResults != null)
{
foreach (var (name, sub) in results.SubResults)
{
Console.WriteLine($" {name}: {sub.Passed}/{sub.Total}");
}
}
results.AssertAllPassed();
from agent_framework import evaluate_workflow
from agent_framework.foundry import FoundryEvals
evals = FoundryEvals(project_client=project_client, model="gpt-4o")
result = await workflow.run("Plan a trip to Paris")
eval_results = await evaluate_workflow(
workflow=workflow,
workflow_result=result,
evaluators=evals,
)
for r in eval_results:
print(f"{r.provider}: {r.passed}/{r.total}")
for name, sub in r.sub_results.items():
print(f" {name}: {sub.passed}/{sub.total}")
queries değerini doğrudan da geçirebilirsiniz ve framework iş akışını sizin için çalıştırır.
eval_results = await evaluate_workflow(
workflow=workflow,
queries=["Plan a trip to Paris", "Book a flight to London"],
evaluators=evals,
)
Birden çok değerlendiriciyi karıştırma
Tek bir değerlendirmede yerel denetimleri ve bulut tabanlı değerlendiricileri birlikte çalıştırın. Her değerlendirici kendi EvalResults üretir.
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.AzureAI;
IReadOnlyList<AgentEvaluationResults> results = await agent.EvaluateAsync(
new[] { "What's the weather in Seattle?" },
evaluators: new IAgentEvaluator[]
{
new LocalEvaluator(
EvalChecks.KeywordCheck("weather"),
FunctionEvaluator.Create("is_helpful", (string r) => r.Split(' ').Length > 10)),
new FoundryEvals(chatConfiguration, FoundryEvals.Relevance, FoundryEvals.Coherence),
});
// results[0] = local evaluator results
// results[1] = Foundry evaluator results
foreach (var r in results)
{
Console.WriteLine($"{r.Provider}: {r.Passed}/{r.Total}");
}
from agent_framework import evaluate_agent, evaluator, LocalEvaluator, keyword_check
from agent_framework.foundry import FoundryEvals
@evaluator
def is_helpful(response: str) -> bool:
return len(response.split()) > 10
foundry = FoundryEvals(
project_client=project_client,
model="gpt-4o",
evaluators=[FoundryEvals.RELEVANCE, FoundryEvals.COHERENCE],
)
results = await evaluate_agent(
agent=agent,
queries=["What's the weather in Seattle?"],
evaluators=[
LocalEvaluator(is_helpful, keyword_check("weather")),
foundry,
],
)
# results[0] = local evaluator results
# results[1] = Foundry evaluator results
for r in results:
print(f"{r.provider}: {r.passed}/{r.total}")
MEAI değerlendiricileri
.NET değerlendirme çerçevesi, Microsoft.Extensions.AI.Evaluation değerlendiricileri ile doğrudan entegre olur. MEAI'den kalite ve güvenlik değerlendiricileri herhangi bir bağdaştırıcı olmadan çalışır:
using Microsoft.Extensions.AI.Evaluation;
using Microsoft.Extensions.AI.Evaluation.Quality;
using Microsoft.Extensions.AI.Evaluation.Safety;
// Quality evaluators
AgentEvaluationResults results = await agent.EvaluateAsync(
new[] { "What's the weather?" },
new CompositeEvaluator(
new RelevanceEvaluator(),
new CoherenceEvaluator(),
new GroundednessEvaluator()),
chatConfiguration: new ChatConfiguration(evalClient));
// Safety evaluators
AgentEvaluationResults safetyResults = await agent.EvaluateAsync(
new[] { "What's the weather?" },
new ContentHarmEvaluator(),
chatConfiguration: new ChatConfiguration(evalClient));
Tip
MEAI değerlendiricilerini kullanırken, değerlendirme modeli için yapılandırılmış bir sohbet istemcisiyle bir chatConfiguration parametre sağlayın. Bu istemci, LLM-as-Judge değerlendiricileri tarafından yanıtları puanlamak için kullanılır.
Uyarı
Bu özellik için Go desteği yakında sunulacaktır. En son durum için bkz. Agent Framework Go deposu .