Compartir vía


Jueces de IA integrados (MLflow 2)

Importante

Databricks recomienda usar MLflow 3 para evaluar y supervisar aplicaciones de GenAI. En esta página se describe la evaluación del agente de MLflow 2.

En este artículo se describen los detalles de cada uno de los jueces de inteligencia artificial integrados en la evaluación del agente de IA de Mosaico, incluidas las entradas necesarias y las métricas de salida.

Consulte también:

Introducción a los jueces de IA

Nota:

No todos los jueces requieren etiquetas de verdad básica. Los jueces que no requieren etiquetas son útiles cuando solo tienes un conjunto de solicitudes para evaluar a tu agente.

Nombre del juez Aspecto de calidad que evalúa el juez Entradas necesarias Requiere la verdad básica
global_guideline_adherence ¿La respuesta generada cumple las directrices globales? request, response, global_guidelines (desde el evaluator_config) No, pero requiere global_guidelines
guideline_adherence ¿La respuesta generada cumple las directrices proporcionadas por pregunta? request, o response, guidelines_contextguidelines
correctness ¿Es precisa la respuesta generada (en comparación con la verdad fundamental)? request, responseo expected_facts[]expected_response
relevance_to_query ¿La dirección de respuesta (es relevante para) la solicitud del usuario? request, response No
context_sufficiency ¿El recuperador encontró documentos con suficiente información para generar la respuesta esperada? request, , retrieved_context, expected_response
safety ¿Hay contenido dañino o tóxico en la respuesta? request, response No
chunk_relevance ¿El recuperador encontró fragmentos que son útiles (relevantes) para responder a la solicitud del usuario?
Nota: Este juez se aplica por separado a cada fragmento recuperado, lo que genera una puntuación y justificación para cada fragmento. Estas puntuaciones se agregan en una puntuación chunk_relevance/precision para cada fila que representa el porcentaje de fragmentos que son pertinentes.
request, retrieved_context No
groundedness ¿Se basa la respuesta generada en el contexto recuperado (no alucinante)? request, , response, trace[retrieved_context] No
document_recall ¿Cuántos de los documentos relevantes conocidos encontraron el recuperador? retrieved_context, expected_retrieved_context[].doc_uri

Nota:

En el caso de las conversaciones multiturno, los jueces de IA evalúan solo la última entrada de la conversación.

salidas del juez de IA

Cada juez utilizado en la evaluación emite las siguientes columnas:

campo Datos Tipo Descripción
response/llm_judged/{judge_name}/rating string yes si el juez aprueba, no si el juez suspende.
response/llm_judged/{judge_name}/rationale string Razonamiento escrito del LLM para yes o no.
response/llm_judged/{judge_name}/error_message string Si se ha producido un error al calcular esta evaluación, los detalles del error están aquí. Si no hay ningún error, es NULL.

Cada juez también generará una métrica agregada para todo el recorrido.

Nombre de métrica Tipo Descripción
response/llm_judged/{judge_name}/rating/average float, [0, 1] Porcentaje de todas las evaluaciones que se consideraron yes.

Cumplimiento de las directrices

Definición: ¿La respuesta cumple las directrices proporcionadas?

Requiere la verdad básica: no cuando se usa global_guidelines. Sí cuando se usa guidelines por fila.

El cumplimiento de las directrices evalúa si la respuesta del agente sigue restricciones específicas o instrucciones proporcionadas en las directrices.

Las directrices se pueden definir de cualquiera de las maneras siguientes:

  • por fila: la respuesta de una solicitud específica debe cumplir las directrices definidas en esa fila de evaluación.
  • globalmente: todas las respuestas de cualquier solicitud deben cumplir las directrices globales.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

  • request
  • response si no ha especificado el model parámetro en mlflow.evaluate().
  • por fila guidelines o global_guidelines definida en la configuración.
  • [Solo jueces invocables] guidelines_context para proporcionar al juez un contexto arbitrario.
    • Esta característica requiere databricks-agents>=0.20.0.

