代理程式評估如何評估品質、成本和延遲
重要
這項功能處於公開預覽狀態。
本文說明代理程式評估如何評估 AI 應用程式的品質、成本和延遲,並提供見解來引導您的品質改進和成本和延遲優化。 本文涵蓋下列領域:
- LLM 評委評估品質的方式。
- 評估成本和延遲的方式。
- 如何在 MLflow 執行層級匯總計量,以取得品質、成本和延遲。
如需每個內建 LLM 評委的參考資訊,請參閱 馬賽克 AI 代理程式評估 LLM 評委參考。
代理程式評估會以兩個步驟評估 LLM 評委的品質:
- LLM 評委會評估每個數據列的特定質量層面(例如正確性和基礎性)。 如需詳細資訊,請參閱 步驟 1:LLM 評委評估每個數據列的品質。
- 代理程式評估會將個別法官的評量結合為整體通過/失敗分數,以及任何失敗的根本原因。 如需詳細資訊,請參閱 步驟 2:結合 LLM 評量來識別質量問題的根本原因。
如需 LLM 判斷信任和安全資訊,請參閱 支援 LLM 評委的模型相關信息。
針對每個輸入數據列,代理程式評估會使用一組 LLM 評委來評估代理程序輸出的不同質量層面。 每個法官會產生是或否分數,以及該分數的書面理由,如下列範例所示:
如需使用 LLM 法官的詳細資訊,請參閱 可用的 LLM 評委。
執行 LLM 評委後,代理評估會分析其輸出,以評估整體品質,並判斷法官集體評估的合格/失敗品質分數。 如果整體質量失敗,代理程式評估會識別哪些特定 LLM 判斷造成失敗,並提供建議的修正程式。
數據會顯示在 MLflow UI 中,而且也可以在呼叫所 mlflow.evaluate(...)
傳回的 DataFrame 中從 MLflow 執行取得。 如需如何存取 DataFrame 的詳細資訊,請參閱 檢閱評估輸出 。
下列螢幕快照是 UI 中摘要分析的範例:
詳細檢視 UI 中提供每個資料列的結果:
下表摘要說明代理程式評估中用來評估不同質量層面的 LLM 評委套件。 如需詳細資訊,請參閱回應評委和擷取評委。
如需支援 LLM 評委之模型的詳細資訊,請參閱 為 LLM 評委提供模型的相關信息。 如需每個內建 LLM 評委的參考資訊,請參閱 馬賽克 AI 代理程式評估 LLM 評委參考。
法官的名稱 | 步驟 | 法官評估的質量層面 | 必要的輸入 | 需要事實嗎? |
---|---|---|---|---|
relevance_to_query |
回應 | 回應位址 (與使用者的要求相關) 是否相關? | - response , request |
No |
groundedness |
回應 | 產生的回應是否以擷取的內容(非幻覺)為根據? | - response , trace[retrieved_context] |
No |
safety |
回應 | 回應中是否有有害或有毒的內容? | - response |
No |
correctness |
回應 | 產生的回應是否正確(與地面真相相比)? | - response , expected_response |
Yes |
chunk_relevance |
擷取 | 擷取程式是否在回應使用者的要求時發現有用的區塊(相關) ? 注意:此評判會分別套用至每個擷取的區塊,為每個區塊產生分數和理由。 這些分數會匯總成 chunk_relevance/precision 代表相關區塊百分比之每個數據列的分數。 |
- retrieved_context , request |
No |
document_recall |
擷取 | 擷取程式找到的已知相關文件有多少? | - retrieved_context , expected_retrieved_context[].doc_uri |
Yes |
context_sufficiency |
擷取 | 擷取程式是否找到具有足夠信息的檔,以產生預期的回應? | - retrieved_context , expected_response |
Yes |
下列螢幕快照顯示這些評委在 UI 中的顯示方式範例:
如果所有評委都透過,品質就會被視為 pass
。 如果任何法官失敗,則根本原因取決於以下排序的清單,確定為第一個失敗的法官。 之所以使用此排序,是因為判斷評量通常以因果方式相互關聯。 例如,如果 context_sufficiency
評估擷取器尚未擷取輸入要求的正確區塊或檔,則產生器可能會無法合成良好的回應,因此 correctness
也會失敗。
如果提供地面真相做為輸入,則會使用下列順序:
context_sufficiency
groundedness
correctness
safety
- 任何客戶定義的 LLM 法官
如果未提供地面真相做為輸入,則會使用下列順序:
chunk_relevance
- 至少有 1 個相關區塊?groundedness
relevant_to_query
safety
- 任何客戶定義的 LLM 法官
Databricks 致力於提高 LLM 法官的品質。 質量的評估方式是使用下列計量來衡量 LLM 法官與人類評分員的同意程度:
- 增加了 科恩的卡帕 (衡量利率之間的協定)。
- 提高精確度(符合人類評分工具標籤的預測標籤百分比)。
- 增加 F1 分數。
- 降低誤判率。
- 降低誤判率。
為了測量這些計量,Databricks 會使用來自學術和專屬數據集的多樣化、具挑戰性的範例,這些數據集代表客戶數據集來對最先進的 LLM 評判方法進行基準檢驗和改善評判,以確保持續改善和高精確度。
如需 Databricks 如何測量及持續改善評判質量的詳細資訊,請參閱 Databricks 在代理程式評估中宣佈內建 LLM 評委的重大改善。
databricks-agents
SDK 包含 API,可直接在使用者輸入上叫用評委。 您可以使用這些 API 進行快速且簡單的實驗,以查看評委的運作方式。
執行下列程式代碼以安裝 databricks-agents
套件並重新啟動 Python 核心:
%pip install databricks-agents -U
dbutils.library.restartPython()
然後,您可以在筆記本中執行下列程序代碼,並視需要編輯它,以在您自己的輸入上試用不同的評委。
from databricks.agents.eval import judges
SAMPLE_REQUEST = "What is MLflow?"
SAMPLE_RESPONSE = "MLflow is an open-source platform"
SAMPLE_RETRIEVED_CONTEXT = [
{
"content": "MLflow is an open-source platform, purpose-built to assist machine learning practitioners and teams in handling the complexities of the machine learning process. MLflow focuses on the full lifecycle for machine learning projects, ensuring that each phase is manageable, traceable, and reproducible."
}
]
SAMPLE_EXPECTED_RESPONSE = "MLflow is an open-source platform, purpose-built to assist machine learning practitioners and teams in handling the complexities of the machine learning process. MLflow focuses on the full lifecycle for machine learning projects, ensuring that each phase is manageable, traceable, and reproducible."
# For chunk_relevance, the required inputs are `request`, `response` and `retrieved_context`.
judges.chunk_relevance(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For context_sufficiency, the required inputs are `request`, `expected_response` and `retrieved_context`.
judges.context_sufficiency(
request=SAMPLE_REQUEST,
expected_response=SAMPLE_EXPECTED_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For correctness, required inputs are `request`, `response` and `expected_response`.
judges.correctness(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
expected_response=SAMPLE_EXPECTED_RESPONSE
)
# For relevance_to_query, the required inputs are `request` and `response`.
judges.relevance_to_query(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
)
# For groundedness, the required inputs are `request`, `response` and `retrieved_context`.
judges.groundedness(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For safety, the required inputs are `request` and `response`.
judges.safety(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
)
代理程式評估會測量令牌計數和執行延遲,以協助您瞭解代理程式的效能。
為了評估成本,代理程式評估會計算追蹤中所有 LLM 產生呼叫的總令牌計數。 這大約是指定為更多權杖的總成本,這通常會導致更多成本。 只有在 可用 時 trace
,才會計算令牌計數。 如果 model
引數包含在對 mlflow.evaluate()
的呼叫中,則會自動產生追蹤。 您也可以直接在評估資料集中提供 trace
資料行。
每個資料欄都會計算下列令牌計數:
資料欄位 | 類型 | 描述 |
---|---|---|
total_token_count |
integer |
代理程式追蹤中所有 LLM 範圍的所有輸入和輸出權杖總和。 |
total_input_token_count |
integer |
代理程式追蹤中所有 LLM 範圍的所有輸入權杖總和。 |
total_output_token_count |
integer |
代理程式追蹤中所有 LLM 範圍的所有輸出權杖總和。 |
計算追蹤的整個應用程式的延遲,以秒為單位。 只有在追蹤可供使用時,才會計算延遲。 如果 model
引數包含在對 mlflow.evaluate()
的呼叫中,則會自動產生追蹤。 您也可以直接在評估資料集中提供 trace
資料行。
系統會針對每個數據列計算下列延遲量值:
名稱 | 描述 |
---|---|
latency_seconds |
根據追蹤的端對端延遲 |
在計算所有每個數據列品質、成本和延遲評估之後,代理程式評估會將這些評估匯總成在MLflow執行中記錄的個別執行計量,並匯總所有輸入數據列中代理程序的品質、成本和延遲。
代理程式評估會產生下列計量:
度量名稱 | 類型 | 描述 |
---|---|---|
retrieval/llm_judged/chunk_relevance/precision/average |
float, [0, 1] |
chunk_relevance/precision 所有問題的平均值。 |
retrieval/llm_judged/context_sufficiency/rating/percentage |
float, [0, 1] |
判斷為 yes 的問題context_sufficiency/rating 百分比。 |
response/llm_judged/correctness/rating/percentage |
float, [0, 1] |
判斷為 yes 的問題correctness/rating 百分比。 |
response/llm_judged/relevance_to_query/rating/percentage |
float, [0, 1] |
判斷為 yes 的問題relevance_to_query/rating 百分比。 |
response/llm_judged/groundedness/rating/percentage |
float, [0, 1] |
判斷為 yes 的問題groundedness/rating 百分比。 |
response/llm_judged/safety/rating/average |
float, [0, 1] |
判斷為 yes 的問題safety/rating 百分比。 |
agent/total_token_count/average |
int |
total_token_count 所有問題的平均值。 |
agent/input_token_count/average |
int |
input_token_count 所有問題的平均值。 |
agent/output_token_count/average |
int |
output_token_count 所有問題的平均值。 |
agent/latency_seconds/average |
float |
latency_seconds 所有問題的平均值。 |
response/llm_judged/{custom_response_judge_name}/rating/percentage |
float, [0, 1] |
判斷為 yes 的問題{custom_response_judge_name}/rating 百分比。 |
retrieval/llm_judged/{custom_retrieval_judge_name}/precision/average |
float, [0, 1] |
{custom_retrieval_judge_name}/precision 所有問題的平均值。 |
下列螢幕快照顯示計量在 UI 中的顯示方式:
- LLM 評委可能會使用第三方服務來評估您的 GenAI 應用程式,包括了由 Microsoft 運作的 Azure OpenAI。
- 針對 Azure OpenAI,Databricks 已選取退出濫用監視,因此不會使用 Azure OpenAI 儲存任何提示或回應。
- 對於歐盟 (EU) 工作區,LLM 評委會使用歐盟託管的模型。 所有其他區域都會使用裝載於美國的模型。
- 停用 Azure AI 支援的 AI 輔助功能可防止 LLM 評委呼叫 Azure AI 支援的模型。
- 傳送給 LLM 評委的資料不會用於任何模型訓練。
- LLM 評委旨在協助客戶評估其 RAG 應用程式,而 LLM 評委輸出不應用來訓練、改善或微調 LLM。