다음을 통해 공유


배포된 프롬프트 흐름 애플리케이션의 품질 및 토큰 사용 모니터링

Important

이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

프로덕션에 배포되는 애플리케이션 모니터링은 생성형 AI 애플리케이션 수명 주기의 필수적인 부분입니다. 데이터 및 소비자 동작의 변화는 시간이 지나면서 애플리케이션에 영향을 줄 수 있으며, 이로 인해 비즈니스 결과에 부정적인 영향을 주고 조직이 규정 준수, 경제적 위험 및 평판 위험에 노출되는 오래된 시스템이 생성될 수 있습니다.

참고 항목

배포된 애플리케이션의 지속적인 모니터링(프롬프트 흐름 이외의)을 수행하는 향상된 방법을 보려면 Azure AI 온라인 평가를 사용하는 것이 좋습니다.

생성형 AI 애플리케이션에 대한 Azure AI 모니터링을 사용하면 프로덕션에서 토큰 사용량, 생성 품질 및 운영 메트릭에 대해 애플리케이션을 모니터링할 수 있습니다.

프롬프트 흐름 배포를 모니터링하기 위한 통합을 통해 다음을 수행할 수 있습니다.

  • 배포된 프롬프트 흐름 애플리케이션에서 프로덕션 유추 데이터를 수집합니다.
  • 프롬프트 흐름 평가 메트릭과 상호 운용 가능한 근거, 일관성, 유창성, 관련성 등 책임 있는 AI 평가 메트릭을 적용합니다.
  • 프롬프트 흐름의 각 모델 배포 전반에 걸쳐 프롬프트, 완료 및 총 토큰 사용량을 모니터링합니다.
  • 요청 수, 대기 시간, 오류율 등의 운영 메트릭을 모니터링합니다.
  • 미리 구성된 경고 및 기본값을 사용하여 되풀이적으로 모니터링을 실행합니다.
  • Azure AI Foundry 포털에서 데이터 시각화를 사용하고 고급 동작을 구성합니다.

필수 조건

이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • 유효한 결제 방법을 사용하는 Azure 구독입니다. 이 시나리오에서는 무료 또는 평가판 Azure 구독이 지원되지 않습니다. Azure 구독이 없으면 유료 Azure 계정을 만들어 시작합니다.

  • Azure AI Foundry 프로젝트입니다.

  • 배포 준비가 완료된 프롬프트 흐름입니다. 프롬프트가 없으면 프롬프트 흐름 개발을 참조하세요.

  • Azure RBAC(Azure 역할 기반 액세스 제어)는 Azure AI Foundry 포털에서 작업에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 문서의 단계를 수행하려면 사용자 계정에 리소스 그룹에 대한 Azure AI 개발자 역할이 할당되어야 합니다. 권한에 대한 자세한 내용은 Azure AI Foundry 포털의 역할 기반 액세스 제어를 참조 하세요.

메트릭 모니터링 요구 사항

모니터링 메트릭은 특정 평가 지침(프롬프트 템플릿)으로 구성된 특정 최첨단 GPT 언어 모델에 의해 생성됩니다. 이러한 모델은 시퀀스 간 작업에 대한 평가자 모델 역할을 합니다. 모니터링 메트릭을 생성하기 위해 이 기술을 사용하면 표준 생성형 AI 평가 메트릭과 비교할 때 강력한 경험적 결과와 인간 판단과의 높은 상관 관계가 나타납니다. 프롬프트 흐름 평가에 대한 자세한 내용은 대량 테스트 제출 및 흐름 평가생성형 AI의 평가 및 모니터링 메트릭을 참조합니다.

모니터링 메트릭을 생성하는 GPT 모델은 다음과 같습니다. 다음과 같은 GPT 모델은 모니터링과 함께 지원되며 Azure OpenAI 리소스로 구성됩니다.

  • GPT-3.5 Turbo
  • GPT-4
  • GPT-4-32k

모니터링에 지원되는 메트릭

모니터링에 지원되는 메트릭은 다음과 같습니다.

메트릭 설명
접지 모델이 생성한 답변이 소스 데이터(사용자 정의 컨텍스트)와 얼마나 일치하는지 평가합니다.
정확도 모델이 생성한 답변이 얼마나 관련이 있고 주어진 질문과 얼마나 직접적인 관련이 있는지 측정합니다.
일관성 모델의 생성된 응답이 논리적으로 일관되고 연결된 정도를 측정합니다.
유창성 생성 AI가 생성하는 예상 답변의 문법적 숙련도를 측정합니다.

열 이름 매핑

흐름을 만들 때 열 이름이 매핑되었는지 확인해야 합니다. 생성 안전성 및 품질을 측정하기 위해 다음 입력 데이터 열 이름을 사용합니다.

입력 열 이름 정의 필수/선택
질문 지정된 원래 프롬프트("입력" 또는 "질문"라고도 함) Required
답변 API 호출에서 반환되는 최종 완성("출력" 또는 "응답"이라고도 함) Required
Context 원래 프롬프트와 함께 API 호출로 전송되는 모든 컨텍스트 데이터. 예를 들어, 인증된 특정 정보 원본 또는 웹 사이트에서만 검색 결과를 가져오려는 경우 평가 단계에서 이 컨텍스트를 정의할 수 있습니다. 선택 사항

메트릭에 필요한 매개 변수

데이터 자산에 구성된 매개 변수는 다음 표에 따라 생성할 수 있는 메트릭을 결정합니다.

메트릭 질문 답변 Context
일관성 Required Required -
유창성 Required Required -
접지 Required 필수 Required
정확도 Required 필수 Required

각 메트릭에 대한 특정 데이터 매핑 요구 사항에 대한 자세한 내용은 쿼리 및 응답 메트릭 요구 사항을 참조 하세요.

프롬프트 흐름에 대한 모니터링 설정

프롬프트 흐름 애플리케이션에 대한 모니터링을 설정하려면 먼저 유추 데이터 수집을 사용하여 프롬프트 흐름 애플리케이션을 배포한 다음 배포된 애플리케이션에 대한 모니터링을 구성할 수 있습니다.

유추 데이터 수집을 통해 프롬프트 흐름 애플리케이션 배포

이 섹션에서는 유추 데이터 수집을 사용하도록 설정하여 프롬프트 흐름을 배포하는 방법을 알아봅니다. 프롬프트 흐름 배포에 대한 자세한 내용은 실시간 유추를 위한 흐름 배포를 참조하세요.

  1. Azure AI Foundry에 로그인합니다.

  2. 프로젝트에 아직 없는 경우 선택합니다.

  3. 왼쪽 탐색 모음에서 프롬프트 흐름을 선택합니다.

  4. 이전에 만든 프롬프트 흐름을 선택합니다.

    참고 항목

    이 문서에서는 배포 준비가 완료된 프롬프트 흐름을 이미 만들었다고 가정합니다. 프롬프트가 없으면 프롬프트 흐름 개발을 참조하세요.

  5. 흐름이 성공적으로 실행되고 평가하려는 메트릭에 필요한 입력 및 출력이 구성되어 있는지 확인합니다.

    최소 필수 매개 변수(질문/입력 및 답변/출력)를 제공하면 일관성유창성이라는 두 가지 메트릭만 제공됩니다. 메트릭 모니터링 요구 사항 섹션에 설명된 대로 흐름을 구성해야 합니다. 이 예에서는 question(질문) 및 chat_history(컨텍스트)를 흐름 입력으로 사용하고 answer(답변)를 흐름 출력으로 사용합니다.

  6. 흐름 배포를 시작하려면 배포를 선택합니다.

    배포 단추가 있는 프롬프트 흐름 편집기의 스크린샷.

  7. 배포 창에서 유추 데이터 수집이 사용하도록 설정되어 있는지 확인합니다. 그러면 애플리케이션의 유추 데이터가 Blob Storage에 원활하게 수집됩니다. 모니터링을 위해서는 이 데이터 수집이 필요합니다.

    배포 마법사의 기본 설정 스크린샷.

  8. 배포 창의 단계를 진행하여 고급 설정을 완료합니다.

  9. "검토" 페이지에서 배포 구성을 검토하고 만들기를 선택하여 흐름을 배포합니다.

    모든 설정이 완료된 배포 마법사의 검토 페이지 스크린샷.

    참고 항목

    기본적으로 배포된 프롬프트 흐름 애플리케이션의 모든 입출력은 Blob Storage에 수집됩니다. 사용자가 배포를 호출하면 모니터에서 사용할 데이터가 수집됩니다.

  10. 배포 페이지에서 테스트 탭을 선택하고 배포를 테스트하여 제대로 작동하는지 확인합니다.

    배포 테스트 페이지의 스크린샷.

    참고 항목

    모니터링을 위해서는 배포의 테스트 탭이 아닌 원본에서 하나 이상의 데이터 포인트를 가져와야 합니다. 배포에 샘플 요청을 보내려면 사용 탭에서 제공되는 REST API를 사용하는 것이 좋습니다. 배포에 샘플 요청을 보내는 방법에 대한 자세한 내용은 온라인 배포 만들기를 참조하세요.

모니터링 구성

이 섹션에서는 배포된 프롬프트 흐름 애플리케이션에 대한 모니터링을 구성하는 방법을 알아봅니다.

  1. 왼쪽 탐색 모음에서 내 자산>모델 + 엔드포인트로 이동합니다.

  2. 만든 프롬프트 흐름 배포를 선택합니다.

  3. 생성 품질 모니터링 사용 상자에서 사용을 선택합니다.

    생성 품질 모니터링을 강조 표시하는 배포 페이지의 스크린샷.

  4. 원하는 메트릭을 선택하여 모니터링 구성을 시작합니다.

  5. 열 이름 매핑에 정의된 대로 열 이름이 흐름에서 매핑되는지 확인합니다.

  6. 프롬프트 흐름 애플리케이션에 대한 모니터링을 수행하는 데 사용할 Azure OpenAI 연결배포를 선택합니다.

  7. 더 많은 구성 옵션을 보려면 고급 옵션을 선택합니다.

    메트릭 모니터링을 위해 매핑된 열의 스크린샷.

  8. 구성된 메트릭에 대한 샘플링 속도와 임계값을 조정하고 특정 메트릭의 평균 점수가 임계값 아래로 떨어질 때 경고를 받아야 하는 이메일 주소를 지정합니다.

    메트릭 모니터링을 위해 열을 매핑할 때의 고급 옵션 스크린샷.

    참고 항목

    배포에 데이터 수집이 사용하도록 설정되어 있지 않은 경우 모니터를 만들면 유추 데이터를 Azure Blob Storage에 수집할 수 있으며, 이로 인해 몇 분 동안 배포가 오프라인으로 진행됩니다.

  9. 만들기를 선택하여 모니터를 만듭니다.

모니터링 결과 사용

모니터를 만든 후에는 매일 실행되어 토큰 사용량 및 만들기 품질 메트릭을 계산합니다.

  1. 모니터링 결과를 보려면 배포 내에서 모니터링(미리 보기) 탭으로 이동합니다. 여기에서는 선택한 기간 동안의 모니터링 결과 개요를 볼 수 있습니다. 날짜 선택기를 사용하여 모니터링하는 데이터의 기간을 변경할 수 있습니다. 이 개요에서는 다음 메트릭을 사용할 수 있습니다.

    • 총 요청 수: 선택한 기간 동안 배포로 전송된 총 요청 수입니다.
    • 총 토큰 수: 선택한 기간 동안 배포에 사용된 총 토큰 수입니다.
    • 프롬프트 토큰 수: 선택한 기간 동안 배포에 사용된 프롬프트 토큰 수입니다.
    • 완료 토큰 수: 선택한 기간 동안 배포에 사용된 완료 토큰 수입니다.
  2. 토큰 사용량 탭(이 탭은 기본적으로 선택되어 있음)에서 메트릭을 확인합니다. 여기에서 시간 경과에 따른 애플리케이션의 토큰 사용량을 볼 수 있습니다. 시간 경과에 따른 프롬프트 및 완료 토큰의 배포도 볼 수 있습니다. 추세선 범위를 변경하여 전체 애플리케이션의 모든 토큰이나 애플리케이션 내에서 사용되는 특정 배포(예: gpt-4)에 대한 토큰 사용량을 모니터링할 수 있습니다.

    배포 모니터링 페이지의 토큰 사용량을 보여 주는 스크린샷.

  3. 생성 품질 탭으로 이동하여 시간 경과에 따른 애플리케이션 품질을 모니터링합니다. 시간 차트에는 다음 메트릭이 표시됩니다.

    • 위반 횟수: 특정 메트릭(예: Fluency)에 대한 위반 횟수는 선택한 기간 동안 발생한 위반 횟수의 합계입니다. 메트릭을 계산할 때(기본값은 매일) 메트릭에 대해 계산된 값이 설정된 임계값 아래로 떨어지면 해당 메트릭에 대해 위반이 발생합니다.
    • 평균 점수: 특정 메트릭(예: Fluency)에 대한 평균 점수는 모든 인스턴스(또는 요청) 점수의 합계를 선택한 기간 동안의 인스턴스(또는 요청) 수로 나눈 값입니다.

    생성 품질 위반 카드에는 선택한 기간 동안의 위반률이 표시됩니다. 위반률은 위반 횟수를 가능한 총 위반 횟수로 나눈 값입니다. 설정에서 메트릭의 임계값을 조정할 수 있습니다. 기본적으로 메트릭은 매일 계산됩니다. 이 빈도는 설정에서도 조정할 수 있습니다.

    배포 모니터링 페이지의 생성 품질 추세선을 보여 주는 스크린샷.

  4. 모니터링(미리 보기) 탭에서는 선택한 기간 동안 배포로 전송된 모든 샘플링 요청의 포괄적인 표를 볼 수도 있습니다.

    참고 항목

    모니터링은 기본 샘플링 비율을 10%로 설정합니다. 즉, 100개의 요청이 배포로 전송되면 10개가 샘플링되어 생성 품질 메트릭을 계산하는 데 사용됩니다. 설정에서 샘플링 속도를 조정할 수 있습니다.

    생성 품질에 대한 추적 단추를 보여 주는 스크린샷.

  5. 특정 요청에 대한 추적 세부 정보를 보려면 표의 행 오른쪽에 있는 추적 단추를 선택합니다. 이 보기는 애플리케이션을 요청하기 위해 포괄적인 추적 세부 정보를 제공합니다.

    추적 정보를 보여 주는 스크린샷.

  6. 추적 보기를 닫습니다.

  7. 운영 탭으로 이동하여 배포에 대한 운영 메트릭을 거의 실시간으로 봅니다. 다음과 같은 운영 메트릭을 지원합니다.

    • 요청 수
    • 대기 시간
    • 오류율

    배포에 대한 운영 탭의 스크린샷.

배포의 모니터링(미리 보기) 탭에 있는 결과는 프롬프트 흐름 애플리케이션의 성능을 적극적으로 개선하는 데 도움이 되는 인사이트를 제공합니다.

SDK v2를 사용한 고급 모니터링 구성

Monitoring은 SDK v2의 고급 구성 옵션도 지원합니다. 다음과 같은 시나리오가 지원됩니다.

토큰 사용량 모니터링 사용

배포된 프롬프트 흐름 애플리케이션에 대한 토큰 사용 모니터링 사용하도록 설정에만 관심이 있는 경우 다음 스크립트를 시나리오에 맞게 조정할 수 있습니다.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationTokenStatisticsSignal,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"

# These variables can be renamed but it is not necessary
monitor_name ="gen_ai_monitor_tokens" 
defaulttokenstatisticssignalname ="token-usage-signal" 

# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Create an instance of token statistic signal
token_statistic_signal = GenerationTokenStatisticsSignal()

monitoring_signals = {
    defaulttokenstatisticssignalname: token_statistic_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

발전 품질 모니터링 사용

배포된 프롬프트 흐름 애플리케이션에 대한 생성 품질 모니터링 사용하도록 설정에만 관심이 있는 경우 다음 스크립트를 시나리오에 맞게 조정할 수 있습니다.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationSafetyQualityMonitoringMetricThreshold,
    GenerationSafetyQualitySignal,
    BaselineDataRange,
    LlmData,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
aoai_deployment_name ="INSERT YOUR AOAI DEPLOYMENT NAME"
aoai_connection_name = "INSERT YOUR AOAI CONNECTION NAME"

# These variables can be renamed but it is not necessary
app_trace_name = "app_traces"
app_trace_Version = "1"
monitor_name ="gen_ai_monitor_generation_quality" 
defaultgsqsignalname ="gsq-signal"

# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Set thresholds for passing rate (0.7 = 70%)
aggregated_groundedness_pass_rate = 0.7
aggregated_relevance_pass_rate = 0.7
aggregated_coherence_pass_rate = 0.7
aggregated_fluency_pass_rate = 0.7

# Create an instance of gsq signal
generation_quality_thresholds = GenerationSafetyQualityMonitoringMetricThreshold(
    groundedness = {"aggregated_groundedness_pass_rate": aggregated_groundedness_pass_rate},
    relevance={"aggregated_relevance_pass_rate": aggregated_relevance_pass_rate},
    coherence={"aggregated_coherence_pass_rate": aggregated_coherence_pass_rate},
    fluency={"aggregated_fluency_pass_rate": aggregated_fluency_pass_rate},
)
input_data = Input(
    type="uri_folder",
    path=f"{endpoint_name}-{deployment_name}-{app_trace_name}:{app_trace_Version}",
)
data_window = BaselineDataRange(lookback_window_size="P7D", lookback_window_offset="P0D")
production_data = LlmData(
    data_column_names={"prompt_column": "question", "completion_column": "answer", "context_column": "context"},
    input_data=input_data,
    data_window=data_window,
)

gsq_signal = GenerationSafetyQualitySignal(
    connection_id=f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{project_name}/connections/{aoai_connection_name}",
    metric_thresholds=generation_quality_thresholds,
    production_data=[production_data],
    sampling_rate=1.0,
    properties={
        "aoai_deployment_name": aoai_deployment_name,
        "enable_action_analyzer": "false",
        "azureml.modelmonitor.gsq_thresholds": '[{"metricName":"average_fluency","threshold":{"value":4}},{"metricName":"average_coherence","threshold":{"value":4}}]',
    },
)

monitoring_signals = {
    defaultgsqsignalname: gsq_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

SDK에서 모니터를 만든 후 Azure AI Foundry 포털에서 모니터링 결과를 사용할 수 있습니다.