다음을 통해 공유


평가 흐름 및 메트릭 사용자 지정

평가 흐름은 메트릭을 평가하여 실행의 출력이 특정 기준 및 목표와 얼마나 잘 일치하는지 평가하는 특별한 형식의 흐름입니다.

프롬프트 흐름에서는 작업 및 목표에 맞게 고유한 평가 흐름과 메트릭을 사용자 지정하거나 만든 다음 다른 흐름을 평가하는 데 사용할 수 있습니다. 이 문서에서 알아볼 내용은 다음과 같습니다.

  • 프롬프트 흐름의 평가 이해
    • 입력
    • 출력 및 메트릭 로깅
  • 평가 흐름을 개발하는 방법
  • 일괄 실행에서 사용자 지정된 평가 흐름을 사용하는 방법

프롬프트 흐름의 평가 이해

프롬프트 흐름에서 흐름은 입력을 처리하고 출력을 생성하는 일련의 노드입니다. 마찬가지로 평가 흐름은 필요한 입력을 받아 해당 출력을 생성할 수 있습니다. 이러한 출력은 많은 경우 점수 또는 메트릭입니다. 평가 흐름의 개념은 표준 흐름의 개념과 유사하지만 작성 환경과 그 환경이 사용되는 방식에는 몇 가지 차이점이 있습니다.

평가 흐름의 몇 가지 특별한 기능은 다음과 같습니다.

  • 이러한 워크플로는 일반적으로 출력을 수신하여 테스트되는 실행 후에 실행됩니다. 출력을 사용하여 점수 및 메트릭을 계산합니다. 평가 흐름의 출력은 테스트 중인 흐름의 성능을 측정하는 결과입니다.
  • 테스트 데이터 세트를 통해 테스트 중인 흐름의 전체 성능을 계산하는 집계 노드가 있을 수 있습니다.
  • log_metric() 함수를 사용하여 메트릭을 기록할 수 있습니다.

평가 메서드 개발 시 입력과 출력이 어떻게 정의되어야 하는지 소개할 예정입니다.

입력

평가 흐름은 데이터 세트를 기반으로 흐름 일괄 실행의 메트릭 또는 점수를 계산합니다. 그렇게 하려면 테스트 중인 실행의 출력을 가져와야 합니다. 표준 흐름의 입력을 정의하는 것과 같은 방식으로 평가 흐름의 입력을 정의할 수 있습니다.

평가 흐름은 다른 실행 후에 실행되어 해당 실행의 결과가 특정 기준 및 목표와 얼마나 잘 일치하는지 평가합니다. 따라서 평가에서는 해당 실행에서 생성된 출력을 받습니다.

예를 들어 테스트 중인 흐름이 질문에 따라 답변을 생성하는 QnA 흐름인 경우, 그에 따라 평가 입력의 이름을 answer로 지정할 수 있습니다. 테스트 중인 흐름이 텍스트를 범주로 분류하는 분류 흐름인 경우 평가 입력의 이름을 category로 지정할 수 있습니다.

다른 입력(예: ground truth)도 필요할 수 있습니다. 예를 들어 분류 흐름의 정확도를 계산하려면 데이터 세트의 category 열을 실측 자료로 제공해야 합니다. QnA 흐름의 정확도를 계산하려면 데이터 세트의 answer 열을 실측 자료로 제공해야 합니다.

기본적으로 평가에서는 테스트 실행에 제공된 테스트 데이터 세트와 동일한 데이터 세트를 사용합니다. 그러나 해당 레이블이나 대상 참조 자료 값이 다른 데이터 세트에 있는 경우 해당 데이터 세트로 쉽게 전환할 수 있습니다.

QnA 또는 RAG 시나리오에서 questioncontext와 같은 메트릭을 계산하려면 몇 가지 다른 입력이 필요할 수 있습니다. 표준 흐름의 입력을 정의하는 것과 동일한 방식으로 이러한 입력을 정의할 수 있습니다.

입력 설명

메트릭을 계산하는 데 필요한 입력을 상기시키기 위해 각 필수 입력에 대한 설명을 추가할 수 있습니다. 일괄 처리 실행 제출에서 원본을 매핑할 때 설명이 표시됩니다.

Screenshot of evaluation input mapping with the answers description highlighted.

각 입력에 대한 설명을 추가하려면 평가 메서드를 개발할 때 입력 섹션에서 설명 표시를 선택합니다. 그리고 "설명 숨기기"를 선택하여 설명을 숨길 수 있습니다.

Screenshot of Classification Accuracy Evaluation with hide description highlighted.

그러면 일괄 처리 실행 제출에서 이 평가 메서드를 사용할 때 이 설명이 표시됩니다.

출력 및 메트릭

평가의 출력은 테스트 중인 흐름의 성능을 측정하는 결과입니다. 출력에는 일반적으로 점수와 같은 메트릭이 포함되며 추론 및 제안을 위한 텍스트도 포함될 수 있습니다.

평가 출력 - 인스턴스 수준 점수

프롬프트 흐름에서 흐름은 한 번에 한 행의 데이터를 처리하고 출력 레코드를 생성합니다. 마찬가지로, 대부분의 평가 사례에는 각 출력에 대한 점수가 있으므로 각 개별 데이터에서 흐름이 어떻게 수행되는지 확인할 수 있습니다.

평가 흐름은 각 데이터에 대한 점수를 계산할 수 있으며, 평가 흐름의 출력 섹션에서 각 데이터 샘플의 점수를 설정하여 해당 점수를 흐름 출력으로 기록할 수 있습니다. 이 작성 환경은 표준 흐름 출력을 정의하는 것과 동일합니다.

Screenshot of the outputs section showing a name and value.

이 평가 방법을 사용하여 다른 흐름을 평가하는 경우 개요->출력 탭에서 점수를 볼 수 있습니다. 이 프로세스는 표준 흐름의 일괄 실행 출력을 확인하는 것과 같습니다. 인스턴스 수준 점수는 테스트 중인 흐름의 출력에 추가됩니다.

메트릭 로깅 및 집계 노드

또한, 실행에 대한 전체 평가를 제공하는 것도 중요합니다. 각 단일 출력을 평가하는 개별 점수를 구분하기 위해 실행의 전반적인 성능을 평가하는 값을 "메트릭"이라고 합니다.

모든 개별 점수를 기준으로 전체 평가 값을 계산하려면 평가 흐름에서 Python 노드의 "집계"를 확인하여 "축소" 노드로 전환하면 됩니다. 그러면 노드가 입력을 목록으로 가져와 일괄 처리할 수 있습니다.

Screenshot of the Python node heading pointing to an unchecked checked box.

이러한 방식으로 각 흐름 출력의 모든 점수를 컴퓨팅 및 처리하고 각 점수 출력에 대한 전체 결과를 계산할 수 있습니다. 예를 들어 분류 흐름의 정확도를 계산하려는 경우 각 점수 출력의 정확도를 계산한 다음 모든 점수 출력의 평균 정확도를 계산할 수 있습니다. 그런 다음, promptflow_sdk.log_metrics()를 사용하여 평균 정확도를 메트릭으로 기록할 수 있습니다. 메트릭은 숫자(float/int)여야 합니다. 문자열 형식 메트릭 로깅은 지원되지 않습니다.

다음 코드 조각은 각 데이터의 정확도 점수(grade)의 평균을 내서 전체 정확도를 계산하는 예입니다. 전체 정확도는 promptflow_sdk.log_metrics()를 사용하여 메트릭으로 기록됩니다.

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
    # calculate accuracy
    accuracy = round((grades.count("Correct") / len(grades)), 2)
    log_metric("accuracy", accuracy)

    return accuracy

Python 노드에서 이 함수를 호출하면 다른 곳에 할당할 필요가 없으며 나중에 메트릭을 볼 수 있습니다. 일괄 실행에서 이 평가 방법을 사용하는 경우 개요->메트릭 탭에서 전체 성능을 나타내는 메트릭을 볼 수 있습니다.

Screenshot of the metrics tab that shows the metrics logged by log metric.

평가 메서드 개발 시작

고유의 평가 메서드를 개발하는 방법에는 두 가지가 있습니다.

  • 처음부터 새로운 평가 흐름 만들기: 처음부터 완전히 새로운 평가 메서드를 개발합니다. 프롬프트 흐름 탭 홈 페이지의 "형식별 만들기" 섹션에서 "평가 흐름"을 선택하여 평가 흐름 템플릿을 볼 수 있습니다.

Screenshot of create a new evaluation flow from scratch.

  • 기본 제공 평가 흐름 사용자 지정: 기본 제공 평가 흐름을 수정합니다. 흐름 만들기 마법사 - 흐름 갤러리에서 기본 제공 평가 흐름을 찾고 "복제"를 선택하여 사용자 지정을 수행합니다. 그러면 기본 제공 평가의 논리와 흐름을 보고 확인한 다음 흐름을 수정할 수 있습니다. 이러한 방식으로 처음부터 시작하지 않고 샘플을 사용자 지정에 사용합니다.

Screenshot of cloning a built-in evaluation flow.

각 데이터에 대한 점수 계산

언급했듯이 평가는 데이터 세트에서 실행되는 흐름을 기반으로 점수와 메트릭을 계산하기 위해 실행됩니다. 따라서 평가 흐름의 첫 번째 단계는 각 개별 출력에 대한 점수를 계산하는 것입니다.

기본 제공 평가 흐름인 Classification Accuracy Evaluation을 예로 들면, 해당 실측 자료에 대해 각 흐름이 생성한 출력의 정확도를 측정하는 점수 gradegrade 노드에서 계산됩니다. 형식별로 만들 때 평가 흐름을 만들어 처음부터 편집하는 경우 이 점수는 템플릿의 line_process 노드에서 계산됩니다. line_process python 노드를 LLM 노드로 바꿔서 LLM을 사용하여 점수를 계산하거나, 여러 노드를 사용하여 계산을 수행할 수도 있습니다.

Screenshot of line process node in the template.

그런 다음, 노드의 출력을 평가 흐름의 출력으로 지정해야 합니다. 이는 출력이 각 데이터 샘플에 대해 계산된 점수임을 나타냅니다. 추론을 추가 정보로 출력할 수도 있으며 표준 흐름에서 출력을 정의하는 것과 동일한 환경입니다.

메트릭 계산 및 기록

평가의 두 번째 단계는 실행을 평가하는 전체 메트릭을 계산하는 것입니다. 언급했듯이 메트릭은 Aggregation으로 설정된 Python 노드에서 계산됩니다. 이 노드는 이전 노드에서 계산한 점수를 가져와서 각 데이터 샘플의 점수를 목록으로 구성한 다음, 한 번에 함께 계산합니다.

형식별로 만들 때 처음부터 새로 만들고 편집하는 경우 이 점수는 aggregate 노드에서 계산됩니다. 코드 조각은 집계 노드의 템플릿입니다.


from typing import List
from promptflow import tool

@tool
def aggregate(processed_results: List[str]):
    """
    This tool aggregates the processed result of all lines and log metric.
    :param processed_results: List of the output of line_process node.
    """
    # Add your aggregation logic here
    aggregated_results = {}

    # Log metric
    # from promptflow import log_metric
    # log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])

    return aggregated_results

고유한 집계 논리(예: 평균, 평균 값 또는 점수의 표준 편차 계산)를 사용할 수 있습니다.

그런 다음 promptflow.logmetrics() 함수를 사용하여 메트릭을 기록해야 합니다. 단일 평가 흐름에서 여러 메트릭을 기록할 수 있습니다. 메트릭은 숫자(float/int)여야 합니다.

사용자 지정 평가 흐름 사용

고유한 평가 흐름 및 메트릭을 만든 후 이 흐름을 사용하여 표준 흐름의 성능을 평가할 수 있습니다.

  1. 먼저, 평가하려는 흐름 작성 페이지에서 시작합니다. 대규모 데이터 세트에서 성능이 어떤지 알지만 테스트하고자 하는 QnA 흐름을 예로 들 수 있습니다. Evaluate 단추를 클릭하고 Custom evaluation을 선택합니다.

    Screenshot of evaluation button.

  2. 그런 다음 프롬프트 흐름에서 일괄 실행 제출 및 흐름 평가에서 언급한 대로 일괄 실행을 제출하는 단계와 비슷하게 처음 몇 단계를 수행하여 흐름을 실행할 데이터 세트를 준비합니다.

  3. 그런 다음, Evaluation settings - Select evaluation 단계의 기본 제공 평가와 함께 사용자 지정된 평가도 선택할 수 있습니다. 그러면 사용자가 생성하거나, 복제하거나, 사용자 지정한 흐름 목록에 모든 평가 흐름이 나열됩니다. 동일한 프로젝트의 다른 사용자가 만든 평가 흐름은 이 섹션에 표시되지 않습니다.

    Screenshot of selecting customized evaluation.

  4. 다음으로, Evaluation settings - Configure evaluation 단계에서는 평가 방법에 필요한 입력 데이터의 원본을 지정해야 합니다. 예를 들어 실측 자료 열의 출처가 데이터 세트일 수 있습니다.

    평가를 실행하려면 평가를 제출할 때 "입력 매핑" 섹션에서 이러한 필수 입력의 원본을 나타낼 수 있습니다. 이 프로세스는 일괄 처리 제출 실행 및 프롬프트 흐름에서 흐름 평가에 언급된 구성과 동일합니다.

    • 데이터 원본의 출처가 실행 출력인 경우 원본은 ${run.output.[OutputName]}으로 표시됩니다.
    • 데이터 원본의 출처가 테스트 데이터 세트인 경우 원본은 ${data.[ColumnName]}으로 표시됩니다.

    Screenshot of evaluation input mapping.

    참고 항목

    평가에 데이터 세트의 데이터가 필요하지 않은 경우 입력 매핑 섹션에서 데이터 세트 열을 참조할 필요가 없습니다. 이는 데이터 세트 선택이 선택적 구성임을 나타냅니다. 데이터 세트 선택은 평가 결과에 영향을 미치지 않습니다.

  5. 이 평가 메서드를 사용하여 다른 흐름을 평가하는 경우 인스턴스 수준 점수를 개요 ->출력 탭에서 볼 수 있습니다.

    Screenshot of the output tab with evaluation result appended and highlighted.

다음 단계