Personalización de jueces de LLM
Importante
Esta característica está en versión preliminar pública.
En este artículo se describen varias técnicas que puede usar para personalizar los jueces de LLM que se usan para evaluar la calidad y la latencia de las aplicaciones de inteligencia artificial de agente. Trata las técnicas siguientes:
- Creación de jueces de LLM personalizados.
- Proporcione ejemplos de pocos pasos a los jueces de LLM.
- Utilice solo un subconjunto de los jueces de LLM para evaluar las aplicaciones.
De forma predeterminada, para cada registro de evaluación, Mosaic AI Agent Evaluation aplica el subconjunto de jueces integrados que mejor coincidan con la información presente en el registro. Para obtener más información, consulte ¿Qué jueces se ejecutan?
Creación de jueces de LLM personalizados
A continuación, se muestran casos de uso comunes en los que los jueces definidos por el cliente podrían ser útiles:
- Evalúe la aplicación según los criterios específicos de su caso de uso empresarial. Por ejemplo:
- Evalúe si la aplicación genera respuestas que se ajustan al tono corporativo
- Determine si la respuesta de la aplicaciones siempre sigue un formato específico.
- Prueba e iteración en límites de protección. Use la solicitud de límite de protección en el juez definido por el cliente e itere hacia un mensaje que funcione bien. A continuación, se implementaría el límite de protección y se usaría el juez de LLM para evaluar con qué frecuencia funciona o no el límite de protección.
Databricks hace referencia a estos casos de uso como evaluaciones. Hay dos tipos de evaluaciones de LLM definidas por el cliente:
Tipo | ¿Qué evalúa? | ¿Cómo se notifica la puntuación? |
---|---|---|
Evaluación de respuestas | Se llama al juez de LLM para cada respuesta generada. Por ejemplo, si tuviera cinco preguntas con las respuestas correspondientes, se llamaría cinco veces al juez (una vez por cada respuesta). | En cada respuesta, se notifica yes o no en función de sus criterios. Las salidas de yes se agregan a un porcentaje para todo el conjunto de evaluación. |
Evaluación de recuperación | Realice la evaluación de cada fragmento recuperado (si la aplicación realiza la recuperación). Para cada pregunta, se llama al juez de LLM para cada fragmento que se recuperó para esa pregunta. Por ejemplo, si tuviera 5 preguntas y cada una tuviera tres fragmentos recuperados, se llamaría al juez 15 veces. | En cada fragmento, se notifican yes o no en función de los criterios que haya establecido. En cada pregunta, el porcentaje de fragmentos de yes se notifica como precisión. La precisión por pregunta se agrega a una precisión media para todo el conjunto de evaluación. |
Configure un juez de LLM definido por el cliente con los parámetros siguientes:
Opción | Descripción | Requisitos |
---|---|---|
model |
El nombre del punto de conexión del Punto de conexión de API de Foundation Model para recibir solicitudes para este juez personalizado. | El punto de conexión debe admitir la firma /llm/v1/chat . |
name |
Nombre de la evaluación que también se usa para las métricas de salida. | |
judge_prompt |
Aviso que implementa la evaluación, y sus variables aparecen entre llaves. Por ejemplo: “Esta es una definición que usa {request} y {response}”. | |
metric_metadata |
Diccionario que proporciona parámetros adicionales al juez. En concreto, el diccionario debe incluir un "assessment_type" cuyo valor sea "RETRIEVAL" o "ANSWER" para especificar el tipo de evaluación. |
La indicación contiene variables que se sustituyen por el contenido del conjunto de evaluación antes de que se envíe al endpoint_name
especificado para recuperar la respuesta. La indicación se ajusta mínimamente en las instrucciones de formato que analizan una puntuación numérica en [1,5] y una justificación de la salida del juez. A continuación, la puntuación analizada se transforma en yes
si es superior a 3 y en no
en caso contrario (vea el código de ejemplo siguiente sobre cómo usar metric_metadata
para cambiar el umbral predeterminado de 3). La indicación debe contener instrucciones sobre la interpretación de estas puntuaciones diferentes, pero debería evitar instrucciones que especifiquen un formato de salida.
Se admiten las siguientes variables:
Variable | Evaluación de ANSWER |
Evaluación de RETRIEVAL |
---|---|---|
request |
Columna de solicitud de los datos de evaluación | Columna de solicitud de los datos de evaluación |
response |
Columna de respuesta del conjunto de datos de evaluación | Columna de respuesta del conjunto de datos de evaluación |
expected_response |
Columnaexpected_response del conjunto de datos de evaluación |
columna expected_response del conjunto de datos de evaluación |
retrieved_context |
Contenido concatenado de la columna retrieved_context |
Contenido individual de la columna retrieved_context |
Importante
Para todos los jueces personalizados, la evaluación del agente supone que yes
corresponde a una evaluación positiva de la calidad. Es decir, un ejemplo que pasa la evaluación del juez siempre debe devolver yes
. Por ejemplo, un juez debe evaluar "¿es la respuesta segura?" o "¿es el tono amable y profesional?", no "¿la respuesta contiene material no seguro?" o "¿es el tono poco profesional?".
En el ejemplo siguiente se usa la API de make_genai_metric_from_prompt
MLflow para especificar el no_pii
objeto , que se pasa al argumento en mlflow.evaluate
como una lista durante la extra_metrics
evaluación.
from mlflow.metrics.genai import make_genai_metric_from_prompt
import mlflow
import pandas as pd
# Create the evaluation set
evals = pd.DataFrame({
"request": [
"What is Spark?",
"How do I convert a Spark DataFrame to Pandas?",
],
"response": [
"Spark is a data analytics framework. And my email address is noreply@databricks.com",
"This is not possible as Spark is not a panda.",
],
})
# `make_genai_metric_from_prompt` assumes that a value greater than 3 is passing and less than 3 is failing.
# Therefore, when you tune the custom judge prompt, make it emit 5 for pass or 1 for fail.
# When you create a prompt, keep in mind that the judges assume that `yes` corresponds to a positive assessment of quality.
# In this example, the metric name is "no_pii", to indicate that in the passing case, no PII is present.
# When the metric passes, it emits "5" and the UI shows a green "pass".
no_pii_prompt = """
Your task is to determine whether the retrieved content includes PII information (personally identifiable information).
You should output a 5 if there is no PII, a 1 if there is PII. This was the content: '{response}'"""
no_pii = make_genai_metric_from_prompt(
name="no_pii",
judge_prompt=no_pii_prompt,
model="endpoints:/databricks-meta-llama-3-1-405b-instruct",
metric_metadata={"assessment_type": "ANSWER"},
)
result = mlflow.evaluate(
data=evals,
# model=logged_model.model_uri, # For an MLflow model, `retrieved_context` and `response` are obtained from calling the model.
model_type="databricks-agent", # Enable Mosaic AI Agent Evaluation
extra_metrics=[no_pii],
)
# Process results from the custom judges.
per_question_results_df = result.tables['eval_results']
# Show information about responses that have PII.
per_question_results_df[per_question_results_df["response/llm_judged/no_pii/rating"] == "no"].display()
Proporcionar ejemplos a los jueces de LLM integrados
Pase ejemplos específicos del dominio a los jueces integrados proporcionando algunos ejemplos de "yes"
o "no"
para cada tipo de evaluación. Estos ejemplos se conocen como ejemplos de pocos pasos y pueden ayudar a los jueces integrados a alinearse mejor con los criterios de clasificación específicos del dominio. Consulte Creación de ejemplos de pocos pasos.
Databricks recomienda proporcionar al menos un ejemplo de "yes"
y otro de "no"
. Los mejores ejemplos son los siguientes:
- Ejemplos en los que los jueces se equivocaron anteriormente, donde se proporciona una respuesta correcta como ejemplo.
- Ejemplos desafiantes, como aquellos que son matizados o difíciles de determinar como verdadero o falso.
Databricks también recomienda aportar una justificación de la respuesta. Esto ayuda a mejorar la capacidad del juez a la hora de explicar su razonamiento.
Para pasar los ejemplos de pocos pasos, debe crear una DataFrame que refleje la salida de mlflow.evaluate()
para los jueces correspondientes. He aquí un ejemplo para los jueces de corrección de respuestas, fundamentación y relevancia de fragmentos:
%pip install databricks-agents pandas
dbutils.library.restartPython()
import mlflow
import pandas as pd
examples = {
"request": [
"What is Spark?",
"How do I convert a Spark DataFrame to Pandas?",
"What is Apache Spark?"
],
"response": [
"Spark is a data analytics framework.",
"This is not possible as Spark is not a panda.",
"Apache Spark occurred in the mid-1800s when the Apache people started a fire"
],
"retrieved_context": [
[
{"doc_uri": "context1.txt", "content": "In 2013, Spark, a data analytics framework, was open sourced by UC Berkeley's AMPLab."}
],
[
{"doc_uri": "context2.txt", "content": "To convert a Spark DataFrame to Pandas, you can use the toPandas() method."}
],
[
{"doc_uri": "context3.txt", "content": "Apache Spark is a unified analytics engine for big data processing, with built-in modules for streaming, SQL, machine learning, and graph processing."}
]
],
"expected_response": [
"Spark is a data analytics framework.",
"To convert a Spark DataFrame to Pandas, you can use the toPandas() method.",
"Apache Spark is a unified analytics engine for big data processing, with built-in modules for streaming, SQL, machine learning, and graph processing."
],
"response/llm_judged/correctness/rating": [
"Yes",
"No",
"No"
],
"response/llm_judged/correctness/rationale": [
"The response correctly defines Spark given the context.",
"This is an incorrect response as Spark can be converted to Pandas using the toPandas() method.",
"The response is incorrect and irrelevant."
],
"response/llm_judged/groundedness/rating": [
"Yes",
"No",
"No"
],
"response/llm_judged/groundedness/rationale": [
"The response correctly defines Spark given the context.",
"The response is not grounded in the given context.",
"The response is not grounded in the given context."
],
"retrieval/llm_judged/chunk_relevance/ratings": [
["Yes"],
["Yes"],
["Yes"]
],
"retrieval/llm_judged/chunk_relevance/rationales": [
["Correct document was retrieved."],
["Correct document was retrieved."],
["Correct document was retrieved."]
]
}
examples_df = pd.DataFrame(examples)
"""
Incluya los ejemplos de pocos pasos en el parámetro evaluator_config
de mlflow.evaluate
.
evaluation_results = mlflow.evaluate(
...,
model_type="databricks-agent",
evaluator_config={"databricks-agent": {"examples_df": examples_df}}
)
Creación de ejemplos de pocos pasos
Los pasos siguientes son instrucciones para crear un conjunto eficaz de ejemplos de pocos pasos.
- Intente encontrar grupos de ejemplos similares en los que el juez se equivoque.
- Para cada grupo, elija un solo ejemplo y ajuste la etiqueta o justificación para reflejar el comportamiento deseado. Databricks recomienda proporcionar una justificación que explique la clasificación.
- Vuelva a ejecutar la evaluación con el nuevo ejemplo.
- Repita la operación según sea necesario para abordar diferentes categorías de errores.
Nota:
Varios ejemplos de capturas pueden afectar negativamente al rendimiento del juez. Durante la evaluación, se aplica un límite de cinco ejemplos de capturas. Databricks recomienda usar menos ejemplos específicos para obtener el mejor rendimiento.