Ejemplos

Use el cumplimiento de las directrices por fila de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  # You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
  "guidelines": {
    "english": ["The response must be in English"],
    "clarity": ["The response must be clear, coherent, and concise"],
  }
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["guideline_adherence"]
      }
  }
)

Use el cumplimiento de las directrices globales de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["guideline_adherence"],
          "global_guidelines": ["The response must be in English", "The response must be concise"]
      }
  }
)

Use el cumplimiento de las directrices con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.guideline_adherence(
  request="What is the capital of France?",
  response="The capital of France is Paris.",
  # You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
  guidelines={
    "english": ["The response must be in English"],
    "clarity": ["The response must be clear, coherent, and concise"],
    "grounded": ["The response must be grounded in the tool call result"],
  },
  # `guidelines_context` requires `databricks-agents>=0.20.0`
  guidelines_context={
    "tool_call_result": "{'country': 'France', 'capital': 'Paris'}",
  },
)
print(assessment)

¿Qué hacer cuando la respuesta no cumple las directrices?

Cuando la respuesta infringe las directrices:

  • Identifique qué directrices se infringió y analice por qué el agente no pudo cumplirla.
  • Ajuste el mensaje para resaltar la adhesión a directrices específicas o vuelva a entrenar el modelo con ejemplos adicionales que se alinean con el comportamiento deseado.
  • Para obtener instrucciones globales, asegúrese de que se especifican correctamente en la configuración del evaluador.

Corrección

Definición: ¿Respondió el agente con una respuesta factual y precisa?

Requiere la verdad básica: Sí, expected_facts[] o expected_response.

La corrección compara la respuesta real del agente a una etiqueta de realidad empírica y es una buena manera de detectar errores con hechos fundamentados.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

Importante

Databricks recomienda usar expected_facts[] en lugar de expected_response. expected_facts[] representa el conjunto mínimo de hechos requeridos en una respuesta correcta y son más fáciles de mantener.

Si debe usar expected_response, debe incluir solo el conjunto mínimo de hechos necesarios para una respuesta correcta. Si copia una respuesta de otro origen, edite la respuesta para quitar cualquier texto que no sea necesario para que una respuesta se considere correcta.

Incluir solo la información necesaria y dejar fuera la información que no es estrictamente necesaria en la respuesta, permite a la evaluación del agente proporcionar una señal más sólida sobre la calidad de la salida.

Ejemplos

Use la corrección de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the difference between reduceByKey and groupByKey in Spark?",
  "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
  "expected_facts": [
    "reduceByKey aggregates data before shuffling",
    "groupByKey shuffles all data",
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["correctness"]
      }
  }
)

Use la corrección con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.correctness(
  request="What is the difference between reduceByKey and groupByKey in Spark?",
  response="reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
  expected_facts=[
    "reduceByKey aggregates data before shuffling",
    "groupByKey shuffles all data",
  ]
)
print(assessment)

¿Qué hacer cuando una respuesta es incorrecta?

Cuando un agente responde con una respuesta fácticamente inexacta, debe:

  • Entienda si algún contexto recuperado por el agente es irrelevante o inexacto. En el caso de las aplicaciones RAG, puede usar el juez de suficiencia de contexto para determinar si el contexto es suficiente para generar el expected_facts o expected_response.
  • Si hay suficiente contexto, ajuste la solicitud para incluir información relevante.

Relevancia de la consulta

Definición: ¿La respuesta es relevante para la solicitud de entrada?

Requiere la verdad básica: No.

Relevancia garantiza que la respuesta del agente aborde directamente la entrada del usuario sin desviarse en temas no relacionados.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

  • request
  • response si no ha especificado el model parámetro en mlflow.evaluate().

Ejemplos

Use la relevancia de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris."
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["relevance_to_query"]
      }
  }
)

Use relevancia con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.relevance_to_query(
  request="What is the capital of France?",
  response="The capital of France is Paris."
)
print(assessment)

¿Qué hacer cuando una respuesta no es relevante?

Cuando el agente proporcione una respuesta irrelevante, tenga en cuenta los pasos siguientes:

  • Evalúe si el modelo ha comprendido la solicitud y ajuste en consecuencia el recuperador, los datos de entrenamiento o las instrucciones.

Suficiencia de contexto

Definición: ¿Son suficientes los documentos recuperados para generar la respuesta esperada?

Requiere la verdad básica: Sí, expected_facts o expected_response.

La suficiencia del contexto evalúa si los documentos recuperados proporcionan toda la información necesaria para generar la respuesta esperada.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

Ejemplos

Use la suficiencia de contexto de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."}
  ],
  "expected_facts": [
    "Paris"
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["context_sufficiency"]
      }
  }
)

Use la suficiencia de contexto con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.context_sufficiency(
  request="What is the capital of France?",
  retrieved_context=[
    {"content": "Paris is the capital city of France."}
  ]
)
print(assessment)

¿Qué hacer cuando el contexto no es suficiente?

Cuando el contexto no es suficiente:

  • Mejore el mecanismo de recuperación para asegurarse de que se incluyen todos los documentos necesarios.
  • Modifique la indicación del modelo para hacer referencia explícitamente a la información que falta o dé prioridad al contexto pertinente.

Seguridad

Definición: ¿La respuesta evita contenido tóxico o dañino?

Requiere la verdad básica: No.

La seguridad garantiza que las respuestas del agente no contengan contenido dañino, ofensivo o tóxico.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

  • request
  • response si no ha especificado el model parámetro en mlflow.evaluate().

Ejemplos

Use la seguridad de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris."
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["safety"]
      }
  }
)

Use la seguridad con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.safety(
  request="What is the capital of France?",
  response="The capital of France is Paris."
)
print(assessment)

¿Qué hacer cuando la respuesta no es segura?

Cuando la respuesta incluye contenido perjudicial:

  • Analice la solicitud para identificar si podría provocar accidentalmente respuestas no seguras. Modifique la entrada si es necesario.
  • Refinar el modelo o pedir que evite explícitamente la generación de contenido dañino o tóxico.
  • Utilice mecanismos de seguridad adicionales, como filtros de contenido, para interceptar respuestas no seguras antes de llegar al usuario.

Base

Definición: ¿La respuesta es coherente con el contexto recuperado?

Requiere la verdad básica: No.

La fundamentación evalúa si la respuesta del agente está alineada con la información proporcionada en el contexto recuperado.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

  • request
  • response si no ha especificado el model parámetro en mlflow.evaluate().
  • retrieved_context[].content si no usa el argumento model en la llamada a mlflow.evaluate().

Ejemplos

Use la base de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."}
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["groundedness"]
      }
  }
)

Use la base con el SDK de juez disponible:

from databricks.agents.evals import judges

assessment = judges.groundedness(
  request="What is the capital of France?",
  response="The capital of France is Paris.",
  retrieved_context=[
    {"content": "Paris is the capital city of France."}
  ]
)
print(assessment)

¿Qué hacer cuando la respuesta no tiene fundamento?

Cuando la respuesta no está fundamentada:

  • Revise el contexto recuperado para asegurarse de que incluye la información necesaria para generar la respuesta esperada.
  • Si el contexto no es suficiente, mejore el mecanismo de recuperación o el conjunto de datos para incluir documentos pertinentes.
  • Modifique el mensaje para indicar al modelo que dé prioridad mediante el contexto recuperado al generar respuestas.

Relevancia de fragmentos

Definición: ¿Los fragmentos recuperados son relevantes para la solicitud de entrada?

Requiere la verdad básica: No.

La relevancia del fragmento mide si cada fragmento es relevante para la solicitud de entrada.

Entradas necesarias

El conjunto de evaluación de entrada debe tener las columnas siguientes:

  • request
  • retrieved_context[].content si no ha especificado el model parámetro en mlflow.evaluate().

Si no utiliza el argumento model en la llamada a mlflow.evaluate(), debe proporcionar retrieved_context[].content o trace.

Ejemplos

En este ejemplo se usa el juez de relevancia del fragmento con una métrica de precisión personalizada para calcular una puntuación de precisión de nivel de fila. Para más información sobre las métricas personalizadas, consulte Métricas personalizadas (MLflow 2)

import mlflow
from mlflow.evaluation import Assessment

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."},
    {"content": "The best baguettes are in Nice."},
    {"content": "Mount Everest is  the highest mountain in the world."},
  ],
}]

def judged_precision_at_k(request, retrieved_context, k):
  judged_precisions = [judges.chunk_relevance(request, [doc]) for doc in retrieved_context[:k]]
  precision_at_k = sum([1 if judgement[0].value =='yes' else 0 for judgement in judged_precisions]) / k

  rationales = [
    f"""## Chunk ID {i+1}: `{retrieved_context[i]['doc_uri']}`
    - **{judged_precisions[i][0].value}**: `{judged_precisions[i][0].rationale}`"""
    for i in range(0, k-1)]

  return Assessment(name=f'judged_precision_at_{k}', value=precision_at_k, rationale='\n'.join(rationales))

@metric
def judged_precision_at_3(request, retrieved_context):
  k = 3
  return judged_precision_at_k(request=request, retrieved_context=retrieved_context,  k=k)

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["chunk_relevance"]
      }
  },
  extra_metrics=[judged_precision_at_3]
)

Use chunk_relevance con el SDK de juez disponible:

from databricks.agents.evals import judges

# NOTE: This callable judge returns an assessment per item in the retrieved context.
assessments = judges.chunk_relevance(
  request="What is the capital of France?",
  retrieved_context=[
    {"content": "Paris is the capital city of France."},
    {"content": "The chicken crossed the road."},
  ]
)
print(assessments)

¿Qué hacer cuando los fragmentos recuperados son irrelevantes?

Cuando se recuperan fragmentos irrelevantes:

  • Evalúe la configuración del recuperador y ajuste los parámetros para priorizar la relevancia.
  • Afine los datos de entrenamiento del recuperador para incluir ejemplos más diversos o precisos.

Recuperación de documentos

Definición: ¿Cuántos de los documentos relevantes conocidos encontraron el recuperador?

Requiere la verdad básica: Sí, expected_retrieved_context[].doc_uri.

La recuperación de documentos mide la proporción de documentos pertinentes de verdad básica que se recuperaron en comparación con el número total de documentos pertinentes en la verdad básica.

Entradas necesarias

El conjunto de evaluación de entrada debe tener la columna siguiente:

  • expected_retrieved_context[].doc_uri

Además, si no usa el argumento model en la llamada a mlflow.evaluate(), también debe proporcionar retrieved_context[].doc_uri o trace.

Ejemplos

Use la recuperación de documentos de un conjunto de evaluación:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "expected_retrieved_context": [
    {"doc_uri": "doc_123"},
    {"doc_uri": "doc_456"}
  ],
  "retrieved_context": [
    {"doc_uri": "doc_123"}
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["document_recall"]
      }
  }
)

No hay ningún SDK de juez invocable para esta métrica, ya que no usa un juez de IA.

¿Qué hacer cuando la recuperación de documentos es baja?

Cuando el recuerdo es bajo:

  • Compruebe que los datos de la verdad fundamental reflejen con precisión los documentos pertinentes.
  • Mejore el recuperador o ajuste los parámetros de búsqueda para aumentar la recuperación.

Jueces de IA personalizados

También puede crear un juez personalizado para realizar evaluaciones específicas de su caso de uso.

Para obtener más información, consulte: