共用方式為


在開發過程中評估生成式人工智慧

此功能 mlflow.genai.evaluate() 為生成式AI應用提供評估工具。 MLflow Evaluation 不再手動執行應用程式並逐一檢查輸出,而是提供結構化的方式輸入測試資料、執行應用程式並自動評分結果。 這使得比較版本、追蹤改進以及跨團隊共享結果變得更加容易。

MLflow 評估將離線測試與生產監控連結起來。 這表示您在開發中使用的相同評估邏輯也可以在生產環境中執行,讓您在整個 AI 生命週期中獲得一致的品質檢視。

mlflow.genai.evaluate() 函數通過根據測試數據(評估數據集 和應用 評分器)運行 GenAI 應用程序來系統地測試 GenAI 應用程序質量。

如果你是評估新手,建議先從 10分鐘的示範開始:評估生成式人工智慧應用程式

使用時機

  • 每晚或每週定期根據精心策劃的評估資料集檢查您的應用程式。
  • 在不同應用程式版本中驗證提示或模型變更
  • 在發行或 PR 之前,以防止品質回歸

快速參考

mlflow.genai.evaluate() 函數會使用指定的評分器,並選擇性地使用預測函數或模型 ID,針對評估資料集執行 GenAI 應用程式,並傳回 EvaluationResult.

def mlflow.genai.evaluate(
    data: Union[pd.DataFrame, List[Dict], mlflow.genai.datasets.EvaluationDataset],  # Test data.
    scorers: list[mlflow.genai.scorers.Scorer],  # Quality metrics, built-in or custom.
    predict_fn: Optional[Callable[..., Any]] = None,  # App wrapper. Used for direct evaluation only.
    model_id: Optional[str] = None,  # Optional version tracking.
) -> mlflow.models.evaluation.base.EvaluationResult:

需求

  1. 安裝 MLflow 和必要的套件。

    pip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1"
    
  2. 按照 設定環境的快速入門指南,來建立 MLflow 實驗。

(選用)設定平行化

MLflow 預設會使用背景執行緒集區來加速評估程式。 若要設定背景工作者數目,請設定環境變數 MLFLOW_GENAI_EVAL_MAX_WORKERS

export MLFLOW_GENAI_EVAL_MAX_WORKERS=10

評估模式

有兩種評估模式:

直接評估(建議)

MLflow 會直接呼叫您的 GenAI 應用程式,以產生和評估追蹤。 您可以傳遞封裝在 Python 函式中的應用程式進入點 (predict_fn),或者,如果您的應用程式部署為 Databricks Model Serving 端點,可以傳遞封裝在 to_predict_fn 中的該端點。

藉由直接呼叫您的應用程式,此模式可讓您重複使用在 生產監視 中針對離線評估定義的計分器,因為產生的追蹤會相同。

如圖所示,資料、您的應用程式和選取的評分器會作為輸入提供給 mlflow.genai.evaluate(),它會平行執行應用程式和評分器,並將輸出記錄為追蹤與回饋。

評估如何與追蹤搭配運作

直接評估的資料格式

如需結構描述詳細資訊,請參閱 評估資料集參考

Field 數據類型 Required Description
inputs dict[Any, Any] Yes 您的字典已傳遞至 predict_fn
expectations dict[str, Any] 計分員的選擇性地面真相

使用直接評估的範例

下列程式代碼示範如何執行評估的範例:

import mlflow
from mlflow.genai.scorers import RelevanceToQuery, Safety

# Your GenAI app with MLflow tracing
@mlflow.trace
def my_chatbot_app(question: str) -> dict:
    # Your app logic here
    if "MLflow" in question:
        response = "MLflow is an open-source platform for managing ML and GenAI workflows."
    else:
        response = "I can help you with MLflow questions."

    return {"response": response}

# Evaluate your app
results = mlflow.genai.evaluate(
    data=[
        {"inputs": {"question": "What is MLflow?"}},
        {"inputs": {"question": "How do I get started?"}}
    ],
    predict_fn=my_chatbot_app,
    scorers=[RelevanceToQuery(), Safety()]
)

速率限制模型呼叫

評估具有速率限制的模型 (例如協力廠商 API 或基礎模型端點) 時,請使用速率限制邏輯包裝您的預測函數。 此範例使用函式庫 ratelimit

import mlflow
from mlflow.genai.scorers import RelevanceToQuery, Safety
from ratelimit import limits, sleep_and_retry

# You can replace this with your own predict_fn
predict_fn = mlflow.genai.to_predict_fn("endpoints:/databricks-gpt-oss-20b")

@sleep_and_retry
@limits(calls=10, period=60)  # 10 calls per minute
def rate_limited_predict_fn(*args, **kwargs):
  return predict_fn(*args, **kwargs)

results = mlflow.genai.evaluate(
    data=[{"inputs": {"messages": [{"role": "user", "content": "How does MLflow work?"}]}}],
    predict_fn=predict_fn,
    scorers=[RelevanceToQuery(), Safety()]
)

上述速率限制控制對predict_fn的呼叫。 您也可以 透過設定平行化來控制用於評估代理程式的工作者數量。

回應表評估

當您無法或不想在評估期間直接執行 GenAI 應用程式時,請使用此模式。 例如,您已經有輸出 (例如,來自外部系統、歷史追蹤或批次作業),而且您只想對其進行評分。 你提供輸入和輸出,evaluate() 負責運行評分器並記錄評估過程。

Important

如果您使用的答題卡記錄與生產環境不同,您可能需要重新撰寫計分器函式,以用於生產監控

如圖所示,您會提供評估資料和選取的評分器 mlflow.genai.evaluate() 作為輸入。 評估資料可以包含現有的追蹤,或輸入和預先計算的輸出。 如果提供輸入和預先計算的輸出, mlflow.genai.evaluate() 則會從輸入和輸出建構追蹤。 對於這兩個輸入選項, mlflow.genai.evaluate() 都會在追蹤上執行評分器,並輸出評分器的意見反應。

評估如何與回應表搭配運作

答題卡評估的資料格式

如需結構描述詳細資訊,請參閱 評估資料集參考

如果提供輸入和輸出

Field 數據類型 Required Description
inputs dict[Any, Any] Yes 您的 GenAI 應用程式的原始輸入
outputs dict[Any, Any] Yes 您的應用程式預先運算的結果
expectations dict[str, Any] 計分員的選擇性地面真相

如果有現有的追蹤資料提供

Field 數據類型 Required Description
trace mlflow.entities.Trace Yes 具有輸入/輸出的 MLflow 追蹤物件
expectations dict[str, Any] 計分員的選擇性地面真相

使用輸入和輸出的範例

下列程式代碼示範如何執行評估的範例:

import mlflow
from mlflow.genai.scorers import Safety, RelevanceToQuery

# Pre-computed results from your GenAI app
results_data = [
    {
        "inputs": {"question": "What is MLflow?"},
        "outputs": {"response": "MLflow is an open-source platform for managing machine learning workflows, including tracking experiments, packaging code, and deploying models."},
    },
    {
        "inputs": {"question": "How do I get started?"},
        "outputs": {"response": "To get started with MLflow, install it using 'pip install mlflow' and then run 'mlflow ui' to launch the web interface."},
    }
]

# Evaluate pre-computed outputs
evaluation = mlflow.genai.evaluate(
    data=results_data,
    scorers=[Safety(), RelevanceToQuery()]
)

使用現有追蹤資料的範例

下列程式代碼示範如何使用現有的追蹤來執行評估:

import mlflow

# Retrieve traces from production
traces = mlflow.search_traces(
    filter_string="trace.status = 'OK'",
)

# Evaluate problematic traces
evaluation = mlflow.genai.evaluate(
    data=traces,
    scorers=[Safety(), RelevanceToQuery()]
)

在介面中查看結果

評估執行就像測試報告,可擷取應用程式在特定資料集上的執行方式的所有資訊。 評估執行包含評估資料集中每一列的追蹤,並附有來自每位評審的 回饋

使用評估執行,您可以檢視彙總指標,並調查應用程式效能不佳的測試案例。

評估摘要

  1. 點擊側邊欄的 「實驗 」以顯示實驗頁面。

  2. 點擊你的實驗名稱即可開啟。

  3. 在左側邊欄,點選 「評估執行」。 右側窗格顯示一張痕跡表。

    評估執行表

    如果你沒有看到帶有 通過失敗 標籤的評量,請向右捲動或將滑鼠移到窗格分隔線上,點擊左指向箭頭。

    展開表格

  4. 要查看「 通過不通過 」標籤的理由,請將滑鼠移到標籤上。

    將滑鼠移到標籤上以顯示理由

詳細資訊與填寫回饋

欲查看每個痕跡的更多細節:

  1. 點擊 請求欄中的 請求識別碼。 會出現一個視窗顯示完整走線,包括每個步驟的輸入與輸出。

    請求細節視窗

  2. 在右側,你可以新增「回饋」或「期望」來應用於此請求的回應中。 如果你看不到評量面板,請點選 評量按鈕。 要新增評量,請往下滑點選 新增評量按鈕

  3. 您可以利用此視窗兩側的箭頭來逐一查看請求。

    使用箭頭逐步執行請求

參數 mlflow.genai.evaluate()

本節說明 所使用的 mlflow.genai.evaluate()每個參數。

def mlflow.genai.evaluate(
    data: Union[pd.DataFrame, List[Dict], mlflow.genai.datasets.EvaluationDataset],  # Test data.
    scorers: list[mlflow.genai.scorers.Scorer],  # Quality metrics, built-in or custom.
    predict_fn: Optional[Callable[..., Any]] = None,  # App wrapper. Used for direct evaluation only.
    model_id: Optional[str] = None,  # Optional version tracking.
) -> mlflow.models.evaluation.base.EvaluationResult:

data

評估資料集必須是下列其中一種格式:

  • EvaluationDataset (建議)。
  • 字典、Pandas DataFrame 或 Spark DataFrame 的清單。

如果數據自變數是以 DataFrame 或字典清單的形式提供,它必須遵循下列架構。 這與 EvaluationDataset 所使用的架構一致。 除了追蹤每個記錄的譜系之外,Databricks 建議使用 EvaluationDataset 強制執行架構驗證。

Field 數據類型 Description 搭配直接評估使用 搭配回應表使用
inputs dict[Any, Any] 使用dict傳遞至您的predict_fn**kwargs。 必須是 JSON 可序列化。 每個索引鍵都必須在predict_fn中對應至具名自變數。 Required inputs + outputstrace 之一必需。 無法傳遞兩者。
如果未提供,則衍生自 trace
outputs dict[Any, Any] dict,具有對應 input之 GenAI 應用程式的輸出。 必須是 JSON 可序列化。 不得提供,將由 MLflow 根據追蹤自動生成。 inputs + outputstrace 之一必需。 無法傳遞兩者。
如果未提供,則衍生自 trace
expectations dict[str, Any] dict,具有對應至 input的地實值標籤。 scorers用來檢查品質。 必須是 JSON 可串行化,而且每個金鑰都必須是 str Optional Optional
trace mlflow.entities.Trace 請求的追蹤物件。 如果提供trace,則可以在expectations上以Assessment的形式提供trace,而不是作為獨立的欄位。 不得提供,將由 MLflow 根據追蹤自動生成。 inputs + outputstrace 之一必需。 無法傳遞兩者。

scorers

要套用的品質計量清單。 您可以提供:

如需詳細資訊,請參閱 計分器

predict_fn

GenAI 應用程式的進入點。 此參數僅與 直接評估搭配使用。 predict_fn 必須符合下列需求:

  • 接受中inputs字典中的data索引鍵作為關鍵詞自變數。
  • 傳回 JSON 可串行化字典。
  • 使用 MLflow 追蹤進行檢測。
  • 每個呼叫只發出一個追蹤。

model_id

選擇性的模型識別碼,將結果連結至您的應用程式版本(例如, "models:/my-app/1"。 如需詳細資訊,請參閱 版本追蹤

後續步驟