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.
Important
Bu makalede işaretlenen (önizleme) öğeler şu anda genel önizleme aşamasındadır. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmeyebilir veya kısıtlı özelliklere sahip olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
Orijinal istekleri yeniden oynatmadan, dağıtıma alınan aracılar ve modellerden elde edilen depolanmış yanıtları veya OpenTelemetry izlerini değerlendirin.
Prerequisites
- Bulut değerlendirme önkoşullarını ve istemci kurulumunu tamamlayın.
- Yanıt değerlendirmesi için depolanmış yanıt kimlikleri veya iz değerlendirmesi için Foundry projenize bağlı bir Application Insights kaynağı.
- İzleri değerlendirirken iz verisi gereksinimlerini karşılayan OpenTelemetry spans.
Örneklerde SDK istemcisini ayarlama bölümünde yapılandırılan SDK istemcisi kullanılır.
Etkileşimleri yanıt kimliğine göre değerlendirme
azure_ai_responses veri kaynağı türünü kullanarak yanıt kimliklerine göre Foundry aracısı yanıtlarını alın ve değerlendirin. Bu senaryoyu, belirli agent etkileşimlerini gerçekleştikten sonra değerlendirmek için kullanın.
Tip
Başlamadan önce istemci kurulumunu tamamlayın.
Yanıt kimliği, Bir Foundry aracısı her yanıt oluşturduğunda döndürülen benzersiz bir tanımlayıcıdır. Yanıtlar API'sini kullanarak veya uygulamanızın izleme günlüklerinden aracı etkileşimlerinden yanıt kimlikleri toplayabilirsiniz. ID'leri doğrudan dosya içeriğinde sağlayın.
Important
Aracı yanıtı değerlendirmeleri (azure_ai_responses), yanıt kimlikleri sağlamak için yalnızca file_content destekler.
file_id Kaynak türü desteklenmez ve bir 400 Bad Request hata döndürür.
Yanıt kimliklerini topla
Yanıtlar API'sine yapılan her çağrı, benzersiz id bir alana sahip bir yanıt nesnesi döndürür. Uygulamanızın etkileşimlerinden bu kimlikleri toplayın veya doğrudan oluşturun:
# Generate response IDs by calling a model through the Responses API
response = openai_client.responses.create(
model=model_deployment_name,
input="What is machine learning?",
)
print(response.id) # Example: resp_abc123
Ayrıca, uygulamanızın izleme günlüklerindeki veya izleme işlem hattındaki aracı etkileşimlerinden yanıt kimlikleri de toplayabilirsiniz. Her yanıt kimliği, değerlendirme hizmetinin alabildiği depolanmış yanıtı benzersiz olarak tanımlar.
Değerlendirme oluşturma ve çalıştırma
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
data_source_config = {"type": "azure_ai_source", "scenario": "responses"}
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="violence",
evaluator_name="builtin.violence",
),
]
eval_object = openai_client.evals.create(
name="Agent Response Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
data_source = {
"type": "azure_ai_responses",
"item_generation_params": {
"type": "response_retrieval",
"data_mapping": {"response_id": "{{item.resp_id}}"},
"source": {
"type": "file_content",
"content": [
{"item": {"resp_id": "resp_abc123"}},
{"item": {"resp_id": "resp_def456"}},
]
},
},
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="agent-response-evaluation",
data_source=data_source,
)
Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_agent_response_evaluation.py. Tamamlanma durumunu denetlemek ve sonuçları yorumlamak için bkz. Bulut değerlendirme sonuçlarını alma.
İzleri değerlendirme (önizleme)
Application Insights'ın zaten yakaladığı aracı etkileşimlerini değerlendirin.
azure_ai_traces Veri kaynağı türünü kullanın. Bu senaryo, gerçek üretim trafiğinin dağıtım sonrası değerlendirmesi için kullanışlıdır. İzleme işlem hattınızdan izleri seçer ve herhangi bir isteği yeniden yürütmeden bunlar üzerinde değerlendiriciler çalıştırırsınız.
Important
Microsoft Foundry Agent Service ile oluşturulmayan aracıları (LangChain ve özel çerçeveler dahil) değerlendirmek için önerilen yaklaşım, iz değerlendirmesidir. Ajanınız, Application Insights’a GenAI semantik kurallarına uygun OpenTelemetry span’leri gönderdiği sürece, iz değerlendirmesi etkileşimlerini Foundry ajanları için kullanılabilen aynı değerlendiricileri kullanarak değerlendirebilir.
İzleme değerlendirmesi iki modu destekler:
-
İzleme kimliklerine göre - Application Insights’taki
operation_Iddeğerlerini sağlayarak belirli aracı etkileşimlerini değerlendirin. - Aracı filtresine göre - İzleme kimliklerini el ile toplamadan belirli bir aracı için son izlemeleri otomatik olarak bulun ve değerlendirin.
Tip
Başlamadan önce istemci kurulumunu tamamlayın. Bu senaryo ayrıca , Foundry projenize bağlı bir Application Insights kaynağı gerektirir.
Akıllı örnekleme
İzleme değerlendirmesi, yakalanan her izlemenin değerlendirilmesi yerine değerlendirme için izlemelerin temsili bir alt kümesini seçen akıllı örneklemeyi destekler. İzleme değerlendirmesi çalıştırmasını yapılandırırken Foundry portalında Akıllı örnekleme geçişini açın. Akıllı örnekleme, izleme çeşitliliğini korurken değerlendirme maliyetini azaltır; uç servis taleplerinin, hata yollarının ve çeşitli konuşma desenlerinin değerlendirilen kümeye dahil edilmesini sağlar.
Akıllı örnekleme nasıl çalışır?
Örnekleme algoritması, birden çok aşamada çalışan MinHash en uzak-öncelikli çeşitlilik yaklaşımını kullanır:
- Tam yinelenenlerin kaldırılması - Havuzdaki yinelenen izleri kaldırır.
- Katı filtreler - Değerlendirme için uygun olmayan bozuk oturumları, kırpılmış izleri ve hatalı biçimlendirilmiş araç çağrılarını kaldırır.
- Toplama - İzleme düzeyi sinyallerini birleşik bir gösterimde birleştirir.
- MinHash en uzak ilk seçim - İzlemeler arasındaki benzerliği tahmin etmek için kullanıcı metninin yerelliğe duyarlı karmalarını (MinHash imzaları) hesaplar, ardından kalan havuzdan en benzer olmayan izlemeyi yinelemeli olarak seçer. Her bir sonraki seçim, daha önce seçilmiş tüm izlerden olan mesafeyi en üst düzeye çıkarır.
Bu yaklaşım rastgele örneklemeye kıyasla önemli ölçüde daha yüksek sözcük çeşitliliği ve daha geniş sözlük kapsamı üretir. Bu, değerlendirilen kümenin rastgele örneklemenin kaçırma eğiliminde olduğu nadir, zor ve yeni durumlar dahil olmak üzere tüm aracı etkileşimlerini daha iyi temsil ettiği anlamına gelir.
Akıllı örnekleme özellikle şu alanlarda etkilidir:
- Değerlendirme ve karşılaştırmalar - Değerlendirme puanlarının gerçek dünyadaki çeşitliliği yansıtması için giriş dağılımının kapsamını en üst düzeye çıkarır.
- Dereceli puanlama anahtarı oluşturma - Çeşitli konuşma kalıplarını ortaya çıkararak daha odaklı ve uygulanabilir dereceli puanlama anahtarları üretir.
- Veri kümesi kürasyonunda ince ayarlama - Modellerin daha verimli bir şekilde öğrenmelerine yardımcı olan izlemeleri seçer.
Algoritma, ek API çağrıları olmadan tamamen yerel işlem üzerinde çalışır, bu nedenle değerlendirmenin kendisi dışında ek model çıkarım maliyetlerine neden olmaz.
Akıllı örnekleme örneği
# Eval group for trace-based evaluations
data_source_config = {
"type": "azure_ai_source",
"scenario": "traces",
}
print("Creating trace-based evaluation group")
eval_object = client.evals.create(
name="Trace Evaluation (Agent Smart Filter)",
data_source_config=data_source_config, # type: ignore
testing_criteria=testing_criteria,
)
print(f"Evaluation created (id: {eval_object.id})")
# Compute time window in unix seconds
# Pad end_time by +600s (10 min) to avoid ingestion-delay edge exclusion
now_unix = int(time.time())
end_time = now_unix + 600
start_time = now_unix - (args.lookback_hours * 3600)
# Build trace_source based on mode
trace_source: dict = {
"type": "agent_filter",
"start_time": start_time,
"end_time": end_time,
"max_traces": args.max_traces,
"filter_strategy": "smart_filtering"
}
# Add agent name/version or agent id
trace_source["agent_name"] = agent_name
trace_source["agent_version"] = agent_version
## trace_source["agent_id"] = args.agent_id
data_source = {
"type": "azure_ai_trace_data_source_preview",
"trace_source": trace_source,
}
eval_run = client.evals.runs.create(
eval_id=eval_object.id,
name="trace-evaluation-agent-smart-filter-run",
data_source=data_source, # type: ignore
)
Veri gereksinimlerini izleme
İz değerlendirmesi, aracınızın üretken yapay zeka için OpenTelemetry semantik kurallarını izleyen span'ler üretmesini gerektirir. Değerlendirme hizmeti, özellikle Application Insights'tan izlekleri okurinvoke_agent ve özniteliklerinden konuşma verilerini ayıklar.
Aşağıdaki span öznitelikleri kullanılır:
| Özellik | Zorunlu | Description |
|---|---|---|
gen_ai.operation.name |
Yes |
"invoke_agent" eşit olmalıdır. Hizmet diğer tüm aralıkları görmezden gelir. |
gen_ai.agent.id |
Aracı filtre modu için | Benzersiz ajan tanımlayıcı (biçim: agent-name:version). |
gen_ai.agent.name |
Aracı filtre modu için | İnsan tarafından okunabilir ajan adı. |
gen_ai.input.messages |
Değerlendiriciler için sorgu girişleri |
GenAI anlam kuralları ileti biçimini izleyen giriş iletilerinin JSON dizisi. Rolü user veya system olan iletiler, query ile eşlenir. Rolü assistant veya tool olan iletiler, response ile eşlenir. |
gen_ai.output.messages |
Değerlendiriciler için sorgu girişleri | Model tarafından oluşturulan çıkış iletilerinin JSON dizisi. Tüm çıkış iletileri response ile eşleştirilir. Çıkış ayrıca type: tool_result veya type: tool_call içeriyorsa, tool_calls ile eşlenir. |
gen_ai.tool.definitions |
İsteğe bağlı | Aracın kullanabileceği araç şemalarının JSON dizisi. Yoksa, hizmet araç çağrı iletilerinden araç tanımlarını çıkarsamaya çalışır, ancak çıkarsanan şemalar eksik olabilir. |
gen_ai.conversation.id |
İsteğe bağlı | Konuşma tanımlayıcısı, bağıntı için değerlendirme sonuçlarına geçirilir. |
Note
gen_ai.input.messages ve gen_ai.output.messages boşsa veya eksikse, kalite değerlendiricileri (tutarlılık, akıcılık, ilgili olma, niyet çözümleme) score=None döndürür. Güvenlik değerlendiricileri (şiddet, kendine zarar verme, cinsel, nefret/adaletsizlik) kısmi verilerle puan üretebilir ancak anlamlı sonuçlar üretmeyebilir.
Azure AI Agent Server SDK ile geliştirilen Python aracılar için otomatik span yayını etkinleştirmek üzere [tracing] extrasını ekleyin.
pip install "azure-ai-agentserver-core[tracing]"
İzleme değerlendirmesi için önkoşullar
Genel önkoşullara ek olarak izleme değerlendirmesi şunları gerektirir:
- Foundry projenize bağlı bir Application Insights kaynağı . bkz. Microsoft Foundry'da izlemeyi ayarlama.
- Projenin yönetilen kimliği hem Application Insights kaynağında hem de bağlı Log Analytics çalışma alanında Log Analytics Reader rolüne sahip olmalıdır. İzlemelerinizi depolayan tablolar korunuyorsa (koruma düzeyleri Korumalı olarak ayarlanmışsa), hizmetin korumalı izleme tablolarını okuyabilmesi için aynı kapsamlarda Privileged Monitord Monitoring Data Reader rolünü de atayın.
-
azure-monitor-queryPython paketi (yalnızca izleme kimliklerini el ile topluyorsanız gereklidir).
pip install "azure-ai-projects>=2.2.0" azure-monitor-query
Şu ortam değişkenlerini ayarlayın:
-
APPINSIGHTS_RESOURCE_ID— Application Insights kaynak kimliği (örneğin,/subscriptions/<subscription_id>/resourceGroups/<rg_name>/providers/Microsoft.Insights/components/<resource_name>). -
AGENT_ID— İzleme tümleştirmesi (gen_ai.agent.idözniteliği) tarafından yayılan ajan tanımlayıcısı, izlemeleri filtrelemek için kullanılır. Biçim:agent-name:version. -
TRACE_LOOKBACK_HOURS— (İsteğe bağlı) İzlemeleri sorgularken geriye bakılması gereken saat sayısı. Varsayılan değer1’dır.
Seçenek A: Temsilci filtresine göre değerlendirme
En basit yaklaşım, hizmetin belirli bir aracı için son izlemeleri otomatik olarak bulmasına ve değerlendirmesine izin vermektir. İzleme kimliklerini el ile toplamanız gerekmez.
import os
agent_id = os.environ["AGENT_ID"] # e.g., "my-weather-agent:1"
trace_lookback_hours = int(os.environ.get("TRACE_LOOKBACK_HOURS", "1"))
# Create the evaluation
data_source_config = {
"type": "azure_ai_source",
"scenario": "traces",
}
eval_object = openai_client.evals.create(
name="Agent Trace Evaluation (by agent)",
data_source_config=data_source_config,
testing_criteria=testing_criteria, # See "Set up evaluators" below
)
# Create a run — the service queries App Insights for matching traces
data_source = {
"type": "azure_ai_traces",
"agent_id": agent_id,
"max_traces": 50, # Maximum number of traces to evaluate
"lookback_hours": trace_lookback_hours,
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="agent-trace-eval-run",
data_source=data_source,
)
print(f"Evaluation run started: {eval_run.id}")
Hizmet, invoke_agent etiketine göre gen_ai.agent.id aralıkları filtreler, max_traces benzersiz izleme kimliğine kadar örnekler ve bu izlemelerden gelen tüm aralıkları değerlendirir.
Seçenek B: İzleme kimliklerine göre değerlendirme
Daha fazla denetim için Application Insights'tan belirli izleme kimliklerini toplayın ve değerlendirin. Bu yöntem, uyarılar tarafından işaretlenen veya kalite incelemesi için örneklenen izlemeler gibi seçilmiş bir etkileşim kümesini değerlendirmek istediğinizde kullanışlıdır.
Application Insights'ten izleme kimliklerini toplayın
Aracınızın izlemelerindeki operation_Id değerleri için Application Insights'i sorgulayın. Her operation_Id biri, tam bir ajan etkileşimini temsil eder.
import os
from datetime import datetime, timedelta, timezone
from azure.identity import DefaultAzureCredential
from azure.monitor.query import LogsQueryClient, LogsQueryStatus
appinsights_resource_id = os.environ["APPINSIGHTS_RESOURCE_ID"]
agent_id = os.environ["AGENT_ID"]
trace_query_hours = int(os.environ.get("TRACE_LOOKBACK_HOURS", "1"))
end_time = datetime.now(timezone.utc)
start_time = end_time - timedelta(hours=trace_query_hours)
query = f"""dependencies
| where timestamp between (datetime({start_time.isoformat()}) .. datetime({end_time.isoformat()}))
| extend agent_id = tostring(customDimensions["gen_ai.agent.id"])
| where agent_id == "{agent_id}"
| distinct operation_Id"""
credential = DefaultAzureCredential()
logs_client = LogsQueryClient(credential)
response = logs_client.query_resource(
appinsights_resource_id,
query=query,
timespan=None, # Time range is specified in the query itself
)
trace_ids = []
if response.status == LogsQueryStatus.SUCCESS:
for table in response.tables:
for row in table.rows:
trace_ids.append(row[0])
print(f"Found {len(trace_ids)} trace IDs")
İzleme kimlikleriyle değerlendirme oluştur ve çalıştır
# Create the evaluation
data_source_config = {
"type": "azure_ai_source",
"scenario": "traces",
}
eval_object = openai_client.evals.create(
name="Agent Trace Evaluation (by trace IDs)",
data_source_config=data_source_config,
testing_criteria=testing_criteria, # See "Set up evaluators" below
)
# Create a run using the collected trace IDs
data_source = {
"type": "azure_ai_traces",
"trace_ids": trace_ids,
"lookback_hours": trace_query_hours,
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="agent-trace-eval-run",
metadata={
"agent_id": agent_id,
"start_time": start_time.isoformat(),
"end_time": end_time.isoformat(),
},
data_source=data_source,
)
print(f"Evaluation run started: {eval_run.id}")
Değerlendiricileri ve veri eşlemelerini ayarlama
İzlemeleri değerlendirdiğinizde, hizmet konuşma verilerini OpenTelemetry span özniteliklerinden otomatik olarak ayıklar. Bu alan adlarını doğrudan data_mapping içinde kullanın (diğer senaryolarda kullanılan item. veya sample. ön ekleri olmadan).
| Değişken | Kaynak özniteliği | Description |
|---|---|---|
{{item.query}} |
gen_ai.input.messages (kullanıcı/sistem rolleri) |
İz kaydından çıkarılan kullanıcı sorgusu. |
{{item.response}} |
gen_ai.input.messages (yardımcı/araç rolleri) + gen_ai.output.messages |
Ajandanın yanıtı iz kaydından ayıklanır. |
{{item.tool_definitions}} |
gen_ai.tool.definitions |
Ajan tarafından kullanılabilen araç şemaları. Yalnızca araçla ilgili değerlendiriciler için gereklidir. |
{{item.tool_calls}} |
Yardımcı mesajlardan ayıklanan gen_ai.input.messages / gen_ai.output.messages |
Etkileşim sırasında aracı tarafından yapılan araç çağrıları. Araç değerlendiricileri tarafından kullanılır. Yalnızca araçla ilgili değerlendiriciler için gereklidir. |
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
testing_criteria = [
# Quality evaluators — require query and response from trace data
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="intent_resolution",
evaluator_name="builtin.intent_resolution",
data_mapping={
"query": "{{item.query}}",
"response": "{{item.response}}",
"tool_definitions": "{{item.tool_definitions}}",
},
initialization_parameters={"model": model_deployment_name},
),
# Tool evaluators — assess tool usage quality
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="tool_call_accuracy",
evaluator_name="builtin.tool_call_accuracy",
data_mapping={
"query": "{{item.query}}",
"response": "{{item.response}}",
"tool_calls": "{{item.tool_calls}}",
"tool_definitions": "{{item.tool_definitions}}",
},
initialization_parameters={"model": model_deployment_name},
),
# Safety evaluators — work even with partial trace data
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="violence",
evaluator_name="builtin.violence",
data_mapping={
"query": "{{item.query}}",
"response": "{{item.response}}",
},
initialization_parameters={"threshold": 4},
),
]
Sonraki Adımlar
- Tamamlanma durumunu denetlemek ve sonuçları yorumlamak için bkz. Bulut değerlendirme sonuçlarını alma.
- Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_evaluations_builtin_with_traces.py.