评估

评估是测试代理性能并确保其在特定情况下按预期运行的关键工具。通过评估,您可以自动执行测试,在进行更改后发现回归,并衡量智能体回答的质量,从而提高智能体的质量。

如需开始使用,请点击智能体构建器顶部的评估按钮。

评估概念

测试用例:每个测试用例都是一个特定的、独立的测试场景或提示,旨在评估代理的表现。您可以创建三种不同类型的测试用例:

  • 场景:一项 AI 赋能的功能,可帮助您快速启动测试并确保全面的测试覆盖率。 您描述用户的目标,系统便会自动模拟用户并生成对话,测试智能体能否稳健地应对相应场景。场景是进行实验和帮助定义黄金对话的实用方法。
  • 模拟:非常适合测试多步骤历程。 您无需设定单一的开放式用户目标,而是将对话分解为有序的目标(也称为里程碑)列表。模拟用户会逐个完成目标,只有在满足当前目标的成功条件后,才会继续执行下一个目标。 模拟功能可让您灵活地模拟用户,同时让对话保持在可预测的路径上。
  • 黄金:非常适合回归测试。您提供特定的“理想”对话路径,评估会检查智能体的行为(包括工具调用)是否与该理想路径一致。

运行:评估运行表示针对您正在测试的智能体的性能,完整、单次执行一组黄金、场景和模拟测试用例。每次运行可以包含一个或多个测试用例。

结果:测试用例结果是指在单次运行中执行特定测试用例的结果。如果一个测试用例在单次评估运行期间运行多次(例如,为了检查一致性、不稳定性等),则每次单独执行都会产生一个单独的结果。结果会以矩形图标的形式显示在每个测试用例行的列中,如果运行失败,则显示红色 X;如果运行通过,则显示绿色对勾标记。

标记:测试用例可以使用标记进行分组,以便于管理。

创建测试用例

如需为智能体创建和访问测试用例,请点击智能体构建器顶部的评估按钮。您可以创建和管理基于黄金、场景或模拟的测试用例。测试用例列表中的类型列会显示每个测试用例的类型。

场景

基于场景的测试用例会使用 AI 根据您定义的总体用户目标自动生成各种对话。对于这些测试用例,您无需提供特定的黄金对话,而是选择生成的场景或描述必须测试的特定场景。这是一个强大的工具,可帮助您探索极端情况并测试智能体的稳健性,而无需手动编写每种可能的对话路径。

这些场景运行良好后,您可以将其保存为黄金对话。

如需创建场景,请执行以下操作:

  1. 点击创建场景。 为您推荐了多个场景。
  2. 您可以根据所选内容生成场景,也可以从头开始创建新场景。

查看场景列表时,您可以点击某个场景,列出该场景的详细信息和对话列表。

如需将场景保存为黄金对话,请执行以下操作:

  1. 选择场景。
  2. 点击右上角的菜单按钮。
  3. 选择另存为黄金对话。

场景用户目标

每个场景都有一个用户目标,用于描述最终用户在使用代理应用时的目标。例如:

Securely book a specific room at a chosen hotel and receive a confirmation.

CX Agent Studio 会根据您的用户目标自动生成用于评估的对话。

场景变量

定义场景时,您可以提供应在场景中使用的变量。

场景预期

为了执行评估,您需要为测试用例定义预期。

预期可以分为以下两种类型:

  • Message:预期的智能体回答。
  • 工具调用:具有预期输入和输出的工具调用。

预期可以具有以下条件:

  • 必备
  • 不得包含
  • 工具调用后
  • 变量值

如需创建预期,请执行以下操作:

  • 点击特定场景即可打开其详细信息。
  • 在预期部分中,点击查看全部。
  • 按照界面说明为场景创建预期。

模拟

模拟测试用例会将对话拆分为一个有序的步骤列表,这些步骤称为“目标”(也称为“里程碑”)。每个目标都描述了用户历程的一个阶段,以及模拟用户在进入下一阶段之前必须满足的条件。

模拟介于场景和黄金测试用例之间:

  • 场景为模拟用户提供一个开放式用户目标,并让其即兴完成整个对话。这对于探索很有用,但每次运行对话时,对话可能会采取不同的路线。
  • 黄金测试用例会固定每个用户轮次。这种方法对于回归测试来说很精确,但对于长流程来说过于死板,无法适应智能体措辞的有效变化。
  • 模拟会保留一个实时模拟用户,但会按顺序将其限制在您的目标范围内。这样一来,多步骤历程(例如身份验证、查找、更新)便可重复执行,而无需对每个轮次进行硬编码。

在以下情况下,请使用模拟:

  • 该历程包含多个不同的阶段,这些阶段必须按固定顺序进行。
  • 您需要确认代理在执行任何其他操作之前,先达到中间状态,例如成功验证来电者。
  • 黄金对话过于死板,而单一目标场景无法可靠地测试整个路径。

创建模拟

  1. 前往评估标签页。
  2. 点击 + 添加测试用例。
  3. 选择模拟。模拟编辑器随即打开,其中包含一个空目标。
  4. 输入测试用例名称,并添加标记。
  5. 填写第一个目标的用户目标和成功标准,并设置达成目标的最大轮数。
  6. 点击添加目标,然后按顺序为转化历程的每个阶段重复此操作。 如需详细了解每种步骤类型,请参阅目标。
  7. (可选)在变量替换部分中,点击添加替换,以在对话开始前设置会话变量。测试用例至少有一个替换项后,带标签的按钮会被替换为现有替换项条状标签旁边的添加 (+) 图标按钮。
  8. (可选)点击添加预期,以附加根据整个转录内容进行检查的对话级预期。
  9. 点击创建。

编辑器有一个界面标签页和一个 YAML 标签页,用于修改同一测试用例。如需详细了解 YAML 格式,请参阅以 YAML 格式修改模拟。

目标

点击添加目标,向模拟添加步骤。每个步骤都是以下类型之一,您可以从步骤的类型菜单中进行选择:

  • 用户目标:模拟用户会自行生成话语,直到满足成功条件。这些步骤在编辑器中标记为目标。配置:
    • 用户目标:模拟用户在此步骤中尝试完成的任务,例如 Ask for a refund on the most recent order。
    • 成功标准:用于确定步骤是否完成的条件,例如 Agent asks for the reason for the refund。
    • Max turns to achieve:在模拟停止之前,此步骤允许的最大轮数。默认值为 3。
    • 用户信息:可选的角色和上下文提示,仅对模拟用户可见,对代理不可见。使用此选项可提供用户知道的详细信息,例如订单号或致电原因。如需添加此字段,请打开该步骤的“更多选项”菜单,然后点击添加用户信息。
  • 静态话语:模拟用户会发送您提供的确切文本,而不会生成任何内容。当确切措辞很重要时,请使用此选项,例如,当您测试智能体如何处理字母数字账号时。
  • 事件:向代理发送命名事件,而不是话语。使用此选项可重现非对话输入,例如电话事件。

静态话语和事件步骤在编辑器中标记为回合。与用户目标一样,它们可以有成功标准,但没有自己的达成目标所需的最大轮数或用户信息字段。

将成功标准写成可观察到的代理行为。描述代理应说什么或做什么的条件可以得到可靠评估;描述从未在对话中出现的内部状态的条件则无法得到可靠评估。

模拟的运行方式

  1. 模拟用户从第一步开始。
  2. 在每个回合中,模拟用户都会生成一个仅针对当前步骤的话语。
  3. 智能体回答后,系统会根据当前步骤的成功标准对其进行评估。如果满足条件,该步骤会被标记为已完成,模拟用户会继续执行下一步。已完成的步骤永远不会重新打开。
  4. 如果某个步骤未在达成目标的最大轮数限制内完成,模拟就会停止。系统绝不会尝试执行其后的步骤。
  5. 对话结束后,系统会评估转写内容,并为尝试的每个步骤生成书面理由。

除了每步限制之外,整个对话的上限与任何其他模拟对话的总体限制相同,即 100 轮。在实践中,每步的达到目标所需的最大轮数限制会首先停止模拟。

除了适用于模拟对话的其他通过或失败条件之外,只有在完成每个步骤后,模拟才算通过。 由于步骤严格按顺序执行,因此一个失败的步骤会阻止测试用例的其余部分。对步骤进行排序,以便故障清楚地指向中断的阶段。

模拟结果

打开模拟结果,查看目标部分,其标题会显示已完成的步骤数占总步骤数的比例,例如 Goals (2/3)。如果并非所有步骤都已完成,该部分会自动展开。其中每个步骤都有一个可收起面板:

  • 绿色对勾标记表示已满足该步骤的成功标准。
  • 红色的 X 表示该步骤未完成,原因可能是从未满足条件,也可能是被前面的步骤阻止。

每个面板都包含一个理由,用通俗易懂的语言解释了为什么该步骤被视为已完成或未完成。运行完成后,系统会为您展开未完成的步骤并显示其理由,而完成的步骤则会收起。如果某个步骤从未尝试过,则会显示一条消息,其中包含阻止该步骤的目标文本。

目标下方的对话面板包含完整的模拟转录内容,因此您可以准确重放模拟用户所说的内容以及代理的回答。

如果运行以错误结束,结果顶部的卡片会显示错误消息。如果运行已完成,但静态话语步骤未完成,则该卡片会重复第一个此类步骤的理由。由于静态话语和事件步骤在编辑器中都标记为回合,因此请查看目标部分,了解卡片指的是哪个步骤。未完成的用户目标和事件步骤仅在目标部分中报告。

以 YAML 格式修改模拟

在模拟编辑器中,点击 YAML 标签页,以 YAML 格式修改测试用例。目标列表表示为 steps,每个步骤都映射到目标中描述的字段:

evals:
  - name: "billing_refund_request"
    tags:
      - "billing"
    session_parameters:
      product_id: "prod_123"
    steps:
      - goal: "Greet the agent and ask for a refund for product_id."
        success_criteria: "Agent asks for the reason for the refund."
        max_turns: 3
      - goal: "Provide the reason and insist on the refund."
        success_criteria: "Agent agrees to process the refund or escalates."
      - static_utterance: "I want to check my balance."
YAML 键 控制台字段
name 测试用例名称
tags 标记
session_parameters 变量替换
goal 用户目标
success_criteria 成功标准
max_turns 达成目标所需的最大回合数
response_guide 用户信息
static_utterance 静态话语步骤
event 事件步骤
expectations 预期

编辑器会在您输入时验证 YAML,并应用以下规则:

  • 该文档必须包含 evals 列表,并且编辑器仅读取该列表中的第一个条目。
  • 每个条目都必须有一个 name 和至少一个步骤。
  • 每个步骤都必须至少包含 goal、static_utterance 或 event 中的一个。
  • session_parameters 中的每个键都必须是代理应用中声明的变量。
  • expectations 中的每个字符串都必须是代理应用中已存在的期望的提示文本。匹配不区分大小写和周围的空格。如需创建预期,请在界面标签页中使用添加预期,然后在此处引用其提示。
  • evals 列表条目中无法识别的键会被拒绝。

日光

这些测试用例用于定义理想的对话路径,以便进行回归测试,从而确保在您更新代理时,核心、关键的对话路径不会中断。您可以通过多种方式创建黄金对话:

如需从模拟器导入对话,请执行以下操作:

  1. 使用模拟器开始对话。
  2. 点击模拟器右上角的三个竖点,调出模拟器菜单。
  3. 点击另存为黄金版本。
  4. 输入黄金测试用例的名称,然后点击保存。现在,它将显示在评估标签页中。

如需根据对话记录创建测试用例,请执行以下操作:

  1. 前往评估标签页。
  2. 点击 + 添加测试用例。
  3. 选择金色。
  4. 点击下一步。
  5. 点击从对话记录中选择。
  6. 在随即显示的窗口中,选择要保存为黄金测试用例的对话。您可以选择按对话 ID 进行搜索。
  7. 如果您已启用隐去功能,请先检查代理回答和变量是否已隐去,然后再继续处理缺失的信息。
  8. 点击 Add(添加)。

