評估生成式 AI 虛擬服務專員

建構及評估生成式 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 存放區

後續步驟

試用下列代理程式評估筆記本: