Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Evalúe las conversaciones completas de producción capturadas en Application Insights para investigar interacciones específicas o examinar una muestra del tráfico de agentes implementados.
Prerequisites
- Complete los requisitos previos de evaluación en la nube y la configuración del cliente.
- Para el flujo de trabajo de evaluación de seguimiento de versión preliminar, utilice la versión
2.7.0del SDK de Python (pip install "azure-ai-projects==2.7.0") o la versión2.7.0del SDK de JavaScript (npm install "@azure/ai-projects@2.7.0"). - Conversaciones de producción rastreadas en Application Insights.
- Evaluadores en el nivel de conversación que admitan el nivel de evaluación seleccionado.
En los ejemplos se usa el cliente del SDK configurado en Configuración del cliente del SDK.
Evaluar conversaciones por ID a partir de seguimientos
Evalúe conversaciones específicas de Application Insights proporcionando sus identificadores de conversación. Use esta opción para solucionar problemas de causa principal o comprobar correcciones en interacciones específicas. Por ejemplo, puede investigar una conversación marcada por una alerta o comprobar una corrección de un problema conocido.
Dónde encontrar identificadores de conversación
Busque identificadores de conversación en:
-
Interfaz de usuario de registros de seguimiento de Application Insights: vaya a seguimientos de interés y busque el campo
conversation_iden los detalles del seguimiento. -
Salida de registro de la aplicación : si establece
conversation_idexplícitamente al crear respuestas del agente, recuperela de los registros. -
Contexto de seguimiento de OpenTelemetry: El
conversation_idtambién puede obtenerse del encabezado traceparent si el agente usa la propagación estándar del contexto de seguimiento.
Note
Las definiciones de herramientas se recuperan automáticamente de los seguimientos o se consultan desde el registro del agente. No es necesario proporcionarlos en la solicitud.
Parámetros para la búsqueda de ID de conversación
| Parámetro | Obligatorio | Descripción |
|---|---|---|
conversation_ids |
Sí | Lista de identificadores de conversaciones para evaluar. |
lookback_hours |
No | Horas para volver a buscar desde end_time. El valor predeterminado es siete días (168 horas). |
start_time |
No | Inicio de una ventana de búsqueda explícita (formato ISO 8601). En el caso de la búsqueda basada en identificadores, proporcione tanto start_time como end_time para usar una ventana explícita en lugar de lookback_hours. |
end_time |
No | Fin de la ventana de búsqueda (formato ISO 8601). El valor predeterminado es la hora actual. Proporciónelo con start_time para usar una ventana explícita. |
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_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="output_quality",
evaluator_name="builtin.output_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="tool_use_quality",
evaluator_name="builtin.tool_use_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="deflection_rate",
evaluator_name="builtin.deflection_rate",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
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="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"},
)
Note
- La ingestión de datos de Application Insights puede provocar un retraso entre el momento en que se generan las trazas y aquel en que están disponibles para evaluarlas. Si la consulta no encuentra trazas, espere unos minutos y vuelva a intentarlo.
- Las consultas de seguimiento tienen como valor predeterminado los últimos 7 días (168 horas) cuando no se proporciona un período de tiempo explícito. Para consultar un intervalo más antiguo o personalizado, proporcione
start_timeyend_time, sujeto a la retención de Application Insights.
Para obtener un ejemplo completo de ejecución, consulte sample_multiturn_trace_evaluation_by_id.py del SDK de Python versión 2.7.0 en GitHub.
Evaluación de conversaciones muestreadas por filtro de agente
Evalúe un conjunto muestreado de conversaciones de Application Insights filtrando por el nombre del agente. Use esta opción para evaluar la calidad general del agente en el tráfico de producción. Por ejemplo, ejecute evaluaciones de calidad normales o supervise la degradación de la calidad en producción.
El agente que especifique para el filtrado puede formar parte de una conversación multiagente. El filtro coincide con cualquier conversación en la que participó ese agente.
Note
Las definiciones de herramientas se recuperan automáticamente de los seguimientos o se consultan desde el registro del agente. No es necesario proporcionarlos en la solicitud.
Campos de identidad del agente
Especifique el agente que se va a filtrar mediante uno de estos formatos:
| Formato | Example | Descripción |
|---|---|---|
agent_name + agent_version |
"agent_name": "my-agent", "agent_version": "1" |
Dos campos independientes. Si agent_version se omite, use la versión más reciente. |
agent_id |
"agent_id": "my-agent:1" |
Una sola cadena en formato "name:version". |
Estrategias de filtro
| Strategy | Descripción |
|---|---|
random_sampling |
(Valor predeterminado) Muestra aleatoria uniforme de hasta max_traces conversaciones. |
smart_filtering |
Heurística gestionada por el servicio que prioriza las trazas "interesantes": conversaciones con posibles problemas, casos extremos o anomalías. |
Parameters
| Parámetro | Obligatorio | Descripción |
|---|---|---|
agent_name |
Sí | Nombre del agente por el que se van a filtrar los seguimientos. |
agent_version |
No | La versión del agente. Si se omite, usa la versión más reciente. |
agent_id |
No | Alternativa a agent_name + agent_version. Cadena única con formato "name:version". |
start_time |
Sí | Inicio del período de tiempo (segundos de época de Unix, UTC). |
end_time |
No | Fin del período de tiempo (segundos de época de Unix, UTC). El valor predeterminado es la hora UTC actual. Rellene con +600 segundos para evitar el retraso de ingesta en el borde de la ventana. |
max_traces |
No | Número máximo de conversaciones que se van a muestrear. Su valor predeterminado es 1000. |
filter_strategy |
No |
"random_sampling" (predeterminado) o "smart_filtering" (heurística gestionada por el servicio que da prioridad a las trazas interesantes). |
Importante
El período de tiempo (end_time - start_time) debe ser de al menos 15 minutos (900 segundos). Este requisito existe porque las consultas a nivel de conversación aplican un margen de inactividad de 5 minutos en cada extremo para evitar conversaciones parciales.
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["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_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="output_quality",
evaluator_name="builtin.output_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="tool_use_quality",
evaluator_name="builtin.tool_use_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="deflection_rate",
evaluator_name="builtin.deflection_rate",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
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="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"},
)
Note
Las consultas de seguimiento tienen como valor predeterminado los últimos 7 días (168 horas) cuando no se proporciona un período de tiempo explícito. Las consultas de filtro de agente respetan start_time exactamente. Si omite end_time, el servicio usa la hora UTC actual. Puede consultar intervalos más antiguos o personalizados dentro de los límites de retención de Application Insights.
Pasos siguientes
- Para sondear la finalización e interpretar los resultados, consulte Obtención de resultados de evaluación en la nube.
- Para obtener un ejemplo completo de ejecución, consulte sample_multiturn_trace_evaluation_agent_filter.py del SDK de Python versión 2.7.0 en GitHub.
- Para evaluar las conversaciones almacenadas, consulte Evaluación de conjuntos de datos de conversación.
- Para generar conversaciones sintéticas, consulte Simulate agent conversations (Simular conversaciones de agente).