Configurar a avaliação avançada para agentes

Prévia

Este recurso está em Prévia pública.

Este artigo descreve e demonstra como configurar as seguintes técnicas avançadas de avaliação para aplicativos agênticos:

  • Configurar juízes de LLM definidos pelo cliente.

  • Apresentar exemplos de few-shot para juízes de LLM.

  • Avaliar as inscrições usando apenas um subconjunto de juízes do LLM.

Juízes de LLM definidos pelo cliente

Os casos de uso comuns em que os juízes definidos pelo cliente podem ser úteis são os seguintes:

  • Avalie seu aplicativo de acordo com os critérios específicos do seu caso de uso comercial. Por exemplo:

    • Avalie se seu aplicativo produz respostas que se alinham com o tom de voz da empresa

    • Determine se a resposta de seus aplicativos sempre segue um formato específico.

  • Testes e iteração em guardrails. Você pode utilizar o prompt do seu guardrail no juiz definido pelo cliente e iterar para chegar a um prompt que funcione bem. Em seguida, você implementaria a barreira e utilizaria o juiz do LLM para avaliar a frequência com que a barreira está ou não funcionando.

A Databricks refere-se a esses casos de uso como avaliações. Há dois tipos de avaliações de LLM definidas pelo cliente:

Tipo

O que avalia?

Como a pontuação é informada?

Avaliação de resposta

O juiz do LLM é chamado para cada resposta gerada. Por exemplo, se o senhor tivesse 5 perguntas com respostas correspondentes, o juiz seria chamado 5 vezes (uma vez para cada resposta).

Para cada resposta, é informado um yes ou no com base em seus critérios. yes saídas são agregadas a uma porcentagem para todo o conjunto de avaliação.

Avaliação da recuperação

Executar a avaliação de cada bloco recuperado (se o aplicativo executar a recuperação). Para cada pergunta, o juiz do LLM é chamado para cada bloco que foi recuperado para essa pergunta. Por exemplo, se o senhor tivesse 5 perguntas e cada uma tivesse 3 blocos recuperados, o juiz seria chamado 15 vezes.

Para cada bloco, um yes ou no é relatado com base em seus critérios. Para cada pergunta, a porcentagem de pedaços yes é informada como precisão. A precisão por pergunta é agregada a uma precisão média para todo o conjunto de avaliação.

Você pode configurar um juiz LLM definido pelo cliente utilizando os seguintes parâmetros:

Opção

Descrição

Requisitos

model

O nome do endpoint do endpoint da API Foundation Model que receberá solicitações para esse juiz personalizado.

O endpoint deve ser comopatível com a assinatura /llm/v1/chat .

name

O nome da avaliação que também é usado para as métricas de saída.

judge_prompt

O prompt que implementa a avaliação, com variáveis entre chaves. Por exemplo, "Aqui está uma definição que usa {request} e {response}".

metric_metadata

Um dicionário que fornece parâmetros adicionais para o juiz. Notavelmente, o dicionário deve incluir um "assessment_type" com valor "RETRIEVAL" ou "ANSWER" para especificar o tipo de avaliação.

O prompt contém variáveis que são substituídas pelo conteúdo do conjunto de avaliação antes de ser enviado para o endpoint_name especificado para recuperar a resposta. O prompt é minimamente envolvido em instruções de formatação que analisam uma pontuação numérica em [1,5] e uma justificativa do resultado do juiz. A pontuação analisada é então transformada em yes se for maior que 3 e no caso contrário (consulte o código de exemplo abaixo sobre como usar metric_metadata para alterar o limite default de 3). O prompt deve conter instruções sobre a interpretação dessas diferentes pontuações, mas deve evitar instruções que especifiquem um formato de saída.

As seguintes variáveis são suportadas:

Variável

ANSWER avaliação

RETRIEVAL avaliação

request

coluna de solicitação do conjunto de dados de avaliação

coluna de solicitação do conjunto de dados de avaliação

response

coluna de resposta do conjunto de dados de avaliação

coluna de resposta do conjunto de dados de avaliação

expected_response

expected_response coluna do conjunto de dados de avaliação

coluna expected_response do conjunto de dados de avaliação

retrieved_context

Conteúdo concatenado da coluna retrieved_context

Conteúdo individual na coluna retrieved_context

O exemplo a seguir usa a API `make_genai_metric_from_prompt` do MLFlow para especificar os objetos has_pii e professional . Eles são passados para o argumento extra_metrics em mlflow.evaluate como uma lista durante a avaliação.


from mlflow.metrics.genai import make_genai_metric_from_prompt

# Define a custom assessment to detect PII in the retrieved chunks. The default threshold of 3 will be used to convert the output numerical
# score to "yes" or "no".

has_pii_prompt = "Your task is to determine whether the retrieved content has any PII information. This was the content: '{retrieved_context}'"

has_pii = make_genai_metric_from_prompt(
    name="has_pii",
    judge_prompt=has_pii_prompt,
    model="endpoints:/ep-gpt-4-turbo-2024-04-09",
    metric_metadata={"assessment_type": "RETRIEVAL"},
)

# Define a custom assessment to determine if the tone of the answer is professional. The numerical threshold for conversion to "yes"/"no"
# is set to 2.

professional_prompt = "Your task is to determine if the response has a professional tone. The response is: '{response}'"

professional = make_genai_metric_from_prompt(
    name="professional",
    judge_prompt=professional_prompt,
    model="endpoints:/ep-gpt-4-turbo-2024-04-09",
    metric_metadata={"assessment_type": "ANSWER", "score_threshold": "2"},
)
# Use the custom judges in evaluation
results = mlflow.evaluate(..., model_type="databricks-agent", extra_metrics=[has_pii, professional])

# Process results from the custom judges
per_question_results_df = results.tables['eval_results']

# Show information about responses that are not professional
per_question_results_df[per_question_results_df["response/llm_judged/professional/rating"] == "no"].display()

Apresente exemplos para os juízes integrados do LLM

Você pode passar exemplos específicos de domínio aos juízes internos fornecendo alguns exemplos "yes" ou "no" para cada tipo de avaliação. Esses exemplos são chamados de exemplos few-shot e podem ajudar os juízes integrados a se alinharem melhor com os critérios de classificação específicos do domínio. Consulte Criar exemplos de few-shots.

A Databricks recomenda fornecer pelo menos um exemplo "yes" e um "no". Os melhores exemplos são os seguintes:

  • Exemplos que os juízes erraram anteriormente, em que você apresenta uma resposta correta como exemplo.

  • Exemplos difíceis, como exemplos com nuances ou difíceis de determinar como verdadeiros ou falsos.

A Databricks também recomenda que o senhor forneça uma justificativa para a resposta. Isso ajuda a melhorar a capacidade do juiz de explicar seu raciocínio.

Para passar os exemplos de poucos disparos, o senhor precisa criar um dataframe que espelhe a saída de mlflow.evaluate() para os juízes correspondentes. Aqui está um exemplo para os juízes de correção de respostas, fundamentação e relevância de partes:


%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)

"""

Inclua os exemplos de few-shots no parâmetro evaluator_config de mlflow.evaluate.


evaluation_results = mlflow.evaluate(
...,
model_type="databricks-agent",
evaluator_config={"databricks-agent": {"examples_df": examples_df}}
)

Crie alguns exemplos de few-shots

As etapas a seguir são diretrizes para criar um conjunto de exemplos de few-shot.

  1. Tente encontrar grupos de exemplos semelhantes que o juiz entendeu errado.

  2. Para cada grupo, escolha um único exemplo e ajuste o rótulo ou justificativa para refletir o comportamento desejado. A Databricks recomenda fornecer uma justificativa que explique a classificação.

  3. Execute novamente a avaliação com o novo exemplo.

  4. Repita conforme o necessário para atingir diversas categorias de erros.

Observação

Vários exemplos de few-shot podem afetar negativamente o desempenho do juiz. Durante a avaliação, o Databricks limita o número de exemplos de few-shots a cinco, mas recomenda o uso de menos exemplos direcionados para obter o melhor desempenho.

Avalie agentes utilizando um subconjunto de juízes do LLM

Por padrão, a avaliação executa todos os juízes do LLM disponíveis. Para executar somente um subconjunto dos juízes do LLM, crie uma configuração personalizada.

Observação

Você não pode desativar as métricas de julgamento que não são do LLM para recuperação de fragmentos, contagem de tokens em cadeia ou latência.

A seguir são mostradas as opções de configuração para avaliação utilizando juízes de LLM que não exigem verdade fundamentada ou nenhum juiz de LLM.

%pip install databricks-agents pandas
dbutils.library.restartPython()

import mlflow
import pandas as pd

# Run only LLM judges that don't require ground-truth
config = {
   "metrics": ["groundedness", "relevance_to_query", "chunk_relevance"]
}
# Run no LLM judges
config = {
   "metrics": []
}

Depois de definir sua configuração, você pode especificá-la no parâmetro evaluator_config de mlflow.evaluate.


evaluation_results = mlflow.evaluate(
  ...,
  model_type="databricks-genai",
  evaluator_config={"databricks-genai": config})