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.
Bu makalede, bir test veri kümesinde ön dağıtım testi için bulutta değerlendirme çalıştırmayı öğreneceksiniz.
Bulut değerlendirmelerini, özellikle büyük ölçekte test ederken, değerlendirmeleri sürekli tümleştirme ve sürekli teslim (CI/CD) işlem hatlarıyla tümleştirirken veya dağıtım öncesi test gerçekleştirirken çoğu senaryo için kullanın. Değerlendirmelerin bulutta çalıştırılması, yerel işlem altyapısını yönetme gereksinimini ortadan kaldırır ve büyük ölçekli, otomatikleştirilmiş test iş akışlarını destekler. Ayrıca değerlendirmeleri yinelenen olarak çalışacak şekilde zamanlayabilir veya üretimde örneklenen aracı yanıtlarını otomatik olarak değerlendirmek için sürekli değerlendirme ayarlayabilirsiniz.
Bulut değerlendirme sonuçları Dökümhane projenizde depolanır. Portalda sonuçları gözden geçirebilir, SDK aracılığıyla alabilir veya bağlıysa Application Insights'a yönlendirebilirsiniz. Bulut değerlendirmesi, tüm Microsoft tarafından seçilmiş yerleşik değerlendiriciler ve kendi özel değerlendiricilerinizi destekler. Değerlendiriciler, değerlendirici kataloğunda aynı proje kapsamı, rol tabanlı erişim denetimiyle yönetilir.
Ipucu
Çalıştırılabilir örneklerin tamamı için GitHub Python SDK değerlendirme örnekleri bakın.
Bulut değerlendirmesi nasıl çalışır?
Bulut değerlendirmesinin üç adımı vardır:
- Değerlendirilecek öğeleri tanımlayın. Veri şeklinizi (
data_source_config) ve puanlayan değerlendiricileri (test ölçütleri) açıklayın. - Değerlendirmeyi oluşturun. komutunu kullanarak
openai_client.evals.create()tanımı gönderin. - Çalıştırın ve sonuçları okuyun.
openai_client.evals.runs.create()kullanarak bir çalıştırma başlatın, tamamlanana kadar düzenli olarak denetleyin ve puanlanmış sonuçları okuyun. Sonuç şeması için bkz. Sonuçları alma .
Bu bölümün geri kalanında, 1. adım için girdiler ele alınmaktadır: bir senaryo seçme, ardından değerlendiricileri seçme.
Başlangıç noktanızı seçin
Mevcut veri kümesi
Bir dosyada (veya sorgular artı temel doğru) toplanan sorgularınız ve yanıtlarınız varsa ve yalnızca Foundry'nin bunları puanlamasını istiyorsanız bu yolu kullanın. JSONL hem sıra düzeyi satırları hem de konuşma düzeyi girişleri destekler; CSV yalnızca sıra düzeyidir.
| Senaryo | Ne zaman kullanılır? | Veri kaynağı türü |
|---|---|---|
| Sıra düzeyi veri kümesi değerlendirmesi | Her satır, isteğe bağlı olarak query veya / ile birlikte bir responsecontextground_truth çiftidir. |
jsonl Veya csv |
| Konuşma düzeyinde veri kümesi değerlendirmesi (önizleme) | Her satır, messages dizisi olarak ifade edilen bir konuşmadır. |
jsonl |
Foundry veya Application Insights'taki veriler
Ajanınız zaten çalışıyorsa ve gerçekte olanları değerlendirmek istiyorsanız bu yolu kullanın. Verileri dışarı taşımak yerine, Foundry'yi verilerin zaten bulunduğu konuma yönlendirirsiniz; bunu da Foundry yanıt kimliği, Application Insights izi veya konuşma kimliğiyle yaparsınız.
| Senaryo | Ne zaman kullanılır? | Veri kaynağı türü |
|---|---|---|
| Aracı yanıt değerlendirmesi | Ajanınız Foundry'de çalışıyor ve puanlayacağınız yanıt kimlikleriniz var. | azure_ai_responses |
| Sıra düzeyi izleme değerlendirmesi (önizleme) | Aracınız, LangChain veya özel OpenTelemetry izleme aracıları gibi Foundry olmayan çerçeveler de dahil olmak üzere Application Insights'a OpenTelemetry izlemeleri yayar. Her iz bağımsız olarak puanlanır. | azure_ai_trace_data_source_preview |
| Konuşma düzeyi izleme değerlendirmesi (önizleme) | Aynı izleme kaynakları, ancak konuşmaların tamamını konuşma kimliğine göre veya örneklemeyle ajan filtresi kullanarak puanlayın. | azure_ai_trace_data_source_preview |
Yanıtsız girişler
Girişlere sahip olduğunuzda ancak henüz yanıt vermediğinizde bu yolu kullanın. Foundry, değerlendirme sırasında bir model veya ajan hedefi için yanıtlar oluşturur, ardından bunları puanlar. Girişinizin sorgular (bireysel dönüşler olarak gönderilir) veya senaryo açıklamaları (konuşma düzeyi etkileşimi yönlendirmek için kullanılır) olup olmadığına bağlı olarak bir satır seçin.
| Senaryo | Ne zaman kullanılır? | Veri kaynağı / hedef |
|---|---|---|
| Model hedef tamamlamaları | Sorgularınız var ve bir model dağıtımından gelen yanıtları değerlendirmek istiyorsunuz. |
azure_ai_target_completions → azure_ai_model |
| Aracı hedef tamamlamaları | Sorgularınız var ve bir Foundry aracısından gelen yanıtları değerlendirmek istiyorsunuz. |
azure_ai_target_completions → azure_ai_agent |
| Konuşma benzetimi (önizleme) | Senaryo açıklamalarınız vardır (sorgu içermez); Foundry, ajanla konuşma düzeyinde etkileşime giren bir kullanıcıyı simüle eder. |
azure_ai_target_completions → azure_ai_agent |
Henüz veri yok
Yeni bir model veya aracı oluştururken ve herhangi bir giriş toplamadığınızda bu yolu kullanın. Dökümhane sıfırdan test verilerini oluşturur- geniş kalite kapsamı için yapay sorgular veya güvenlik testi için saldırgan istemler seçin.
| Senaryo | Ne zaman kullanılır? | Veri kaynağı / hedef |
|---|---|---|
| Yapay veri değerlendirmesi (önizleme) | Elle yazabileceğinizin ötesinde nitelikli bir kapsama istersiniz. Foundry test sorguları oluşturur, bunları hedefe gönderir ve yanıtları puanlar. |
azure_ai_synthetic_data_gen_preview
azure_ai_model→ veyaazure_ai_agent |
| Kırmızı takım değerlendirmesi | Otomatik adversarial testler istiyorsunuz - Foundry, jailbreak'ler ve zararlı içerik istemleri oluşturur ve hedefin verdiği yanıtları puanlar. |
azure_ai_red_team
azure_ai_model→ veyaazure_ai_agent |
Değerlendiricileri seçme
Her senaryo, sütun eşlemeleri aracılığıyla değerlendiricileri verilerinizdeki alanlara bağlar. Kullanılabilir alanlar veri kaynağına bağlıdır. Veri kümesi senaryoları özel öğe alanlarınızı kullanıma sunarken, hedef tarafından oluşturulan senaryolar örnek şema aracılığıyla modeli veya aracı yanıtını da kullanıma sunar. Bu makalenin ilerleyen bölümlerindeki her senaryoya ilişkin alt bölümler, her bir durum için sütun eşlemelerini gösterir.
Kullanılabilir değerlendiricilere genel bakış ve bunları seçme hakkında bilgi için bkz. yerleşik değerlendiriciler ve özel değerlendiriciler.
Önkoşullar
Sohbet tamamlanmasını destekleyen bir GPT modeline sahip Azure OpenAI dağıtımı (örneğin,
gpt-5-mini).Foundry Kullanıcısı rolü, Foundry projesinde.
Önemli
Foundry RBAC rolleri yakın zamanda yeniden adlandırıldı. Foundry User, Foundry Owner, Foundry Hesabı Sahibi ve Foundry Project Manager daha önce Azure Yapay Zeka Kullanıcısı, Azure Yapay Zeka Sahibi, Azure Yapay Zeka Hesabı Sahibi ve Azure Yapay Zeka Project Yöneticisi olarak adlandırıldı. Yeniden adlandırma kullanıma sunulmaya devam ederken bazı yerlerde önceki adları görmeye devam edebilirsiniz. Rol kimlikleri ve temel izinler yeniden adlandırma ile değiştirilmez.
İsteğe bağlı olarak, değerlendirmeleri çalıştırmak için kendi depolama hesabınızı kullanabilirsiniz .
Not
Bazı değerlendirme özelliklerinin bölgesel kısıtlamaları vardır. Ayrıntılar için desteklenen bölgelere bakın.
Kullanmaya başlama
SDK'yı yükleyin ve istemcinizi ayarlayın:
pip install "azure-ai-projects>=2.2.0"
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from openai.types.eval_create_params import DataSourceConfigCustom
from openai.types.evals.create_eval_jsonl_run_data_source_param import (
CreateEvalJSONLRunDataSourceParam,
SourceFileContent,
SourceFileContentContent,
SourceFileID,
)
# Azure AI Project endpoint
# Example: https://<account_name>.services.ai.azure.com/api/projects/<project_name>
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
# Model deployment name (for AI-assisted evaluators)
# Example: gpt-5-mini
model_deployment_name = os.environ.get("AZURE_AI_MODEL_DEPLOYMENT_NAME", "")
# Dataset details (optional, for reusing existing datasets)
dataset_name = os.environ.get("DATASET_NAME", "")
dataset_version = os.environ.get("DATASET_VERSION", "1")
# Create the project client
project_client = AIProjectClient(
endpoint=endpoint,
credential=DefaultAzureCredential(),
)
# Get the OpenAI client for evaluation API
openai_client = project_client.get_openai_client()
Giriş verilerini hazırlama
Çoğu değerlendirme senaryosu için giriş verileri gerekir. Verileri iki yolla sağlayabilirsiniz:
Veri kümesini karşıya yükleme (önerilen)
Foundry projenizde sürüme sahip bir veri kümesi oluşturmak için bir JSONL veya CSV dosyası yükleyin. Veri kümeleri sürüm oluşturma ve birden çok değerlendirme çalıştırması arasında yeniden kullanımı destekler. Üretim testi ve CI/CD iş akışları için bu yaklaşımı kullanın.
Değerlendiricilerinizin ihtiyaç duyduğu alanları içeren satır başına bir JSON nesnesi içeren bir JSONL dosyası hazırlayın:
{"query": "What is machine learning?", "response": "Machine learning is a subset of AI.", "ground_truth": "Machine learning is a type of AI that learns from data."}
{"query": "Explain neural networks.", "response": "Neural networks are computing systems inspired by biological neural networks.", "ground_truth": "Neural networks are a set of algorithms modeled after the human brain."}
Veya değerlendirici alanlarınızla eşleşen sütun üst bilgilerine sahip bir CSV dosyası hazırlayın:
query,response,ground_truth
What is machine learning?,Machine learning is a subset of AI.,Machine learning is a type of AI that learns from data.
Explain neural networks.,Neural networks are computing systems inspired by biological neural networks.,Neural networks are a set of algorithms modeled after the human brain.
# Upload a local JSONL file. Skip this step if you already have a dataset registered.
data_id = project_client.datasets.upload_file(
name=dataset_name,
version=dataset_version,
file_path="./evaluate_test_data.jsonl",
).id
Satır içi veri sağla
Küçük test kümeleriyle hızlı denemeler yapmak veya aracı yanıtlarının değerlendirilmesi gibi satır içi veri gerektiren senaryolar için, verileri file_content kullanarak doğrudan değerlendirme isteğinde sağlayın. Aracı yanıtı değerlendirmeleri için desteklenen file_content tek kaynak türüdür.
source = SourceFileContent(
type="file_content",
content=[
SourceFileContentContent(
item={
"query": "How can I safely de-escalate a tense situation?",
"ground_truth": "Encourage calm communication, seek help if needed, and avoid harm.",
}
),
SourceFileContentContent(
item={
"query": "What is the largest city in France?",
"ground_truth": "Paris",
}
),
],
)
Veri kaynağı yapılandırmanızda bir çalışma oluştururken, source değerini "source" alanı olarak geçirin. Aşağıdaki senaryo bölümleri varsayılan olarak kullanılır file_id .
Senaryoya göre kaynak türü desteği
Tüm senaryolar her iki kaynak türünü de desteklemez. Aşağıdaki matris, her senaryonun hangi kaynak türünü desteklediğini gösterir.
| Senaryo | file_id |
file_content |
|---|---|---|
Veri kümesi (jsonl) |
Evet | Evet |
CSV (csv) |
Evet | Evet |
| Model veya ajan hedefi | Evet | Evet |
Temsilci yanıtı (azure_ai_responses) |
Hayır | Evet |
İzleme (azure_ai_traces) |
N/A | N/A |
| Yapay veriler (önizleme) | N/A | N/A |
Veri kümesi değerlendirmesi
Veri kaynağı türünü kullanarak JSONL dosyasındaki önceden hesaplanan yanıtları değerlendirin jsonl . Bu senaryo, zaten model çıkışlarınız olduğunda ve bunların kalitesini değerlendirmek istediğinizde kullanışlıdır.
Ipucu
Başlamadan önce Başlangıç Kılavuzu ve Veri Hazırlığı'nı tamamlayın.
Veri şemasını ve değerlendiricileri tanımlama
JSONL alanlarınızla eşleşen şemayı belirtin ve çalıştırılacak değerlendiricileri (test ölçütleri) seçin. Giriş verilerinizdeki data_mapping alanlarını, {{item.field}} söz dizimi kullanarak değerlendirici parametrelerine bağlamak için kullanın. Her değerlendirici için her zaman gerekli giriş alanlarına ekleyin data_mapping . Alan adlarınız JSONL dosyanızdaki adlarla eşleşmelidir; örneğin, verileriniz "question" yerine "query"kullanıyorsa eşlemede kullanın "{{item.question}}" . Değerlendirici başına gerekli parametreler için bkz. yerleşik değerlendiriciler.
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"query": {"type": "string"},
"response": {"type": "string"},
"ground_truth": {"type": "string"},
},
"required": ["query", "response", "ground_truth"],
},
)
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"model": model_deployment_name
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"initialization_parameters": {
"model": model_deployment_name
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "f1",
"evaluator_name": "builtin.f1_score",
"data_mapping": {
"response": "{{item.response}}",
"ground_truth": "{{item.ground_truth}}",
},
},
]
Değerlendirme oluşturma ve çalıştırma
Değerlendirmeyi oluşturun, ardından karşıya yüklediğiniz veri kümesi üzerinde bir çalıştırma başlatın. Veri kümesindeki her satırda her değerlendiriciyi çalıştıran işlem yürütülür.
# Create the evaluation
eval_object = openai_client.evals.create(
name="dataset-evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a run using the uploaded dataset
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="dataset-run",
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=data_id,
),
),
)
Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_evaluations_builtin_with_dataset_id.py. Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
CSV veri kümesi değerlendirmesi
Veri kaynağı türünü kullanarak bir CSV dosyasındaki önceden derlenmiş yanıtları değerlendirin csv . Bu senaryo , veri kümesi değerlendirmesiyle aynı şekilde çalışır ancak JSONL yerine CSV dosyalarını kabul eder. Verileriniz zaten elektronik tablo veya tablo biçimindeyken CSV kullanın.
Ipucu
Başlamadan önce Başlangıç Kılavuzu ve Veri Hazırlığı'nı tamamlayın.
CSV dosyası hazırlama
Değerlendiricilerinizin ihtiyaç duyduğu alanlarla eşleşen sütun üst bilgilerine sahip bir CSV dosyası oluşturun. Her satır bir test çalışmalarını temsil eder.
query,response,context,ground_truth
What is cloud computing?,Cloud computing delivers computing services over the internet.,Cloud computing is a technology for on-demand resource delivery.,Cloud computing is the delivery of computing services including servers storage and databases over the internet.
What is machine learning?,Machine learning is a subset of AI that learns from data.,Machine learning is a branch of artificial intelligence.,Machine learning is a type of AI that enables computers to learn from data without being explicitly programmed.
Explain neural networks.,Neural networks are computing systems inspired by biological neural networks.,Neural networks are used in deep learning.,Neural networks are a set of algorithms modeled after the human brain designed to recognize patterns.
Yükle ve çalıştır
CSV dosyasını veri kümesi olarak karşıya yükleyin. Ardından, veri kaynağı türünü kullanarak csv bir değerlendirme oluşturun. Şema tanımı ve değerlendirici yapılandırması, JSONL değerlendirmeleriyle aynıdır. Tek fark, veri kaynağındaki farktır "type": "csv" .
# Upload the CSV file
data_id = project_client.datasets.upload_file(
name="eval-csv-data",
version="1",
file_path="./evaluation_data.csv",
).id
# Define the schema matching your CSV columns
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"query": {"type": "string"},
"response": {"type": "string"},
"context": {"type": "string"},
"ground_truth": {"type": "string"},
},
"required": [],
},
include_sample_schema=True,
)
# Define evaluators with data mappings to CSV columns
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
"initialization_parameters": {"model": model_deployment_name},
},
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
"initialization_parameters": {"model": model_deployment_name},
},
{
"type": "azure_ai_evaluator",
"name": "f1",
"evaluator_name": "builtin.f1_score",
},
]
# Create the evaluation
eval_object = openai_client.evals.create(
name="CSV evaluation with built-in evaluators",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a run using the CSV data source type
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="csv-evaluation-run",
data_source={
"type": "csv",
"source": {
"type": "file_id",
"id": data_id,
},
},
)
Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Model hedef değerlendirmesi
Çalışma zamanında dağıtılmış bir modele sorgular gönderin. Yanıtları, azure_ai_target_completions veri kaynağı türünü azure_ai_model hedefle kullanarak değerlendirin. Giriş verileriniz sorgular içeriyor. Model yanıtlar oluşturur ve siz de bunu değerlendirirsiniz.
Ipucu
Başlamadan önce Başlangıç Kılavuzu ve Veri Hazırlığı'nı tamamlayın.
İleti şablonunu ve hedefini tanımlama
Şablon, sorguların input_messages modele nasıl gönderileceğini denetler. Giriş verilerinizden alanlara başvurmak için {{item.query}} kullanın. Değerlendirilecek modeli ve isteğe bağlı örnekleme parametrelerini belirtin:
input_messages = {
"type": "template",
"template": [
{
"type": "message",
"role": "user",
"content": {
"type": "input_text",
"text": "{{item.query}}"
}
}
]
}
target = {
"type": "azure_ai_model",
"model": "gpt-5-mini",
"sampling_params": {
"top_p": 1.0,
"max_completion_tokens": 2048,
},
}
Değerlendiricileri ve veri eşlemelerini ayarlama
Model, çalışma zamanında yanıt oluşturduğunda, modelin çıkışına başvurmak için {{sample.output_text}} içinde data_mapping kullanın. Giriş verilerinizden alanlara başvurmak için {{item.field}} kullanın.
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"query": {"type": "string"},
},
"required": ["query"],
},
include_sample_schema=True,
)
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"model": model_deployment_name,
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
]
Değerlendirme oluşturma ve çalıştırma
eval_object = openai_client.evals.create(
name="Model Target Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
data_source = {
"type": "azure_ai_target_completions",
"source": {
"type": "file_id",
"id": data_id,
},
"input_messages": input_messages,
"target": target,
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="model-target-evaluation",
data_source=data_source,
)
Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_model_evaluation.py. Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Ipucu
Başka bir değerlendirme çalıştırması eklemek için aynı kodu kullanın.
Aracı hedef değerlendirmesi
Çalışma zamanında bir Foundry aracısına sorgular gönderin ve yanıtları, azure_ai_target_completions hedefiyle azure_ai_agent veri kaynağı türünü kullanarak değerlendirin. Bu senaryo hem istem aracıları hem de barındırılan aracılar için çalışır.
Ipucu
Başlamadan önce Başlangıç Kılavuzu ve Veri Hazırlığı'nı tamamlayın.
Ipucu
Yanıt protokolü kullanan barındırılan aracılar burada gösterilen kod örnekleriyle çalışır. Çağırmalar protokolunu kullanan barındırılan aracılar için input_messages biçim farklıdır. Ayrıntılar için Barındırılan Aracı Çağırma Protokolü'ne bakın.
İleti şablonunu ve hedefini tanımlama
Şablon, sorguların input_messages aracıya nasıl gönderileceğini denetler. Giriş verilerinizden alanlara başvurmak için {{item.query}} kullanın. Değerlendirilecek ajanı ada göre belirtin.
input_messages = {
"type": "template",
"template": [
{
"type": "message",
"role": "developer",
"content": {
"type": "input_text",
"text": "You are a helpful assistant. Answer clearly and safely."
}
},
{
"type": "message",
"role": "user",
"content": {
"type": "input_text",
"text": "{{item.query}}"
}
}
]
}
target = {
"type": "azure_ai_agent",
"name": "my-agent",
"version": "1" # Optional. Uses latest version if omitted.
}
Değerlendiricileri ve veri eşlemelerini ayarlama
Aracı çalışma zamanında yanıtlar oluşturduğunda, aracının çıkışına başvurmak için {{sample.*}} içindeki data_mapping değişkenlerini kullanın.
| Değişken | Açıklama | İçin kullanın |
|---|---|---|
{{sample.output_text}} |
Ajanın düz metin yanıtı. | Dize yanıtı bekleyen değerlendiriciler (örneğin, coherence, violence). |
{{sample.output_items}} |
Aracın yapılandırılmış JSON çıkışı, araç çağrıları dahil. | Tam etkileşim bağlamı gerektiren değerlendiriciler (örneğin, task_adherence). |
{{item.field}} |
Giriş verilerinizden bir alan. |
query veya ground_truth gibi giriş alanları. |
Ipucu
Bu query alan, sistem iletileri ve konuşma geçmişi de dahil olmak üzere yapılandırılmış JSON içerebilir. Gibi task_adherence bazı aracı değerlendiricileri daha doğru puanlama için bu bağlamı kullanır. Sorgu biçimlendirmesi hakkında ayrıntılı bilgi için bkz. aracı değerlendiricileri.
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"query": {"type": "string"},
},
"required": ["query"],
},
include_sample_schema=True,
)
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"model": model_deployment_name,
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "task_adherence",
"evaluator_name": "builtin.task_adherence",
"initialization_parameters": {
"model": model_deployment_name,
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_items}}",
},
},
]
Değerlendirme oluşturma ve çalıştırma
eval_object = openai_client.evals.create(
name="Agent Target Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
data_source = {
"type": "azure_ai_target_completions",
"source": {
"type": "file_id",
"id": data_id,
},
"input_messages": input_messages,
"target": target,
}
agent_eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="agent-target-evaluation",
data_source=data_source,
)
Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_agent_evaluation.py. Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Barındırılan aracı çağırma protokolü
Çağırma protokollerini kullanan barındırılan aracılar aynı azure_ai_agent hedef türünü destekler, ancak serbest biçimli input_messages bir biçim kullanır. Yapılandırılmış şablon biçimi yerine, doğrudan aracının /invocations istek gövdesine eşlenen bir JSON nesnesi sağlayın. Giriş verilerinizden alanları değiştirmek için yer tutucuları kullanın {{item.*}} .
Barındırılan bir aracı hem yanıtları hem de çağrı protokollerini destekliyorsa, hizmet varsayılan olarak çağırma protokollerini kullanır.
İleti biçimini ve hedefini tanımlama
input_messages = {"message": "{{item.query}}"}
target = {
"type": "azure_ai_agent",
"name": "my-hosted-agent", # Replace with your hosted agent name
"version": "1",
}
Değerlendirme oluşturma ve çalıştırma
eval_object = openai_client.evals.create(
name="Hosted Agent Invocations Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
data_source = {
"type": "azure_ai_target_completions",
"source": {
"type": "file_id",
"id": data_id,
},
"input_messages": input_messages,
"target": target,
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="hosted-agent-invocations-evaluation",
data_source=data_source,
)
Değerlendirici kurulumu ve veri eşlemeleri , istem aracısı değerlendirmesiyle aynıdır. Ajanın metin yanıtı için {{sample.output_text}} ve araç çağrıları da dahil olmak üzere tam yapılandırılmış çıktı için {{sample.output_items}} kullanın.
Aracı yanıtı değerlendirmesi
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.
Ipucu
Başlamadan önce Başlayın adımını 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.
Önemli
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
data_source_config = {"type": "azure_ai_source", "scenario": "responses"}
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"model": model_deployment_name,
},
},
{
"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. Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
İz değerlendirmesi (ö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.
Önemli
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.
Ipucu
Başlamadan önce Başlayın adımını 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ğerlendirme çalıştırmasını yapılandırırken Foundry portalında Akıllı örnekleme düğmesini açarak bu özelliği etkinleştirin. 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:
| Öznitelik | Gerekli | Açıklama |
|---|---|---|
gen_ai.operation.name |
Evet |
"invoke_agent" eşit olmalıdır. Hizmet diğer tüm yayılma aralıklarını yoksayar. |
gen_ai.agent.id |
Aracı filtre modu için | Benzersiz aracı tanımlayıcısı (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. Çıktı ayrıca type: tool_call veya type: tool_result içeriyorsa, tool_calls ile eşlenir. |
gen_ai.tool.definitions |
Isteğe bağlı | Aracının kullanabileceği araç şemalarının bir JSON dizisi. Yoksa, hizmet araç çağrı iletilerinden araç tanımlarını çıkarsamaya çalışır, ancak çıkarsanan şemalar eksik olabilir. |
gen_ai.conversation.id |
Isteğe bağlı | Konuşma tanımlayıcısı, bağıntı için değerlendirme sonuçlarına geçirilir. |
Not
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 olarak1.
Seçenek A: Aracı 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. El ile izleme kimliği toplama 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'tan izlem kimliklerini toplayın
Ajansınızın izlemelerindeki değerlerle ilgili Application Insights'i sorgulayın. Her bir operation_Id, eksiksiz bir vekil 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 | Açıklama |
|---|---|---|
{{item.query}} |
gen_ai.input.messages (kullanıcı/sistem rolleri) |
İzlemeden ayıklanan kullanıcı sorgusu. |
{{item.response}} |
gen_ai.input.messages (yardımcı/araç rolleri) + gen_ai.output.messages |
Aracının yanıtı izlenen kayıttan ayıklandı. |
{{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. |
testing_criteria = [
# Quality evaluators — require query and response from trace data
{
"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
{
"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
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{item.response}}",
},
"initialization_parameters": {
"threshold": 4,
},
},
]
Tam bir çalıştırılabilir örnek için bkz. GitHub üzerinde sample_evaluations_builtin_with_traces.py. Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Yapay veri değerlendirmesi (önizleme)
azure_ai_synthetic_data_gen_preview Yapay test sorguları oluşturmak, bunları dağıtılan bir modele veya Foundry aracısına göndermek ve yanıtları değerlendirmek için veri kaynağı türünü kullanın. Test veri kümeniz olmadığında bu senaryoya bakın. Hizmet, sağladığınız bir istem (ve/veya aracının yönergelerinden) temelinde sorgular oluşturur, bunları hedefinize karşı çalıştırır ve yanıtları değerlendirir.
Ipucu
Başlamadan önce Başlayın adımını tamamlayın.
Yapay veri değerlendirmesi nasıl çalışır?
- Hizmet, sizin
promptve isteğe bağlı tohum veri dosyalarınızı temel alan yapay sorgular oluşturur. - Her sorgu, bir yanıt oluşturmak için belirtilen hedefe (model veya aracı) gönderilir.
- Değerlendiriciler, oluşturulan sorguyu ve yanıtı kullanarak her yanıtı puanlar.
- Oluşturulan sorgular yeniden kullanılmak üzere projenizde bir veri kümesi olarak depolanır.
Parametreler
| Parametre | Gerekli | Açıklama |
|---|---|---|
samples_count |
Evet | Oluşturulacak en fazla yapay test sorgusu sayısı. |
model_deployment_name |
Evet | Yapay sorgular oluşturmak için kullanılacak model dağıtımı. Yalnızca Yanıtlar API'si özelliğine sahip modeller desteklenir. Kullanılabilirlik için bkz. Yanıtlar API'sinde bölge kullanılabilirliği. |
prompt |
Hayır | Oluşturulacak sorguların türünü açıklayan yönergeler. Aracı hedefi yapılandırılan yönergelere sahip olduğunda isteğe bağlı. |
output_dataset_name |
Hayır | Oluşturulan sorguların depolandığı çıkış veri kümesinin adı. Bir ad sağlamazsanız, hizmet otomatik olarak bir ad oluşturur. |
sources |
Hayır | Oluşturulan sorguların ilgi düzeyini artırmak için çekirdek veri dosyaları (dosya kimliğine göre). Şu anda yalnızca bir dosya desteklenmektedir. |
Değerlendiricileri ve veri eşlemelerini ayarlama
Yapay veri oluşturucu alanda {{item.query}} sorgular oluşturur. Hedef, {{sample.output_text}} içinde kullanılabilir yanıt oluşturur. Bu alanları değerlendiricilerinizle eşleyin:
data_source_config = {"type": "azure_ai_source", "scenario": "synthetic_data_gen_preview"}
testing_criteria = [
{
"type": "azure_ai_evaluator",
"name": "coherence",
"evaluator_name": "builtin.coherence",
"initialization_parameters": {
"model": model_deployment_name,
},
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
{
"type": "azure_ai_evaluator",
"name": "violence",
"evaluator_name": "builtin.violence",
"data_mapping": {
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
},
]
Değerlendirme oluşturma ve çalıştırma
Model hedefi
Yapay sorgular oluşturma ve modeli değerlendirme:
eval_object = openai_client.evals.create(
name="Synthetic Data Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
data_source = {
"type": "azure_ai_synthetic_data_gen_preview",
"item_generation_params": {
"type": "synthetic_data_gen_preview",
"samples_count": 5,
"prompt": "Generate customer service questions about returning defective products",
"model_deployment_name": model_deployment_name,
"output_dataset_name": "my-synthetic-dataset",
},
"target": {
"type": "azure_ai_model",
"model": model_deployment_name,
},
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="synthetic-data-evaluation",
data_source=data_source,
)
İsteğe bağlı olarak hedef modelin davranışını şekillendirmek için bir sistem istemi ekleyebilirsiniz. Yapay veri oluşturma ile kullandığınızda input_messages , yalnızca system rol iletilerini ekleyin. Hizmet, oluşturulan sorguları otomatik olarak kullanıcı iletileri olarak sağlar.
data_source = {
"type": "azure_ai_synthetic_data_gen_preview",
"item_generation_params": {
"type": "synthetic_data_gen_preview",
"samples_count": 5,
"prompt": "Generate customer service questions about returning defective products",
"model_deployment_name": model_deployment_name,
},
"target": {
"type": "azure_ai_model",
"model": model_deployment_name,
},
"input_messages": {
"type": "template",
"template": [
{
"type": "message",
"role": "system",
"content": {
"type": "input_text",
"text": "You are a helpful customer service agent. Be empathetic and solution-oriented."
}
}
]
},
}
Aracı hedefi
Yapay sorgular oluşturma ve Foundry aracılarını değerlendirme:
data_source = {
"type": "azure_ai_synthetic_data_gen_preview",
"item_generation_params": {
"type": "synthetic_data_gen_preview",
"samples_count": 5,
"prompt": "Generate questions about returning defective products",
"model_deployment_name": model_deployment_name,
},
"target": {
"type": "azure_ai_agent",
"name": agent_name,
"version": agent_version,
},
}
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="synthetic-agent-evaluation",
data_source=data_source,
)
Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma. Yanıt, yapay verileri almak veya yeniden kullanmak için kullanabileceğiniz, oluşturulan veri kümesinin kimliğini içeren bir output_dataset_id özellik içerir.
Konuşma düzeyi değerlendirme (önizleme)
Yalnızca tek tek yanıtları değil, tüm kullanıcı etkileşimlerindeki aracı kalitesini değerlendirmek için konuşmaların tamamını değerlendirin. Tamamlanmamış görev çözümlemesi, kullanıcı sıkıntısı ve sıra düzeyi değerlendirmenin kaçırdığı araç çağrısı regresyonları gibi kalite sorunlarını belirlemek için konuşma düzeyi değerlendirmeyi kullanın.
Örneğin, kullanıcının birden çok dönüşten dolayı hayal kırıklığına uğradığı bir destek aracısı düşünün:
1. Adım — Kullanıcı: "Parolamı sıfırlamam gerekiyor." Aracı: "Hesabınızı buldum. Bir sıfırlama bağlantısı gönderiyorum."
2. Tur — Kullanıcı: "E-postayı almadım." Temsilci: "Bağlantıyı yeniden gönderdim." Lütfen istenmeyen postaları denetleyin."
3. Adım — Kullanıcı: "Hala hiçbir şey yok. Doğrudan sıfırlayabilir misiniz?" Aracı: "Başka bir sıfırlama bağlantısı gönderdim."
Tur düzeyi değerlendirici yalnızca son yanıtı puanlar; bu yanıt kibar ve harekete geçtiği için yüksek puan alır. Konuşma genelinde müşteri memnuniyetini not alan konuşma düzeyi değerlendirici, aracının alternatif bir deneme yapmadan aynı başarısız eylemi üç kez tekrarlayarak kullanıcının sorununu çözmediğini gösterir.
Konuşma düzeyi değerlendirmesi, sıralı değerlendirmeden çeşitli yollarla farklıdır:
| Aspect | Sıra düzeyi | Konuşma düzeyi |
|---|---|---|
| Scope | Tek tek sorgu-yanıt çiftleri | Birden çok mesaj alışverişi içeren konuşmalar |
| Metrics | Yanıt başına kalite ve güvenlik | Konuşma düzeyi sonuçları ve kullanıcı memnuniyeti |
| Veri biçimi |
query ve response alanlarına sahip JSONL |
Tam konuşmayı içeren messages dizisine sahip JSONL |
| Kullanım örneği | Tek tek model yanıtlarını test etme | Uçtan uca ajan deneyimlerini test etme |
Konuşma düzeyi değerlendirmesi dört veri kaynağı seçeneğini destekler:
| Seçenek | Ne zaman kullanılır? | Veri kaynağı türü |
|---|---|---|
| Veri kümesinden veya satır içinden | Yerel konuşma izlemeleriniz veya test verileriniz var |
jsonl ile file_id veya file_content |
| Konuşma kimliğine göre | App Insights'tan belirli konuşmaları değerlendirmek istiyorsunuz |
azure_ai_trace_data_source_preview ile trace_source |
| Örneklemeli ajan filtresine göre | Örneklenmiş üretim trafiği genelinde ajan kalitesini değerlendirmek istiyorsunuz |
azure_ai_trace_data_source_preview ile trace_source |
| Simülasyon konuşmaları | Yapay test konuşmaları oluşturmak istiyorsunuz |
azure_ai_target_completions ile conversation_gen_preview |
Değerlendirme düzeyi seçme
Çalıştırmadaki evaluation_level parametresi, değerlendiricilerin tek tek dönüşleri mi yoksa konuşmaların tamamını mı puanlayacağını belirler:
| Value | Davranış |
|---|---|
"turn" |
Değerlendiriciler her dönüşü bağımsız olarak puanlar. |
"conversation" |
Değerlendiriciler konuşmanın tamamını bir bütün olarak puanlar. |
| (atlanmış) | Varsayılan olarak "turn". |
Önemli
Değerlendirici uyumluluğu: Her değerlendirici belirli değerlendirme düzeylerini destekler.
supported_evaluation_levels değerlendiricinin alanını kontrol edin.
-
Yalnızca dönüş tabanlı değerlendiriciler (örneğin,
fluency,relevance)evaluation_level="conversation"ile kullanılamaz. - Şu anda, konuşma düzeyindeki tüm değerlendiriciler hem
"turn"hem de"conversation"düzeylerini desteklemektedir.
Sık karşılaşılan hatalar
| Error | Nedeni | Çözüm |
|---|---|---|
| Uyumsuz değerlendirme düzeyi |
evaluation_level="conversation" yalnızca tur tabanlı değerlendirici ile kullanımı |
Yalnızca dönüş değerlendiricisini kaldırın veya evaluation_level="turn" olarak değiştirin |
Konuşma verilerini hazırlama
Her satırında messages alanında eksiksiz bir konuşma bulunan bir JSONL dosyası oluşturun. Her ileti bir role (kullanıcı, yardımcı veya sistem) ve contentiçermelidir. Tam bir örnek için, SDK'daki konuşma değerlendirme örneklerine bakın:
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": "Your current balance is $1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}]}
Ajanınız araçları kullanıyorsa araç tanımlarını ve araç çağrılarını da ekleyebilirsiniz:
{"messages": [{"role": "user", "content": "What is the capital of France?"}, {"role": "assistant", "content": "Paris"}]}
{"messages": [{"role": "user", "content": "How do I reverse a string in Python?"}, {"role": "assistant", "content": "You can reverse a string in Python by using slicing: string[::-1]"}]}
{"messages": [{"role": "user", "content": "What are the main causes of climate change?"}, {"role": "assistant", "content": "The main causes of climate change are the increase in greenhouse gases in the atmosphere, primarily due to human activities such as burning fossil fuels and deforestation."}]}
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_account_balance", "arguments": "{\"account_id\": \"ACCT-7890\"}"}}]}, {"role": "tool", "tool_call_id": "call_abc123", "content": "{ \"balance\": 1234.56, \"currency\": \"USD\" }"}, {"role": "assistant", "content": "Your current balance is 1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}], "tool_definitions": [{"name": "get_account_balance", "description": "Retrieves the current balance for a customer account", "parameters": {"type": "object", "properties": {"account_id": {"type": "string"}}, "required": ["account_id"]}}]}
{"messages": [{"role": "user", "content": "Explain the theory of relativity in simple terms."}, {"role": "assistant", "content": "Einstein's theory of relativity shows that space and time are interconnected and relative to the observer's frame of reference."}]}
{"messages": [{"role": "user", "content": "What's the weather in Seattle?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_002", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Seattle, WA\"}"}}]}, {"role": "tool", "tool_call_id": "call_002", "content": "{ \"temperature\": 55, \"condition\": \"Cloudy\" }"}, {"role": "assistant", "content": "It's currently 55F and cloudy in Seattle."}], "tool_definitions": [{"name": "get_weather", "description": "Get the current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}, "required": ["location"]}}]}
{"messages": [{"role": "user", "content": "What is the tallest mountain in the world?"}, {"role": "assistant", "content": "Mount Everest is the tallest mountain in the world."}]}
{"messages": [{"role": "user", "content": "Is 4 x 2 = 16?"}, {"role": "assistant", "content": "No, 4 x 2 = 8."}]}
{"messages": [{"role": "user", "content": "What is the best Italian desert?"}, {"role": "assistant", "content": "Tiramisu is a popular Italian dessert."}]}
{"messages": [{"role": "user", "content": "What is the chemical formula for water?"}, {"role": "assistant", "content": "The chemical formula for water is H2O."}]}
Veri şemasını ve değerlendiricileri tanımlama
Konuşma verilerinizin şemasını belirtin, "iletiler" ve konuşma düzeyinde değerlendirme için tasarlanmış değerlendiricileri seçin. Konuşma düzeyindeki değerlendiriciler, tek tek konuşma sıraları yerine etkileşimin tamamını değerlendirir.
pip install "azure-ai-projects>=2.2.0"
import os
from openai.types.eval_create_params import DataSourceConfigCustom
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["FOUNDRY_MODEL_NAME"]
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"messages": {"type": "array"},
"tool_definitions": {"type": "array"},
},
"required": ["messages"],
},
include_sample_schema=False,
)
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="customer_satisfaction",
evaluator_name="builtin.customer_satisfaction",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="task_completion",
evaluator_name="builtin.task_completion",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="conversation_coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
Değerlendirme oluşturma ve çalıştırma
Hazırlık:
from openai.types.evals.create_eval_jsonl_run_data_source_param import (
CreateEvalJSONLRunDataSourceParam,
SourceFileID,
)
# Upload conversation data
data_id = project_client.datasets.upload_file(
name="multiturn-conversation-data",
version="1",
file_path="./sample_data_multiturn_conversations.jsonl",
).id
# Create the evaluation
eval_object = openai_client.evals.create(
name="Multi-turn Conversation Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a run with evaluation_level set to "conversation"
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="multiturn-conversation-run",
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=data_id,
),
),
extra_body={"evaluation_level": "conversation"},
)
Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
İzlemelerden gelen kimliklere göre konuşmaları değerlendirme
Konuşma kimliklerini belirterek Application Insights'taki belirli konuşmaları değerlendirin. Sorunların kök nedenini belirlemek veya belirli etkileşimlerdeki düzeltmeleri doğrulamak için bu seçeneği kullanın. Örneğin, bir uyarıyla işaretlenen bir konuşmayı araştırabilir veya bilinen bir sorun için yapılan düzeltmeyi doğrulayabilirsiniz.
Konuşma kimlikleri nerede bulunur?
Konuşma ID'lerini burada bulun:
-
Application Insights izleme günlükleri kullanıcı arabirimi — İlginç izlemelere göz atın ve izleme ayrıntılarında
conversation_idalanını bulun. -
Uygulamanızın günlük çıktısı — Ajan yanıtlarını oluştururken
conversation_iddeğerini açıkça ayarlarsanız, bunu günlüklerinizden alın. -
OpenTelemetry izleme bağlamı — Aracınız standart izleme bağlamı yayılımını kullanıyorsa
conversation_id, traceparent üst bilgisinden de türetilebilir.
Not
Araç tanımları izlemelerden otomatik olarak alınır veya aracı kayıt defterinden sorgulanır. İstekte bunları sağlamanız gerekmez.
Konuşma kimliği araması için parametreler
| Parametre | Gerekli | Açıklama |
|---|---|---|
conversation_ids |
Evet | Değerlendirilecek konuşma kimlikleri dizisi. |
lookback_hours |
Hayır |
end_time noktasından geriye doğru aranacak saat sayısı. Varsayılan olarak yedi gün (168 saat) kullanılır. |
end_time |
Hayır | Arama penceresinin sonu (ISO 8601 biçimi). Varsayılan olarak geçerli saati kullanır. |
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["FOUNDRY_MODEL_NAME"]
# Provide conversation IDs or trace IDs from App Insights
conversation_ids = ["conversation_1234", "conversation_5678"]
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
# Eval group for trace-based evaluations
data_source_config = {
"type": "azure_ai_source",
"scenario": "traces",
}
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="customer_satisfaction",
evaluator_name="builtin.customer_satisfaction",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="task_completion",
evaluator_name="builtin.task_completion",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="conversation_coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
# Create evaluation with traces scenario
eval_object = openai_client.evals.create(
name="Multi-turn Trace Evaluation (by ID)",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Run evaluation on specific conversation IDs
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="multiturn-trace-by-id-run",
data_source={
"type": "azure_ai_trace_data_source_preview",
"trace_source": {
"type": "conversation_id_source",
"conversation_ids": conversation_ids,
},
},
extra_body={"evaluation_level": "conversation"},
)
Not
- Application Insights veri alımı, izlemelerin ne zaman oluşturulduğu ve ne zaman değerlendirme için kullanılabilir olduğu arasında bir gecikmeye neden olabilir. Sorgu izleri bulamazsa, birkaç dakika bekleyip yeniden deneyin.
- Maksimum geriye dönük süre 7 gündür (168 saat). Eski izlere erişmek için, App Insights saklama sınırlarınız dahilinde
start_timeveend_timekullanın.
Örneklenen konuşmaları temsilci filtresine göre değerlendirme
Aracı adına göre filtreleyerek Application Insights'tan örneklenmiş bir konuşma kümesini değerlendirin. Üretim trafiği genelinde temsilcinin genel kalitesini değerlendirmek için bu seçeneği kullanın. Örneğin, düzenli kalite değerlendirmeleri çalıştırın veya üretimde kalite düşüşünü izleyin.
Filtreleme için belirttiğiniz aracı, çok aracılı bir konuşmanın parçası olabilir. Filtre, o temsilcinin katıldığı tüm konuşmaları bulur.
Not
Araç tanımları izlemelerden otomatik olarak alınır veya aracı kayıt defterinden sorgulanır. İstekte bunları sağlamanız gerekmez.
Ajan kimlik alanları
Filtre uygulamak için aracıyı şu biçimlerden birini kullanarak belirtin:
| Format | Example | Açıklama |
|---|---|---|
agent_name + agent_version |
"agent_name": "my-agent", "agent_version": "1" |
İki ayrı alan.
agent_version belirtilmezse, en son sürümü kullanın. |
agent_id |
"agent_id": "my-agent:1" |
"name:version" biçiminde tek bir dize. |
Filtre stratejileri
| Strateji | Açıklama |
|---|---|
random_sampling |
(Varsayılan) Konuşmalardan en fazla max_traces adet eşit olasılıkla rastgele örneklem. |
smart_filtering |
"Hizmet tarafından yönetilen, olası sorunlar, uç durumlar veya anomaliler içeren konuşmalar gibi \"ilgi çekici\" izlere öncelik veren sezgisel yöntem." |
Parametreler
| Parametre | Gerekli | Açıklama |
|---|---|---|
agent_name |
Evet | İzlemeleri filtrelemek için kullanılacak ajan adı. |
agent_version |
Hayır | Aracı sürümü. Atlanırsa en son sürümü kullanır. |
agent_id |
Hayır |
agent_name
+
agent_version alternatifi.
"name:version" biçiminde tek dize. |
start_time |
Evet | Zaman penceresinin başlangıcı (Unix dönem saniyesi, UTC). |
end_time |
Evet | Zaman penceresinin sonu (Unix dönem saniyesi, UTC). Veri alım gecikmesini önlemek için +600 saniye ekleyin. |
max_traces |
Hayır | Örnek alınacak en fazla konuşma sayısı. Varsayılan değer 1.000'dır. |
filter_strategy |
Hayır |
"random_sampling" (varsayılan) veya "smart_filtering" (ilgi çekici izlere öncelik veren, hizmet tarafından yönetilen sezgisel yöntem). |
Önemli
Zaman penceresi (end_time - start_time) en az 15 dakika (900 saniye) olmalıdır. Bu gereksinim, konuşma düzeyindeki sorguların eksik konuşmaları önlemek için her uçta 5 dakikalık bir hareketsizlik tamponu uygulamasından kaynaklanır.
import os
import time
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["FOUNDRY_MODEL_NAME"]
agent_name = os.environ["FOUNDRY_AGENT_NAME"]
agent_version = os.environ.get("FOUNDRY_AGENT_VERSION", "")
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
# Eval group for trace-based evaluations
data_source_config = {
"type": "azure_ai_source",
"scenario": "traces",
}
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="customer_satisfaction",
evaluator_name="builtin.customer_satisfaction",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="task_completion",
evaluator_name="builtin.task_completion",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="conversation_coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
eval_object = openai_client.evals.create(
name="Multi-turn Trace Evaluation (Agent Filter)",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# 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 - (24 * 3600) # 24 hours lookback
# Build trace_source with agent filter
trace_source = {
"type": "agent_filter",
"agent_name": agent_name,
"start_time": start_time,
"end_time": end_time,
"max_traces": 5,
}
if agent_version:
trace_source["agent_version"] = agent_version
# Run evaluation on sampled agent conversations
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="multiturn-agent-filter-run",
data_source={
"type": "azure_ai_trace_data_source_preview",
"trace_source": trace_source,
},
extra_body={"evaluation_level": "conversation"},
)
Not
App Insights sorgu zaman aralığı şu anda en fazla 7 gün (168 saat) ile sınırlıdır. App Insights saklama sınırları dahilinde start_time ve end_time açıkça sağlanmadıkça 7 günden eski izlere erişemezsiniz.
Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Konuşma benzetimi
Senaryo açıklamalarından sanal konuşmalar oluşturun ve bunları konuşma düzeyinde değerlendirin. Dağıtımdan önce denetimli durumlarda aracınızın davranışını test etmek için bu senaryoyı kullanın. Hizmet, senaryo açıklamalarınızı temel alarak gerçekçi konuşmalar oluşturur ve bunları değerlendirir.
Bu yaklaşım şunlar için kullanışlıdır:
- Dağıtım öncesi test: Gerçek kullanıcı trafiği olmadan farklı senaryolarda aracı davranışını doğrulayın.
- Uç olay kapsamı: Nadiren doğal olarak ortaya çıkan ancak iyi işlenmesi gereken test senaryoları.
- Regresyon testi: Aracı güncelleştirmelerinin bilinen senaryolarda performansı düşürmediğinden emin olun.
- Ölçek testi: Stres testi aracısı özellikleri için hızlı bir şekilde birçok konuşma oluşturun.
Konuşma benzetimi nasıl çalışır?
- Senaryo açıklamalarından oluşan bir veri kümesi sağlarsınız; her satır simülasyon kullanıcısının gerçekleştirmeye çalıştığı durumu açıklar.
- Hizmet, kullanıcının rolünü oynamak için bir simülatör modeli kullanır ve senaryoya göre aracınızla etkileşim kurar.
- Her senaryo bir veya daha fazla tam konuşma oluşturur.
- Konuşma düzeyindeki değerlendiriciler, oluşturulan konuşmaları değerlendirir.
- Projeniz hem konuşmaları hem de değerlendirme sonuçlarını depolar.
Senaryo verilerini hazırlama
Her satırın simülasyon kullanıcısı için bir senaryoyu açıkladığı bir JSONL dosyası oluşturun. Şema için id, test_case_descriptionve desired_num_turnsgerekir. Kullanıcının hedefi, bağlamı ve kısıtlamalarıyla ilgili ayrıntıları ekleyin. Tam bir örnek için SDK'deki konuşma değerlendirme örneklerine bakın.
{"id": "contoso_refund_timeline", "test_case_description": "Customer returned an item to Contoso Electronics 5 days ago and hasn't received their refund yet. They want to know how long Contoso refunds take.", "desired_num_turns": 10}
{"id": "contoso_store_hours_lookup", "test_case_description": "Customer wants to know what time the Contoso Electronics store closes today. Simple single-fact question with possibly one clarifying turn about which location.", "desired_num_turns": 3}
Parametreler
| Parametre | Gerekli | Açıklama |
|---|---|---|
num_conversations |
Hayır | Senaryo başına oluşturulacak konuşma sayısı. Varsayılan olarak 5, sunucu tarafı üst sınırı 5'tir. |
max_turns |
Hayır | Konuşma başına en fazla dönüş (değişim) sayısı. Varsayılan olarak 10, sunucu tarafı üst sınırı 20'ye ayarlanır. |
model |
Evet | Kullanıcıyı simüle etmek için kullanılacak modelin dağıtımı. Örneğin, gpt-4.1. |
sampling_params |
Hayır | Simülatör modeli için, temperature, top_p ve max_completion_tokens dahil olmak üzere örnekleme parametreleri. |
data_mapping |
Hayır | Senaryonuzun JSONL'sinden simülasyon parametrelerine alanları eşler. Yaygın eşlemeler: test_case_description, id, desired_num_turns. |
Değerlendiricileri tanımlama
Konuşma düzeyinde değerlendirme için tasarlanmış değerlendiricileri seçin. Simüle edilmiş konuşmalar otomatik olarak değerlendiricilerle eşleştirilir.
import os
from openai.types.eval_create_params import DataSourceConfigCustom
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator, PromptAgentDefinition
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["FOUNDRY_MODEL_NAME"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "")
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
# Simulation uses the same "custom" eval group type as dataset evaluation (S1),
# since the generated conversations follow the same messages schema.
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"messages": {"type": "array"},
},
"required": ["messages"],
},
include_sample_schema=False,
)
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="customer_satisfaction",
evaluator_name="builtin.customer_satisfaction",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="task_completion",
evaluator_name="builtin.task_completion",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="conversation_coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
Değerlendirme oluşturma ve çalıştırma
Hazırlık: sample_data_simulation_scenarios.jsonl indirin.
# Create (or update) an agent to simulate against
agent = project_client.agents.create_version(
agent_name=agent_name,
definition=PromptAgentDefinition(
model=model_deployment_name,
instructions="You are a helpful customer service agent. Be empathetic and solution-oriented.",
),
)
# Upload scenario data
scenarios_id = project_client.datasets.upload_file(
name="simulation-scenarios",
version="1",
file_path="./sample_data_simulation_scenarios.jsonl",
).id
# Create the evaluation
eval_object = openai_client.evals.create(
name="Multi-turn Conversation Simulation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a simulation run
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="conversation-simulation-run",
data_source={
"type": "azure_ai_target_completions",
"source": {
"type": "file_id",
"id": scenarios_id,
},
"target": {
"type": "azure_ai_agent",
"name": agent.name,
"version": agent.version,
},
"item_generation_params": {
"type": "conversation_gen_preview",
"model": model_deployment_name,
"num_conversations": 2,
"max_turns": 5,
"sampling_params": {
"temperature": 0.7,
"top_p": 1.0,
"max_completion_tokens": 800,
},
"data_mapping": {
"test_case_description": "test_case_description",
"id": "id",
"desired_num_turns": "desired_num_turns",
},
},
},
extra_body={"evaluation_level": "conversation"},
)
Tamamlanmayı denetlemek ve sonuçları yorumlamak için bkz. Sonuçları alma.
Sonuçları alma
Değerlendirme çalıştırması tamamlandıktan sonra puanlanan sonuçları alın ve portalda veya program aracılığıyla gözden geçirin.
Sonuçları sorgula
Değerlendirme işlemleri eşzamansızdır. Tamamlanana kadar çalışma durumunu sorgulayın ve sonuçları alın.
import time
from pprint import pprint
while True:
run = openai_client.evals.runs.retrieve(
run_id=eval_run.id, eval_id=eval_object.id
)
if run.status in ("completed", "failed"):
break
time.sleep(5)
print("Waiting for eval run to complete...")
# Retrieve results
output_items = list(
openai_client.evals.runs.output_items.list(
run_id=run.id, eval_id=eval_object.id
)
)
pprint(output_items)
print(f"Report URL: {run.report_url}")
Sonuçları yorumlama
Tek bir veri örneği için tüm değerlendiriciler aşağıdaki şemayı çıkış olarak döndürür:
- Etiket: Birim testinin çıkışına benzer şekilde ikili bir "pass" veya "fail" etiketi. Değerlendiriciler arasında karşılaştırmaları kolaylaştırmak için bu sonucu kullanın.
- Puan: Her değerlendiricinin doğal ölçeğinden bir puan. Bazı değerlendiriciler, 5 nokta ölçeğinde puanlama (kalite değerlendiricileri) veya 7 nokta ölçeğinde (içerik güvenliği değerlendiricileri) ince taneli bir puanlama anahtarı kullanır. Metinsel benzerlik değerlendiricileri gibi diğerleri, 0 ile 1 arasında kayan F1 puanlarını kullanır. Herhangi bir ikili olmayan "puan", "eşik" değerine göre "label" alanında "başarılı" veya "başarısız" olarak ikili hâle getirilir.
- Eşik: ikili olmayan tüm puanlar, kullanıcının SDK içinde geçersiz kılabileceği varsayılan bir eşiğe göre "başarılı" veya "başarısız" olarak ikilileştirilir.
- Neden: Anlaşılırlığı geliştirmek için, tüm LLM-judge değerlendiricileri belirli bir puanın neden verildiğini açıklamak için bir akıl yürütme alanı da oluşturur.
- Ayrıntılar: (isteğe bağlı) tool_call_accuracy gibi bazı değerlendiriciler için, kullanıcıların uygulamalarında hata ayıklamasına yardımcı olacak ek bilgiler içeren bir "ayrıntılar" alanı veya bayrakları olabilir.
Örnek çıkış (tek öğe)
{
"type": "azure_ai_evaluator",
"name": "Coherence",
"metric": "coherence",
"score": 4.0,
"label": "pass",
"reason": "The response is well-structured and logically organized, presenting information in a clear and coherent manner.",
"threshold": 3,
"passed": true
}
Örnek çıkış (birleşik)
Birden çok veri örneğine (bir veri kümesi) göre toplu sonuçlar elde etmek için, "geçiş" içeren örneklerin ortalama oranı bu veri kümesinin geçiş hızını oluşturur.
{
"eval_id": "eval_abc123",
"run_id": "run_xyz789",
"status": "completed",
"result_counts": {
"passed": 85,
"failed": 15,
"total": 100
},
"per_testing_criteria_results": [
{
"name": "coherence",
"passed": 92,
"failed": 8,
"pass_rate": 0.92
},
{
"name": "relevance",
"passed": 78,
"failed": 22,
"pass_rate": 0.78
}
]
}
Sorun giderme
uzun süre çalışan iş
Değerlendirme işiniz uzun süre Çalışıyor durumunda kalabilir. Bu koşul genellikle Azure OpenAI model dağıtımı yeterli kapasiteye sahip olmadığında oluşur ve hizmetin istekleri yeniden denemesine neden olur.
Çözünürlük:
-
openai_client.evals.runs.cancel(run_id, eval_id=eval_id)kullanarak mevcut değerlendirme işini iptal edin. - Azure portalında model kapasitesini artırın.
- Değerlendirmeyi yeniden çalıştırın.
Kimlik doğrulama hataları
401 Unauthorized veya 403 Forbidden hatası alırsanız, şunları doğrulayın:
- 'niz
DefaultAzureCredentialdoğru yapılandırıldı. Azure CLI kullanıyorsanızaz loginçalıştırın. - Hesabınız Foundry projesinde Foundry User rolüne sahipsiniz.
- Proje uç noktası URL'si doğrudur ve hem hesap hem de proje adlarını içerir.
Veri biçimi hataları
Değerlendirme bir şema veya veri eşleme hatasıyla başarısız olursa:
- JSONL dosyanızda satır başına geçerli bir JSON nesnesi olduğunu doğrulayın.
- içindeki
data_mappingalan adlarının JSONL dosyanızdaki alan adlarla tam olarak eşleşdiğini onaylayın (büyük/küçük harfe duyarlı). -
item_schemaözelliklerinin veri kümenizdeki alanlarla eşleşip eşleşmediğini kontrol edin.
Aracı yanıt değerlendirmeleriyle file_id kullandığınızda HTTP 400 hatası
Aracı yanıt değerlendirmeleri (azure_ai_responses), file_content aracılığıyla yalnızca satır içi verileri destekler.
file_id ile yanıt kimliklerini sağlarsanız, istek 400 Bad Request hatası döndürür.
Çözüm:file_content öğesine geçin ve yanıt kimliklerini satır içinde sağlayın.
Hız sınırı hataları
Kiracı, abonelik ve proje düzeylerinde değerlendirme çalıştırmaları oluşturma işlemi hız sınırına tabidir. Bir 429 Too Many Requests yanıt alırsanız:
-
retry-afterÖnerilen bekleme süresi için yanıttaki üst bilgiyi denetleyin. - Hız sınırı ayrıntıları için yanıt gövdesini gözden geçirin.
- Başarısız istekleri yeniden denerken üstel geri alma kullanın.
Bir değerlendirme işi yürütme sırasında bir 429 hatayla başarısız olursa:
- Değerlendirme veri kümenizin boyutunu küçültün veya daha küçük gruplara bölün.
- Azure portalında model dağıtımınız için dakika başına belirteç (TPM) kotasını artırın.
Araç değerlendirme hataları
Eğer bir aracın değerlendiricisi desteklenmeyen araçlar için hata döndürürse:
- Ajan değerlendiriciler için desteklenen araçları denetleyin.
- Geçici bir çözüm olarak, desteklenmeyen araçları kullanıcı tanımlı işlev araçları olarak sarmalayarak değerlendiricinin bunları değerlendirebilmesini sağlayın.