此功能 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:
- 如需 API 詳細資料,請參閱
mlflow.genai.evaluate()或 MLflow 文件。 - 有關 的詳細資訊
EvaluationDataset,請參見 Building MLflow 評估資料集。 - 關於「評估運行」和記錄的詳細資訊,請參閱「評估運行」。
需求
安裝 MLflow 和必要的套件。
pip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1"按照 設定環境的快速入門指南,來建立 MLflow 實驗。
(選用)設定平行化
MLflow 預設會使用背景執行緒集區來加速評估程式。 若要設定背景工作者數目,請設定環境變數 MLFLOW_GENAI_EVAL_MAX_WORKERS。
export MLFLOW_GENAI_EVAL_MAX_WORKERS=10
評估模式
有兩種評估模式:
直接評估(推薦)。 MLflow 直接呼叫你的應用程式來產生用於評估的追蹤記錄:
- 在測試輸入上運行您的應用程序,捕獲 跟踪。
- 運用 評分員或大型語言模型評審 來評估品質,產生 回饋。
- 在主動的 MLflow 實驗中進行 評估執行 時,將結果儲存。
回應表評估。 你提供預先計算好的輸出或現有的追蹤線供評估:
- 運用 評分者或大型語言模型(LLM)評審 對預先計算的輸出或 追蹤記錄進行品質評估,並產生 回饋。
- 在主動的 MLflow 實驗中進行 評估執行 時,將結果儲存。
直接評估(建議)
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()]
)
在介面中查看結果
評估執行就像測試報告,可擷取應用程式在特定資料集上的執行方式的所有資訊。 評估執行包含評估資料集中每一列的追蹤,並附有來自每位評審的 回饋。
使用評估執行,您可以檢視彙總指標,並調查應用程式效能不佳的測試案例。
評估摘要
點擊側邊欄的 「實驗 」以顯示實驗頁面。
點擊你的實驗名稱即可開啟。
在左側邊欄,點選 「評估執行」。 右側窗格顯示一張痕跡表。
如果你沒有看到帶有 通過 與 失敗 標籤的評量,請向右捲動或將滑鼠移到窗格分隔線上,點擊左指向箭頭。
要查看「 通過 或 不通過 」標籤的理由,請將滑鼠移到標籤上。
詳細資訊與填寫回饋
欲查看每個痕跡的更多細節:
點擊 請求欄中的 請求識別碼。 會出現一個視窗顯示完整走線,包括每個步驟的輸入與輸出。
在右側,你可以新增「回饋」或「期望」來應用於此請求的回應中。 如果你看不到評量面板,請點選
。 要新增評量,請往下滑點選
。您可以利用此視窗兩側的箭頭來逐一查看請求。
參數 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
+
outputs 或 trace 之一必需。 無法傳遞兩者。如果未提供,則衍生自 trace 。 |
outputs |
dict[Any, Any] |
dict,具有對應 input之 GenAI 應用程式的輸出。 必須是 JSON 可序列化。 |
不得提供,將由 MLflow 根據追蹤自動生成。 |
inputs
+
outputs 或 trace 之一必需。 無法傳遞兩者。如果未提供,則衍生自 trace 。 |
expectations |
dict[str, Any] |
dict,具有對應至 input的地實值標籤。
scorers用來檢查品質。 必須是 JSON 可串行化,而且每個金鑰都必須是 str。 |
Optional | Optional |
trace |
mlflow.entities.Trace |
請求的追蹤物件。 如果提供trace,則可以在expectations上以Assessment的形式提供trace,而不是作為獨立的欄位。 |
不得提供,將由 MLflow 根據追蹤自動生成。 |
inputs
+
outputs 或 trace 之一必需。 無法傳遞兩者。 |
scorers
要套用的品質計量清單。 您可以提供:
如需詳細資訊,請參閱 計分器 。
predict_fn
GenAI 應用程式的進入點。 此參數僅與 直接評估搭配使用。
predict_fn 必須符合下列需求:
- 接受中
inputs字典中的data索引鍵作為關鍵詞自變數。 - 傳回 JSON 可串行化字典。
- 使用 MLflow 追蹤進行檢測。
- 每個呼叫只發出一個追蹤。
model_id
選擇性的模型識別碼,將結果連結至您的應用程式版本(例如, "models:/my-app/1"。 如需詳細資訊,請參閱 版本追蹤 。