建構及評估生成式 AI 模型後,您可能會使用該模型建構代理程式,例如聊天機器人。Gen AI 評估服務可讓您評估代理程式完成任務和目標的能力。
總覽
評估代理程式的選項如下:
最終回應評估:評估代理程式的最終輸出內容 (代理程式是否達成目標)。
軌跡評估:評估代理程式為取得最終回覆所採取的路徑 (工具呼叫序列)。
使用 Gen AI 評估服務,您可以在一個 Vertex AI SDK 查詢中,觸發代理程式執行作業,並取得軌跡評估和最終回覆評估的指標。
支援的服務專員
Gen AI Evaluation Service 支援下列類別的代理程式:
支援的服務專員 | 說明 |
---|---|
使用 Agent Engine 範本建構的代理程式 | Agent Engine (LangChain on Vertex AI) 是一個 Google Cloud 平台,您可以在這裡部署及管理代理。 |
使用 Agent Engine 可自訂範本建構的 LangChain 代理程式 | LangChain 是開放原始碼平台。 |
自訂代理程式函式 | 自訂代理程式函式是彈性函式,可接收代理程式的提示,並以字典形式傳回回應和軌跡。 |
定義代理程式評估指標
定義最終回覆或軌跡評估的指標:
最終回覆評估
最終回覆評估程序與模型回覆評估程序相同。詳情請參閱「定義評估指標」。
軌跡評估
下列指標可協助您評估模型是否能按照預期軌跡運作:
完全比對
如果預測軌跡與參考軌跡完全相同,且工具呼叫完全相同,順序也完全相同,則 trajectory_exact_match
指標會傳回 1 分,否則為 0 分。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
reference_trajectory |
代理程式為滿足查詢而預期使用的工具。 |
輸出分數
值 | 說明 |
---|---|
0 | 預測軌跡與參考軌跡不符。 |
1 | 預測軌跡與參考軌跡相符。 |
依序比對
如果預測軌跡包含參考軌跡中的所有工具呼叫 (順序相同),且可能還有額外的工具呼叫,則 trajectory_in_order_match
指標會傳回 1 分,否則為 0 分。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來取得最終回應的預測軌跡。 |
reference_trajectory |
預期代理程式滿足查詢的預測軌跡。 |
輸出分數
值 | 說明 |
---|---|
0 | 預測軌跡中的工具呼叫順序與參考軌跡不符。 |
1 | 預測軌跡與參考軌跡相符。 |
不限順序的相符項目
如果預測軌跡包含參考軌跡中的所有工具呼叫,但順序不重要且可能包含額外的工具呼叫,則 trajectory_any_order_match
指標會傳回 1 分,否則為 0 分。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
reference_trajectory |
代理程式為滿足查詢而預期使用的工具。 |
輸出分數
值 | 說明 |
---|---|
0 | 預測軌跡未包含參考軌跡中的所有工具呼叫。 |
1 | 預測軌跡與參考軌跡相符。 |
精確度
trajectory_precision
指標會根據參考軌跡,評估預測軌跡中有多少工具呼叫實際上是相關或正確的。
精確度的計算方式如下:計算預測軌跡中也出現在參考軌跡中的動作數量。然後將該次數除以預測軌跡中的動作總數。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
reference_trajectory |
代理程式為滿足查詢而預期使用的工具。 |
輸出分數
值 | 說明 |
---|---|
介於 [0,1] 範圍內的浮點數 | 分數越高,預測的軌跡就越精確。 |
喚回度
trajectory_recall
指標會測量預測軌跡實際擷取的參考軌跡基本工具呼叫次數。
計算召回率的方式如下:計算參考軌跡中有多少動作也出現在預測軌跡中。然後將該計數除以參考軌跡中的動作總數。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
reference_trajectory |
代理程式為滿足查詢而預期使用的工具。 |
輸出分數
值 | 說明 |
---|---|
介於 [0,1] 範圍內的浮點數 | 分數越高,預測軌跡的喚回度就越高。 |
單一工具用途
trajectory_single_tool_use
指標會檢查預測軌跡是否使用指標規格中指定的特定工具。這項指標不會檢查工具呼叫的順序或工具的使用次數,只會檢查工具是否存在。
指標輸入參數
輸入參數 | 說明 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
輸出分數
值 | 說明 |
---|---|
0 | 缺少工具 |
1 | 工具已安裝。 |
此外,評估結果預設會加入下列兩項服務專員成效指標。您不需要在 EvalTask
中指定這些參數。
latency
服務專員傳回回應所花的時間。
值 | 說明 |
---|---|
浮點數 | 以秒為單位計算。 |
failure
布林值,說明代理程式叫用是否導致錯誤或成功。
輸出分數
值 | 說明 |
---|---|
1 | 錯誤 |
0 | 傳回有效回應 |
準備用於評估代理程式的資料集
準備資料集,以評估最終回應或軌跡。
最終回應評估的資料架構與模型回應評估類似。
如要根據運算結果評估軌跡,資料集必須提供下列資訊:
輸入類型 | 輸入欄位內容 |
---|---|
predicted_trajectory |
代理程式用來產生最終回應的工具呼叫清單。 |
reference_trajectory (trajectory_single_tool_use metric 不需此步驟) |
代理程式為滿足查詢而預期使用的工具。 |
評估資料集範例
以下範例顯示用於軌跡評估的資料集。請注意,除了 trajectory_single_tool_use
以外,所有指標都需要 reference_trajectory
。
reference_trajectory = [
# example 1
[
{
"tool_name": "set_device_info",
"tool_input": {
"device_id": "device_2",
"updates": {
"status": "OFF"
}
}
}
],
# example 2
[
{
"tool_name": "get_user_preferences",
"tool_input": {
"user_id": "user_y"
}
},
{
"tool_name": "set_temperature",
"tool_input": {
"location": "Living Room",
"temperature": 23
}
},
]
]
predicted_trajectory = [
# example 1
[
{
"tool_name": "set_device_info",
"tool_input": {
"device_id": "device_3",
"updates": {
"status": "OFF"
}
}
}
],
# example 2
[
{
"tool_name": "get_user_preferences",
"tool_input": {
"user_id": "user_z"
}
},
{
"tool_name": "set_temperature",
"tool_input": {
"location": "Living Room",
"temperature": 23
}
},
]
]
eval_dataset = pd.DataFrame({
"predicted_trajectory": predicted_trajectory,
"reference_trajectory": reference_trajectory,
})
匯入評估用資料集
您可以匯入下列格式的資料集:
儲存在 Cloud Storage 中的 JSONL 或 CSV 檔案
BigQuery 資料表
Pandas DataFrame
生成式 AI 評估服務提供公開資料集範例,示範如何評估代理程式。下列程式碼顯示如何從 Cloud Storage 值區匯入公開資料集:
# dataset name to be imported
dataset = "on-device" # Alternatives: "customer-support", "content-creation"
# copy the tools and dataset file
!gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/{dataset}/tools.py .
!gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/{dataset}/eval_dataset.json .
# load the dataset examples
import json
eval_dataset = json.loads(open('eval_dataset.json').read())
# run the tools file
%run -i tools.py
其中 dataset
是下列其中一個公開資料集:
"on-device"
,控制家用裝置。 例如「將臥室的空調排程設為晚上 11 點到早上 8 點開啟,其他時間關閉」。"customer-support"
,客戶服務專員會協助你。代理程式可協助處理查詢,例如「Can you cancel any pending orders and escalate any open support tickets?」(你能取消任何待處理的訂單,並將任何未結的支援單升級嗎?)"content-creation"
,適用於行銷內容製作代理商。服務專員可協助處理的查詢包括:「將廣告活動 X 重新排定為 2024 年 12 月 25 日在社群媒體網站 Y 放送的一次性廣告活動,預算減少 50%」。
執行代理程式評估
執行軌跡或最終回覆評估:
如要評估代理程式,您可以混合使用回應評估指標和軌跡評估指標,如下列程式碼所示:
single_tool_use_metric = TrajectorySingleToolUse(tool_name='tool_name')
eval_task = EvalTask(
dataset=EVAL_DATASET,
metrics=[
"rouge_l_sum",
"bleu",
custom_trajectory_eval_metric, # custom computation-based metric
"trajectory_exact_match",
"trajectory_precision",
single_tool_use_metric,
response_follows_trajectory_metric # llm-based metric
],
)
eval_result = eval_task.evaluate(
runnable=RUNNABLE,
)
自訂指標
您可以透過範本介面或從頭開始,自訂以大型語言模型為基礎的指標,用於評估軌跡。詳情請參閱以模型為基礎的指標一節。範例如下:
response_follows_trajectory_prompt_template = PointwiseMetricPromptTemplate(
criteria={
"Follows trajectory": (
"Evaluate whether the agent's response logically follows from the "
"sequence of actions it took. Consider these sub-points:\n"
" - Does the response reflect the information gathered during the trajectory?\n"
" - Is the response consistent with the goals and constraints of the task?\n"
" - Are there any unexpected or illogical jumps in reasoning?\n"
"Provide specific examples from the trajectory and response to support your evaluation."
)
},
rating_rubric={
"1": "Follows trajectory",
"0": "Does not follow trajectory",
},
input_variables=["prompt", "predicted_trajectory"],
)
response_follows_trajectory_metric = PointwiseMetric(
metric="response_follows_trajectory",
metric_prompt_template=response_follows_trajectory_prompt_template,
)
您也可以定義自訂的運算式指標,用於評估軌跡或回覆,如下所示:
def essential_tools_present(instance, required_tools = ["tool1", "tool2"]):
trajectory = instance["predicted_trajectory"]
tools_present = [tool_used['tool_name'] for tool_used in trajectory]
if len(required_tools) == 0:
return {"essential_tools_present": 1}
score = 0
for tool in required_tools:
if tool in tools_present:
score += 1
return {
"essential_tools_present": score/len(required_tools),
}
custom_trajectory_eval_metric = CustomMetric(name="essential_tools_present", metric_function=essential_tools_present)
查看及解讀結果
如要評估軌跡或最終回覆,評估結果會顯示如下:
評估結果包含下列資訊:
最終回覆指標
執行個體層級結果
欄 | 說明 |
---|---|
回應 | 代理生成的最終回覆。 |
latency_in_seconds | 生成回覆所費時間。 |
失敗 | 指出是否已生成有效的回覆。 |
分數 | 針對指標規格中指定的回應計算的分數。 |
說明 | 指標規格中指定的分數說明。 |
匯總結果
欄 | 說明 |
---|---|
平均值 | 所有執行個體的平均分數。 |
標準差 | 所有分數的標準差。 |
軌跡指標
執行個體層級結果
欄 | 說明 |
---|---|
predicted_trajectory | 工具呼叫序列,後接代理程式,以取得最終回應。 |
reference_trajectory | 預期工具呼叫的順序。 |
分數 | 針對指標規格中指定的預測軌跡和參考軌跡計算的分數。 |
latency_in_seconds | 生成回覆所費時間。 |
失敗 | 指出是否已生成有效的回覆。 |
匯總結果
欄 | 說明 |
---|---|
平均值 | 所有執行個體的平均分數。 |
標準差 | 所有分數的標準差。 |
Agent2Agent (A2A) 通訊協定
如果您要建構多代理程式系統,強烈建議您參閱 A2A 通訊協定。A2A 通訊協定是開放式標準,可讓 AI 代理順暢通訊及協作,不受底層架構限制。並於 2025 年 6 月捐贈給 Linux 基金會 Google Cloud 。如要使用 A2A SDK 或試用範例,請查看 GitHub 存放區。
後續步驟
試用下列代理程式評估筆記本: