评估代理

开发智能体后,您可以使用 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 重新安排为仅于 2024 年 12 月 25 日在社交媒体网站 Y 上投放的一次性广告系列,且将预算减少 50%。”

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

  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:所有得分的标准差。

后续步骤

不妨试试以下笔记本: