다음을 통해 공유


LLM 판정자 사용자 지정

Important

이 기능은 공개 미리 보기 상태입니다.

이 문서에서는 에이전트 AI 애플리케이션품질 및 대기 시간을 평가하는 데 사용되는 LLM 심사위원을 사용자 지정하는 데 사용할 수 있는 몇 가지 기술을 설명합니다. 주로 다음과 같은 기술입니다.

  • 사용자 지정 LLM 판정자를 만듭니다.
  • LLM 판정자에게 퓨샷 예제를 제공합니다.
  • LLM 판정자의 하위 집합만 사용하여 애플리케이션을 평가합니다.

기본 제공 심사위원의 하위 집합 실행

기본적으로 각 평가 레코드에 대해 에이전트 평가는 레코드에 있는 정보와 가장 일치하는 기본 제공 심사위원을 적용합니다. evaluator_configmlflow.evaluate() 인수를 사용하여 각 요청에 적용할 심사위원을 명시적으로 지정할 수 있습니다.

evaluation_results = mlflow.evaluate(
  data=eval_df,
  model_type="databricks-agent",
  evaluator_config={
    "databricks-agent": {
      # Run only this subset of built-in judges.
      "metrics": ["groundedness", "relevance_to_query", "chunk_relevance", "safety"]
    }
  }
)

참고 항목

청크 검색, 체인 토큰 수 또는 대기 시간에 대해 LLM이 아닌 메트릭을 사용하지 않도록 설정할 수 없습니다.

자세한 내용은 어떤 심사위원들이 실행되는지 참조하세요.

사용자 지정 LLM 판정자 만들기

다음은 고객 정의 심사위원이 유용할 수 where 일반적인 사용 사례입니다.

  • 비즈니스 사용 사례와 관련된 기준에 대해 애플리케이션을 평가합니다. 예:
    • 애플리케이션이 회사 음성 톤에 맞는 응답을 생성하는지 평가합니다.
    • 애플리케이션의 응답이 항상 특정 형식을 따르는지 확인합니다.
  • 가드레일을 테스트하고 반복합니다. 고객 정의 판정자에서 가드레일의 프롬프트를 사용하고 잘 작동하는 프롬프트를 반복할 수 있습니다. 그런 다음 가드레일을 구현하고 LLM 판정자를 사용하여 가드레일이 작동하거나 작동하지 않는 빈도를 평가합니다.

Databricks는 이러한 사용 사례를 평가라고 합니다. 고객 정의 LLM 평가에는 다음 두 가지 유형이 있습니다.

Type 무엇을 평가하나요? 점수는 어떻게 보고되나요?
응답 평가 생성된 각 답변마다 LLM 판정자가 호출됩니다. 예를 들어 5개의 질문과 그에 상응하는 답변이 있는 경우 판정자는 5번(각 답변에 대해 한 번씩) 호출됩니다. 각 답변에 대해 조건에 따라 yes 또는 no가 보고됩니다. yes 출력은 전체 평가 set대한 백분율로 집계됩니다.
검색 평가 검색된 각 청크에 대한 평가를 수행합니다(애플리케이션이 검색을 수행하는 경우). 각 질문에 대해 LLM 판정자는 해당 질문에 대해 검색된 각 청크에 대해 호출됩니다. 예를 들어 5개의 질문이 있고 각각 3개의 검색된 청크가 있는 경우 판정자는 15번 호출됩니다. 각 청크에 대해 조건에 따라 yes 또는 no가 보고됩니다. 각 질문에 대해 yes 청크의 백분율이 정밀도로 보고됩니다. 질문당 정밀도는 전체 평가 set에 대한 평균 정밀도로 집계됩니다.

고객이 정의한 LLM 판사를 다음 parameters을 사용하여 구성할 수 있습니다.

옵션 설명 요구 사항
model 이 사용자 지정 판정자에 대한 요청을 수신하는 Foundation Model API 엔드포인트의 엔드포인트 이름입니다. 엔드포인트는 /llm/v1/chat 서명을 지원해야 합니다.
name 출력 메트릭에도 사용되는 평가의 이름입니다.
judge_prompt 중괄호로 묶인 변수를 사용하여 평가를 구현하는 프롬프트입니다. 예를 들어 "{request} 및 {response}를 사용하는 정의는 다음과 같습니다".
metric_metadata 판사에게 추가적인 parameters를 제공하는 사전입니다. 특히, 사전에는 평가 유형을 지정하기 위해 값이 "assessment_type" 또는 "RETRIEVAL""ANSWER"이 포함되어야 합니다.

지정된 endpoint_name에게 보내지기 전에 프롬프트에 포함된 변수들은 응답을 받기 위해 평가 set 내용으로 대체됩니다. 프롬프트는 [1,5]의 숫자 점수와 판정자의 출력의 근거를 구문 분석하는 서식 지정 지침으로 최소한으로 래핑됩니다. 구문 분석된 점수는 3보다 높은 경우 yes로, 그렇지 않은 경우 no로 변환됩니다(metric_metadata를 사용하여 기본 임계값 3을 변경하는 방법에 대한 아래 샘플 코드 참조). 프롬프트에는 이러한 다양한 점수의 해석에 대한 지침이 포함되어야 하지만 출력 형식을 지정하는 지침은 피해야 합니다.

지원되는 변수는 다음과 같습니다.

변수 ANSWER 평가 RETRIEVAL 평가
request 평가 데이터 set의 요청 column 요청 column의 평가 데이터 set
response 평가 데이터 set의 응답 column 평가 데이터 set 응답 column
expected_response 평가 데이터 expected_responsecolumnset 평가 데이터 set의 예상 응답 column
retrieved_context retrieved_context column 연결된 콘텐츠 retrieved_context column 개별 콘텐츠

Important

모든 사용자 지정 판정자의 경우 에이전트 평가는 yes가 품질에 대한 긍정적인 평가에 해당한다고 가정합니다. 즉, 판정자의 평가를 통과하는 예는 항상 yes를 반환해야 합니다. 예를 들어 판정자는 "응답이 안전한가?" 또는 "어조가 친절하고 전문적인가?”를 평가해야지 "응답에 안전하지 않은 내용이 포함되어 있는가?" 또는 "어조가 비전문적인가?"를 평가해서는 안 됩니다.

다음 예제에서는 MLflow의 make_genai_metric_from_prompt API를 사용하여, 평가 중에 list로 mlflow.evaluateextra_metrics 인수에 전달되는 no_pii 개체를 지정하는 것입니다.

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

기본 제공 LLM 판정자에게 예제 제공

각 평가 유형에 대한 몇 가지 "yes" 또는 "no" 예제를 제공하여 기본 제공 판정자에게 도메인별 예제를 전달할 수 있습니다. 이러한 예제는 퓨샷 예제라고 하며 기본 제공 판정자가 도메인별 평가 조건에 더 잘 부합하는 데 도움이 될 수 있습니다. 퓨샷 예제 만들기를 참조 하세요.

Databricks는 하나 이상의 "yes""no" 예제를 제공할 것을 권장합니다. 가장 좋은 예제는 다음과 같습니다.

  • 이전에 심사위원이 잘못 판단한 사례를 들면, 예로서 where 올바르게 응답하세요.
  • 미묘한 차이가 있거나 true 또는 false로 판단하기 어려운 예제와 같은 까다로운 예제입니다.

또한 Databricks는 응답에 대한 근거를 제공할 것을 권장합니다. 이것은 추론을 explain 판사의 능력을 향상시키는 데 도움이됩니다.

퓨샷 예제를 전달하려면 해당 판정자의 mlflow.evaluate() 출력을 미러링하는 데이터 프레임을 만들어야 합니다. 다음은 답변 정확성, 근거 및 청크 관련성 판정자의 예입니다.


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

"""

evaluator_configmlflow.evaluate 매개 변수에 퓨샷 예제를 포함합니다.


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

퓨샷 예제 만들기

다음 단계는효과적인 몇 샷 예제의 만드는 지침입니다.

  1. 판정자가 틀렸던 유사한 예들을 모아보세요.
  2. 각 그룹에서 하나의 예제를 선택하여 원하는 동작을 반영하도록 레이블 또는 근거를 조정합니다. Databricks는 등급을 설명하는 근거를 제공할 것을 권장합니다.
  3. 새 예제를 사용하여 평가를 다시 실행합니다.
  4. 필요에 따라 반복하여 다양한 오류 범주를 대상으로 지정합니다.

참고 항목

몇 번의 몇 번의 예제는 판사 성능에 부정적인 영향을 미칠 수 있습니다. 평가 중에는 5개의 샘플 예제에 대해 limit 적용이 강제됩니다. Databricks는 최상의 성능을 위해 더 적은 대상 예제를 사용하는 것이 좋습니다.