评估代理

开发智能体后,您可以使用 Gen AI Evaluation Service 评估智能体完成给定使用场景的任务和目标的能力。

定义评估指标

首先创建一个空指标列表(即 metrics = []),然后向其中添加相关指标。如需添加其他指标,请执行以下操作:

最终回复

最终回答评估遵循与基于模型的评估相同的流程。如需了解详情,请参阅定义评估指标

完全匹配

metrics.append("trajectory_exact_match")

如果预测轨迹与参照轨迹完全相同,并且工具调用完全相同且顺序完全相同,则 trajectory_exact_match 指标会返回 1 得分,否则返回 0

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

按顺序匹配

metrics.append("trajectory_in_order_match")

如果预测轨迹包含参考轨迹中的所有工具调用(按相同顺序)以及可能包含额外的工具调用,则 trajectory_in_order_match 指标会返回 1 得分,否则返回 0 得分。

输入参数

  • predicted_trajectory:代理用于得出最终回答的预测轨迹。
  • reference_trajectory:代理满足查询的预期预测轨迹。

任意顺序匹配

metrics.append("trajectory_any_order_match")

如果预测轨迹包含参照轨迹中的所有工具调用,但顺序无关紧要,并且可能包含额外的工具调用,则 trajectory_any_order_match 指标会返回 1 分数,否则返回 0

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

精确度

metrics.append("trajectory_precision")

trajectory_precision 指标用于衡量预测轨迹中的工具调用中有多少是根据参考轨迹实际相关或正确的。这是一个介于 [0, 1] 范围内的 float 值:得分越高,预测的轨迹越精确。

精确率的计算方法如下:统计预测轨迹中同时出现在参考轨迹中的操作数量。将该计数除以预测轨迹中的总操作数。

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

召回率

metrics.append("trajectory_recall")

trajectory_recall 指标用于衡量预测轨迹中实际捕获了多少来自参照轨迹的重要工具调用。这是一个介于 [0, 1] 范围内的 float 值:得分越高,预测轨迹的召回率就越高。

召回率的计算方法如下:统计参考轨迹中同时出现在预测轨迹中的操作数量。将该计数除以参考轨迹中的操作总数。

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

单次使用

from vertexai.preview.evaluation import metrics

metrics.append(metrics.TrajectorySingleToolUse(tool_name='tool_name'))

trajectory_single_tool_use 指标用于检查预测轨迹中是否使用了指标规范中指定的特定工具。它不会检查工具调用的顺序或工具的使用次数,只会检查工具是否存在。如果不存在该工具,则值为 0;否则为 1

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。

自定义

您可以按如下方式定义自定义指标:

from vertexai.preview.evaluation import metrics

def word_count(instance):
  response = instance["response"]
  score = len(response.split(" "))
  return {"word_count": score}

metrics.append(
  metrics.CustomMetric(name="word_count", metric_function=word_count)
)

结果中始终包含以下两个性能指标。您无需在 EvalTask 中指定它们:

  • latency (float):客服人员响应所用时间(以秒为单位)。
  • failure (bool):如果代理调用成功,则为 0;否则为 1

准备评估数据集

如需为最终响应或轨迹评估准备数据集,请执行以下操作:

最终回复

最终回答评估的数据架构与模型回答评估的数据架构类似。

完全匹配

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

按顺序匹配

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于得出最终回答的预测轨迹。
  • reference_trajectory:代理满足查询的预期预测轨迹。

任意顺序匹配

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

精确度

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

召回率

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。
  • reference_trajectory:智能体满足查询时预计要使用的工具。

单次使用

评估数据集需要提供以下输入:

输入参数

  • predicted_trajectory:代理用于生成最终回答的工具调用列表。

下面的评估数据集示例仅作说明之用。

  import pandas as pd

  eval_dataset = pd.DataFrame({
    "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},
        },
      ]
    ],
    "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},
        },
      ],
    ],
  })

示例数据集

我们提供了以下示例数据集,以演示如何评估代理:

  • "on-device":设备端 Home Assistant 的评估数据集。该客服人员可帮助处理诸如“将卧室空调设为在晚上 11 点到早上 8 点之间开启,其余时间关闭”等查询。

  • "customer-support":客户服务人员的评估数据集。客服人员可帮助您解决“您能取消所有待处理的订单并上报所有未处理的支持服务工单吗?”等问题。

  • "content-creation":营销内容创作代理的评估数据集。该客服人员可帮助您处理以下查询:“将广告系列 X 重新安排为在社交媒体网站 Y 上投放一次性广告系列,预算减少 50%,仅投放 2024 年 12 月 25 日。”

如需导入示例数据集,请执行以下操作:

  1. 安装初始化 gcloud CLI。

  2. 下载评估数据集。

    设备端

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/on-device/eval_dataset.json .

    客户服务

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/customer-support/eval_dataset.json .

    内容创作

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/content-creation/eval_dataset.json .
  3. 加载数据集示例

    import json
    
    eval_dataset = json.loads(open('eval_dataset.json').read())
    

生成评估结果

如需生成评估结果,请运行以下代码:

from vertexai.preview.evaluation import EvalTask

eval_task = EvalTask(dataset=eval_dataset, metrics=metrics)
eval_result = eval_task.evaluate(runnable=agent)

查看和解读结果

评估结果如下所示:

显示客服人员评估指标的表格

评估结果包含以下信息:

最终回答指标

按行指标

  • response:代理生成的最终响应。
  • latency_in_seconds:生成响应所用时间(以秒为单位)。
  • failure:指示是否生成了有效的回答。
  • score:为指标规范中指定的响应计算的得分。
  • explanation:指标规范中指定的得分的说明。

摘要指标

  • mean:所有实例的平均得分。
  • standard deviation:所有得分的标准差。

轨迹指标

按行指标

  • predicted_trajectory:工具调用序列,后跟代理以获取最终响应。
  • reference_trajectory:预期工具调用的序列。
  • score:为指标规范中指定的预测轨迹和参照轨迹计算得出的得分。
  • latency_in_seconds:生成响应所用的时间(以秒为单位)。
  • failure:指示是否生成了有效的回答。

摘要指标

  • mean:所有实例的平均得分。
  • standard deviation:所有得分的标准差。

后续步骤

请试用以下笔记本: