다음을 통해 공유


Azure Databricks 외부에 배포된 앱 모니터링(MLflow 2)

중요합니다

이 기능은 베타 버전으로 제공됩니다.

중요합니다

이 페이지에서는 MLflow 2에서 에이전트 평가 버전을 0.22 사용하는 것을 설명합니다. Databricks는 에이전트 평가 >1.0와 통합된 MLflow 3을 사용하는 것이 좋습니다. MLflow 3에서 에이전트 평가 API는 이제 패키지의 mlflow 일부입니다.

이 항목에 대한 자세한 내용은 프로덕션 품질 모니터링(득점자 자동 실행)을 참조하세요.

이 페이지에서는 Mosaic AI 에이전트 프레임워크 외부에 배포된 생성 AI 앱에 대한 모니터링을 설정하는 방법을 설명합니다. 결과 스키마, 결과 보기, UI 사용, 경고 추가 및 모니터 관리와 같은 모니터링 사용에 대한 일반적인 내용은 생성 AI 앱 모니터링(MLflow 2)을 참조하세요.

Gen AI에 대한 Lakehouse 모니터링을 사용하면 Mosaic AI 에이전트 평가 AI 심사위원을 사용하여 볼륨, 대기 시간, 오류 및 비용과 같은 운영 메트릭뿐만 아니라 정확성 및 지침 준수와 같은 품질 메트릭을 추적할 수 있습니다.

모니터링 작동 방식:

작동 방법 개요

모니터링 UI:

Gen AI UI Hero용 레이크하우스 모니터링

요구 사항

%pip install databricks-agents>=0.22.0 mlflow>=2.21.2
dbutils.library.restartPython()

중요합니다

프로덕션 애플리케이션에 설치할 databricks-agents 필요가 없습니다. 프로덕션 애플리케이션에는 MLflow 추적 계측을 가능하게 하는 mlflow 설치만 필요합니다.

모니터링 설정

Databricks 외부에 AI 앱을 배포하거나 Databricks 앱을 사용하는 경우 Databricks Notebook 내의 create_external_monitor 메서드를 사용하여 모니터를 설치합니다.

비고

모니터는 MLflow 실험 내에 만들어집니다. 모니터링 UI는 MLflow 실험에서 탭으로 나타납니다. 로그 추적에 대한 액세스는 MLflow 실험의 ACL을 통해 제어됩니다.

그런 다음 아래에 설명된 대로 MLFlow 추적mlflow.tracing.set_destination을 사용하여 배포된 코드를 계측하십시오. 에이전트 프레임워크를 사용하여 배포된 앱의 경우 생성 AI 애플리케이션에 대한 에이전트 배포를 참조하세요.

아래 단계에서는 Databricks Notebook에서 작업하고 있다고 가정합니다. 로컬 개발 환경(예: IDE)에서 모니터를 만들려면 대신 이 Python 스크립트 를 다운로드하여 사용합니다.

이 Notebook에는 이 페이지의 나머지 부분에 표시된 단계가 포함되어 있습니다.

외부 모니터 예제 노트북 만들기

노트북 받기

1단계: MLflow 실험 만들기

기존 실험을 사용하거나 새 실험을 만들 수 있습니다. 새 실험을 만들려면 아래 단계를 수행합니다.

import mlflow
mlflow_experiment_path = "/Users/your-user-name@company.com/my_monitor_name"
mlflow.set_experiment(experiment_name=mlflow_experiment_path)

# Get the experiment ID to use in the next step
experiment_id = mlflow.tracking.fluent._get_experiment_id()

2단계: 외부 모니터 만들기

중요합니다

기본적으로 실험을 명시적으로 지정하지 않고 Databricks Notebook에서 실행하는 create_external_monitor 경우 모니터는 Notebook의 MLflow 실험에 만들어집니다.

create_external_monitor 다음 입력을 사용합니다.

  • catalog_name: str - 델타 아티팩트 작성할 카탈로그의 이름입니다.
  • schema_name: str - 델타 아티팩트 작성을 위한 스키마의 이름입니다. 이 스키마는 위의 카탈로그에 속해야 합니다.
  • [Optional] experiment_id: 프로덕션 추적이 저장되는 MLflow experiment_id. 이 또는 experiment_name 중 하나를 정의해야 합니다. 지정하지 않으면 모니터는 이 명령이 실행된 Notebook의 실험을 사용합니다.
  • [Optional] experiment_name: 프로덕션 추적이 저장되는 MLflow experiment_name. 이 또는 experiment_id 중 하나를 정의해야 합니다. 지정하지 않으면 모니터는 이 명령이 실행된 Notebook의 실험을 사용합니다.
  • assessments_config: AssessmentsSuiteConfig | dict - 모니터에서 계산한 평가를 위한 구성입니다. 지원되는 매개 변수는 다음과 같습니다.
    • [Optional] sample: float - 글로벌 샘플 속도, 즉 평가를 계산하기 위한 요청의 비율(0에서 1 사이)입니다. 기본값은 1.0(모든 트래픽에 대한 컴퓨팅 평가)입니다.
    • [Optional] paused: bool - 모니터가 일시 중지되었는지 여부입니다.
    • [Optional] assessments: list[BuiltinJudge | GuidelinesJudge] 내장 판사 또는 지침 판사 중 하나인 평가 목록입니다.

BuiltinJudge 에서는 다음 인수를 사용합니다.

  • name: str - 모니터링에서 지원되는 내장 심사 기준 중 하나는 "안전", "기반성", "쿼리 관련성", "청크 관련성"입니다. 기본 제공 심사위원에 대한 자세한 내용은 기본 제공 심사위원을 참조하세요.
  • [Optional] sample_rate: float - 이 평가를 계산하기 위한 요청의 비율(0에서 1 사이)입니다. 기본 설정은 글로벌 샘플 속도로 지정됩니다.

GuidelinesJudge 에서는 다음 인수를 사용합니다.

  • guidelines: dict[str, list[str]] - 요청/응답을 어설션하는 데 사용되는 지침 이름과 일반 텍스트 지침이 포함된 사전입니다. 지침에 대한 자세한 내용은 지침 준수를 참조하세요.
  • [Optional] sample_rate: float - 지침을 계산하기 위한 요청의 비율입니다(0에서 1 사이). 기본 설정은 글로벌 샘플 속도로 지정됩니다.

자세한 내용은 Python SDK 설명서를 참조하세요.

다음은 그 예입니다.

from databricks.agents.monitoring import create_external_monitor, AssessmentsSuiteConfig, BuiltinJudge, GuidelinesJudge
import mlflow


external_monitor = create_external_monitor(
  catalog_name='my_catalog',
  schema_name='my_schema',
  # experiment_id=..., # Replace this line with your MLflow experiment ID.  By default, create_external_monitor uses the notebook's MLflow experiment.
  assessments_config=AssessmentsSuiteConfig(
    sample=1.0,
    assessments=[
      # Builtin judges: "safety", "groundedness", "relevance_to_query", "chunk_relevance"
      BuiltinJudge(name='safety'),  # or {'name': 'safety'}
      BuiltinJudge(name='groundedness', sample_rate=0.4), # or {'name': 'groundedness', 'sample_rate': 0.4}
      BuiltinJudge(name='relevance_to_query'), # or {'name': 'relevance_to_query'}
      BuiltinJudge(name='chunk_relevance'), # or {'name': 'chunk_relevance'}
      # Create custom judges with the guidelines judge.
      GuidelinesJudge(guidelines={
        "pii": ["The response must not contain personal information."],
        "english": ["The response must be in English"]
      }),
    ]
  )
  # AssessmentsSuiteConfig can also be simple objects:
  # assessments_config={
  #   "sample": 1.0,
  #   "assessments": [
  #     {'name': 'safety'},
  #     {'name': 'groundedness'},
  #     {'name': 'relevance_to_query'},
  #     {'name': 'chunk_relevance'},
  #     {
  #       'name': 'guideline_adherence',
  #       'guidelines': {
  #         'pii': ['The response must not contain personal information.'],
  #         'english': ['The response must be in English']
  #       }
  #     },
  #   ]
  # }
)
print("experiment_id=", external_monitor.experiment_id)

셀 출력에 모니터링 UI에 대한 링크가 표시됩니다. 평가 결과는 이 UI에서 볼 수 있으며 monitoring_table에 저장됩니다. 평가된 행을 보려면 다음을 실행합니다.

display(spark.table("cat.schema.monitor_table"))

3단계: MLFlow 추적을 사용하여 Gen AI 앱 계측

배포된 에이전트에 다음 패키지를 설치하여 시작합니다.

%pip install "mlflow>=2.21.2"

중요합니다

DATABRICKS_TOKEN 모니터가 구성된 MLflow 실험에 대한 EDIT 액세스 권한이 있는 서비스 주체 또는 사용자를 위한 것이어야 합니다.

Gen AI 앱에서 다음을 추가합니다.

  • DATABRICKS_HOST 환경 변수 및 DATABRICKS_TOKEN 환경 변수를 설정합니다.
    • DATABRICKS_HOST는 작업 영역의 URL입니다 (예: https://workspace-url.databricks.com).
    • DATABRICKS_TOKEN 는 PAT 토큰입니다. 다음 단계를 수행합니다.
      • 서비스 주체의 PAT 토큰을 사용하려면 서비스 주체 EDIT 쓰기를 Notebook 맨 위에 구성한 MLflow 실험에 부여해야 합니다. 이것이 없으면 MLflow 트레이싱은 추적을 기록할 수 없습니다.
  • 추적 대상을 설정하려면 mlflow.tracing.set_destination.
  • MLFlow 자동 추적 기능 또는 MLFlow 유창한 API를 사용하여 앱을 추적할 수 있습니다. MLFlow는 LangChain, Bedrock, DSPy, OpenAI 등과 같은 많은 인기 있는 프레임워크 의 자동 로깅 를 지원합니다.
  • Databricks 인증 토큰을 사용하여 MLFlow가 Databricks에 추적을 기록할 수 있습니다.
# Environment variables:
DATABRICKS_TOKEN="..."
DATABRICKS_HOST="..."
import mlflow
from mlflow.tracing.destination import Databricks

# Setup the destination.
mlflow_experiment_id = "..."  # This is the experiment_id that is configured in step 2.
mlflow.tracing.set_destination(Databricks(experiment_id=mlflow_experiment_id))

# Your AI app code, instrumented with mlflow.
# MLFlow supports autologging for a variety of

## Option 1: MLFlow autologging
import mlflow

mlflow.langchain.autolog()

# Enable other optional logging
# mlflow.langchain.autolog(log_models=True, log_input_examples=True)

# Your LangChain model code here
# ...
# ...

# Option 2: MLflow Fluent APIs:
# Initialize OpenAI client
# This example uses the databricks-sdk's convenience method to get an OpenAI client
# In your app, you can use any OpenAI client (or other SDKs)
w = WorkspaceClient()
openai_client = w.serving_endpoints.get_open_ai_client()

# These traces will automatically be sent to Databricks.
@mlflow.trace(span_type='AGENT')
def openai_agent(user_input: str):
  return openai_client.chat.completions.create(
      model="databricks-meta-llama-3-3-70b-instruct",
      messages=[
          {
              "role": "system",
              "content": "You are a helpful assistant that always responds in CAPS!",
          },
          {"role": "user", "content": user_input},
      ],
  )

# Call the app to generate a Trace
openai_agent("What is GenAI observability?")

4단계. 모니터링 UI를 방문하여 기록된 추적 보기

2단계에서 구성한 MLflow 실험으로 이동합니다. 모니터링 탭을 클릭한 다음 왼쪽 위에 있는 "로그"를 클릭하여 3단계에서 기록된 추적을 확인합니다.

실행 및 예약 모니터링

모니터를 만들 때는 지난 30일 동안 엔드포인트에 대한 요청 샘플을 평가하는 작업을 시작합니다. 이 초기 평가는 요청 볼륨 및 샘플링 속도에 따라 완료하는 데 몇 분 정도 걸릴 수 있습니다.

초기 평가 후 모니터는 15분마다 자동으로 새로 고쳐 새 요청을 평가합니다. 엔드포인트에 대한 요청이 이루어지는 시기와 모니터에 의해 평가되는 시점 사이에는 지연이 있습니다.

모니터는 Databricks 워크플로에서 지원됩니다. 모니터 새로 고침을 수동으로 트리거하려면 이름 [<endpoint_name>] Agent Monitoring Job 있는 워크플로를 찾고 지금 실행클릭합니다.

제한점

Databricks 외부에서 배포된 GenAI 앱에 대한 Lakehouse 모니터링의 제한 사항은 다음과 같습니다.

  • 최대 추적 수집 처리량은 10 QPS(초당 쿼리)입니다.
  • MLFlow TraceData 필드 request 이며 response 결합된 25KB를 초과해서는 안 됩니다.
  • MLFlow TraceData는spans 1MB를 초과해서는 안됩니다.