如需从头开始创建测试用例,请执行以下操作:

  1. 前往评估标签页。
  2. 点击 + 添加测试用例。
  3. 选择金色。
  4. 点击下一步。
  5. 点击从头开始创建。
  6. 在显示的窗口中,为测试用例添加显示名称。
  7. 根据需要添加用户输入和代理预期文本。点击 + 添加用户输入和 + 添加代理预期以添加回答。点击 + 添加对话轮次,向测试用例添加新的对话轮次。
  8. 点击创建,将黄金测试用例添加到测试用例列表中。

如需在场景测试用例中基于模拟对话创建测试用例,请执行以下操作:

  1. 前往评估运行结果页面。
  2. 点击所选对话右侧的菜单图标(三个竖点),然后点击另存为黄金对话。

如需从文件批量上传测试用例,请执行以下操作:

如需详细了解文件格式和 CSV 模板,请参阅黄金测试用例 CSV 格式页面。

黄金预期

为了执行评估,您需要为黄金测试用例定义预期。预期是您在对话中的特定时间点期望智能体达成的特定结果。在评估期间,系统会将实际智能体行为与这些预期进行比较。

预期可以是以下类型之一:

  • Message:智能体向最终用户提供的预期文字回答。 评估会检查智能体的回答是否在语义上与此预期相符。
  • 工具调用:预期智能体调用特定工具并做出响应。您还可以为工具调用指定预期的输入实参。
  • 智能体转接:预期智能体会将对话转接给人工客服或其他机器人。

如需创建预期,请执行以下操作:

  1. 点击特定黄金测试用例,打开其详细信息。
  2. 在详细信息部分,点击查看黄金。
  3. 按照界面说明添加或修改预期。

评估设置

在测试用例列表的标题行中,您可以配置评估设置:

  • 黄金:
    • 黄金级通过/失败标准:设置模拟对话通过或失败的逻辑。
    • 回合级:这些规则会评判每个单独的回合。如果未达到其中任何一个阈值,则特定指标将以红色编码,表示失败。
      • 语义相似度:语义相似度的阈值。
      • 工具调用正确性:工具调用正确性的阈值。
      • 幻觉:如果停用,则幻觉不计入通过/失败。
    • 预期级别:这些规则用于判断一轮对话中的预期。如果未达到其中任何一个阈值,则特定指标将以红色编码,表示失败。
      • 工具调用正确性:工具调用正确性的阈值。
    • 黄金运行方法:在简单或稳定重放验证之间进行选择。
    • 工具伪造:使用模拟数据,而不是实际生产 API 调用。
  • Scenarios:
    • 场景通过/失败条件:设置模拟对话通过或失败的逻辑。
    • 对话发起者:设置由谁发起对话,用户还是模型。
    • 工具伪造:使用模拟数据,而不是实际生产 API 调用。
  • 音频评估
    • 音频评估录音

运行评估

如需运行评估,您可以点击测试用例行中的运行按钮,也可以选择多个测试用例并运行它们。

如果您保存了多个版本,则可以选择要使用的代理版本,也可以自动将代理草稿保存为新版本以供运行。

评估运行后,系统会更新指标并显示结果。

如果您点击特定运行评估,则可以查看运行的详细结果。除了标准指标之外,系统还会显示以下指标:

  • 失败的转弯
  • 所有轮次详情的分页列表,其中包含实际和预期的智能体回答。

对于黄金测试用例,您可能会看到“稳定重放”一词,这表明测试是在一致的环境中运行的(即没有改变上下文/输入)。

对于模拟测试用例,结果会显示每个目标的结果,而不是与预期回答进行逐轮比较。如需了解详情,请参阅模拟结果。

使用 AI 改进测试用例(预览版)

您可以选择使用 AI 来帮助排查运行问题,并提出提高代理质量的方法。当运行次数(运行计数)为 3 次或更多时,AI 建议最为理想。 如需启用 AI,请选择要评估的测试用例,然后点击运行所选项。 在弹出的窗口中,勾选使用 AI 查找问题旁边的复选框。

运行完成后,您会在结果页面上看到基于 AI 的建议。 Gemini 会自动生成一个可下载的 loss_report,其中总结了代理在各个方面的表现,并突出显示了可以改进的方面。

任何用户都可以查看 AI 建议的修复,但只有发起运行的用户才能根据结果采取行动。

点击问问 Gemini,与辅助智能体互动。 您首先会看到损失报告,其中说明了模型或智能体的高级问题。您可以让辅助智能体解释报告,它会总结报告并可能建议修复。应用修复后,您可以让辅助代理再次运行评估。

导入和导出

您可以导入和导出 YAML 或 JSON 格式的评估测试用例、运行和结果。导入时,请确保接收代理包含导出的数据中定义的所有资源(工具、变量和子代理)。

如需导出测试用例,请执行以下操作:

  1. 选择一个或多个测试用例。
  2. 点击导出测试用例。
  3. 选择您所需要的格式。
  4. 系统会下载一个 ZIP 文件。

如需导入测试用例,请执行以下操作:

  1. 点击 + 添加测试用例。
  2. 选择金色。
  3. 点击下一步。
  4. 上传 ZIP 文件。
  5. 如果导入过程中出现任何冲突,系统会引导您如何处理。
  6. 点击创建。

如需导出评估运行和结果,请执行以下操作:

  1. 选择一个或多个评估运行。
  2. 点击导出运行。
  3. 选择您所需要的格式。
  4. 系统会下载一个 ZIP 文件。

指标

每个测试用例结果都包含一组指标,用于衡量代理在所选测试用例中的表现。指标在轮次级别或预期(对话)级别计算,如控制台中所示。

在所有情况下,您都可以在评估标签页的设置菜单中自定义运行通过所需的值。

工具调用正确性

针对黄金、场景和模拟测试用例计算。此指标反映了在给定预期工具调用及其预期参数值的情况下,匹配的预期参数所占的百分比。漏掉的工具调用得分为 0,没有输入参数的工具调用(如果存在)得分为 1。如果在黄金评估期间发出了意外的工具调用,则结果将被视为失败,但这不会影响工具正确性值。

用户目标满意度

针对场景和模拟测试用例计算。用户目标满意度是一个二元指标,专为用户模拟评估而设计。它衡量模拟用户是否认为其目标已实现(0=否,1=是)。输入是模拟用户配置和对话转写文稿定义的 user_goal。如果提供的 user_goal 未指定明确或隐含的目标,则输出得分为 -1。

模拟没有单独的字段来表示总体用户目标,因此系统会根据测试用例名称来判断此指标。为模拟命名,描述用户尝试实现的总体目标。

这并非模拟中唯一的对话级信号。模拟还可以包含预期,这些预期会根据整个转录内容进行检查,并在结果的预期部分中报告。这些预期与场景使用的预期相同;请参阅场景预期。每个步骤的结果由目标达成次数报告。

目标达成

仅针对模拟报告。系统不会为对话提供单一分数,而是会单独报告模拟中的每个步骤是否已完成,并提供解释结果的理由。控制台会在目标部分的标题中对此进行总结,显示已完成的步骤数占总步骤数的比例,例如 Goals (2/3)。该计数包括模拟中的每个步骤,包括静态话语和事件步骤。

由于系统会按顺序尝试执行各个步骤,因此第一个未完成的步骤就是导致失败的原因,并且系统不会尝试执行该步骤之后的步骤。

幻觉

适用于黄金和场景测试用例。 系统会针对每个生成的对话轮次计算幻觉得分。 此指标反映了智能体是否提出了智能体上下文无法证明的主张(0=否,1=是)。上下文由对话中的任何先前轮次、会话变量、工具调用和代理指令组成。此指标仅针对包含工具调用的轮次进行计算。 它不会检测工具调用中的幻觉;作为上下文提供的工具调用会被假定为正确。 为了尽可能减少假正例,如果回答不包含任何事实性声明,或者仅包含已确立的常识,该指标可能会返回 N/A 分数。

您可以在评估设置中启用和停用幻觉。

语义匹配

仅针对黄金测试用例计算;不针对场景或模拟测试用例计算。此指标用于衡量观察到的代理话语与预期代理话语的匹配程度。语义匹配在轮次级别计算。返回的值范围从 0(完全不一致或矛盾)到 4(完全一致)。

场景预期

针对场景和模拟测试用例计算。此指标用于衡量代理的行为是否符合模拟用户的预期(0=否,1=是)。支持两种类型的模拟用户预期:

  • 工具调用预期:计算方式与工具调用正确性类似,但有以下例外情况:
    • 结果为 0(否)或 1(是)。
    • 意外的工具调用不会受到惩罚。预期旨在指定一组工具调用,这些调用对于对话满足模拟用户的预期至关重要。
    • 当满足工具调用输入预期时,系统会在运行时拦截该调用并将其替换为模拟返回值。
  • 代理回答预期:检查对话中的任何代理回答是否包含预期字符串。

任务完成

针对场景和模拟测试用例计算。任务完成情况是衡量对话质量的一个指标。它会共同衡量用户目标是否实现以及智能体行为是否正确。其定义如下:

User_Goal_Satisfied AND no_hallucinations_detected AND Expectations Satisfied

对于模拟,还需满足第四个条件:模拟中的每个步骤也必须完成。控制台会将任务完成情况报告为测试用例结果的总体通过或失败状态。

角色

角色是模拟的用户角色,您可以对其进行自定义,并将其用于场景和模拟测试用例的智能体测试。此功能有助于确保代理与运行时可能遇到的人类用户类型进行适当的互动。

如果您不选择角色,系统会为每个场景结果随机选择一个角色。

此功能可用于文本和音频输入。

创建角色

  1. 如需创建角色,请前往评估标签页,然后点击角色管理(位于“设置”图标旁边)。
  2. 点击 + 添加角色。
  3. 在弹出的菜单中,输入名称、用户个性以及任何其他用户背景信息(例如年龄、位置、致电原因等)。
  4. 点击添加。

如需使用角色运行评估,请执行以下操作:

  1. 返回到评估主页面,然后选择一个或多个场景或模拟测试用例。点击运行所选模型。
  2. 在弹出的窗口中,从角色下拉菜单中选择您刚刚创建的角色,然后点击运行。

评估和爬山法最佳实践

使用模块化组件构建新代理时,请为每个代理变体创建专用测试用例,例如:

  • 语音和聊天
  • 短信和聊天 SDK
  • 品牌 A、B、C 等

创建其他用例,以检查是否存在跨变体指令泄露。 例如,在语音模式下运行的用例不应显示聊天专用指令,反之亦然。

确保针对正确的代理运行用例:

  • 对于模态(聊天与语音)或渠道,针对正确的部署运行用例可自动确保一致性。
  • 每个部署都封装了模态、所用模型和渠道。
  • 对于构建器定义的变量条件,请在运行用例时注入变量值。例如:brand_name == "Cymbal Retail" 或 brand_name == "Acme Corp"。

让您常用的编码智能体反复改进 CX Agent Studio 智能体,直到所有测试用例都达到目标指标或任何其他质量目标。

  • 让编码智能体协调来自不同测试用例的建议更改,这些更改会影响相同的智能体指令。 指示它标记棘手的冲突以供人工审核,以便您在需要时提供细致入微的输入。
  • 让编码智能体为所做的更改创建所有智能体变体的并排差异。 这有助于理解和验证它选择的修复方案。
  • 根据需要进行迭代。 这些迭代的具体性质取决于您的 CX Agent Studio 智能体设计、编码智能体设计、所用模型和对话框架。
  • 通过手动验证实际转写内容和结果样本,确保编码代理的结果准确无误。
  • 指示编码智能体从爬山练习中找出缺失的场景,并建议新的用例(如果适用)。 根据需要继续迭代。