你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure AI Studio 中开发评估流

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

评估流是一种特殊类型的流,用于评估运行的输出与特定标准和目标的一致程度。

在提示流中,可以自定义或创建针对任务和目标定制的评估流,然后用其评估其他流。 本文档将介绍:

  • 如何开发评估方法。
  • 了解用于提示流评估的输入、输出和日志记录指标。

开始开发评估方法

可通过两种方法开发自己的评估方法:

  • 自定义内置评估流:修改内置评估流。

    1. 在“工具”下,选择“提示流”
    2. 选择“创建”打开流创建向导
    3. 在流库中的“浏览库”下,选择“评估流”以按该类型进行筛选。 选取一个示例,然后选择“克隆”进行自定义
  • 从头开始创建新的评估流:从头开始开发全新的评估方法。

    1. 在“工具”下,选择“提示流”
    2. 选择“创建”打开流创建向导
    3. 在流库的“评估流”框中的“按类型创建”下,选择“创建”,然后可以看到评估流的模板

了解提示流中的评估

在提示流中,流是处理输入并生成输出的一系列节点。 评估流还采用所需的输入并生成相应的输出。

评估方法的一些特殊之处在于:

  • 它们通常在要测试的运行后运行,并从该运行接收输出。
  • 除了要测试的运行中的输出之外,他们还可选择性地接收另一个可能包括相应基本事实的数据集。
  • 它们可能具有一个聚合节点,该节点根据各个分数计算要测试的流的总体性能。
  • 他们可以使用 log_metric() 函数记录指标。

我们将介绍如何在开发评估方法时定义输入和输出。

输入

评估在另一次运行后运行,以评估该运行的输出与特定标准和目标的一致程度。 因此,评估接收从该运行生成的输出。

可能还需要其他输入,例如可能来自数据集的实况。 默认情况下,评估会使用与提供给已测试运行的测试数据集相同的数据集。 但如果相应的标签或目标地基本事实值位于不同的数据集中,则可以轻松切换到该数据集。

因此,要运行评估,需要指示这些所需输入的源。 为此,在提交评估时,你将看到“输入映射”部分。

  • 如果数据源来自运行输出,则指示源为 ${run.output.[OutputName]}
  • 如果数据源来自测试数据集,则源指示为 ${data.[ColumnName]}

注意

如果评估不需要数据集中的数据,则无需在输入映射部分引用任何数据集列,这指示数据集选择是可选配置。 数据集选择不会影响评估结果。

输入说明

若要提醒计算指标需要哪些输入,可以为每个所需输入添加说明。 在批量运行提交中映射源时,会显示说明。

若要为每个输入添加说明,请在开发评估方法时在输入部分选择“显示说明”。 你可以选择“隐藏说明”来隐藏说明。

然后,在批量运行提交中使用此评估方法时,会显示此说明。

输出和指标

评估的输出是衡量所测试流性能的结果。 输出通常包含分数等指标,还可能包含用于推理和建议的文本。

实例级分数输出

在提示流中,流一次处理一个示例数据集,并生成输出记录。 同样,在大多数评估事例中,每个输出都有一个指标,使你能够检查流对每个单独的数据的执行方式。

若要记录每个数据样本的分数,请计算每个输出的分数,并通过在输出部分中设置该分数来将其记录为流输出。 此创作体验与定义标准流输出相同。

我们在line_process节点中计算此分数,你可以在按类型创建时从头开始创建和编辑该分数。 还可以将此 Python 节点替换为 LLM 节点,以使用 LLM 计算分数。

使用此评估方法评估另一个流时,可以在“概述”>“输出”选项卡中查看实例级分数。

指标日志记录和聚合节点

此外,提供运行的总体分数也很重要。 可以在评估流中检查 Python 节点的“设置为聚合”,将其转换为“reduce”节点,从而允许该节点将输入作为列表进行批量处理。

通过这种方式,可以计算和处理每个流输出的所有分数,并计算每个变体的总体结果。

可以使用 Prompt flow_sdk.log_metrics() 记录聚合节点中的指标。 指标应为数值(浮点数/int)。 不支持字符串类型指标日志记录。

我们在 aggregate 节点中计算此分数,你可在按类型创建时从头开始创建和编辑该节点。 还可将此 Python 节点替换为 LLM 节点,以使用 LLM 计算分数。 请参阅以下示例,了解如何评估流中使用 log_metric API:

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str], variant_ids: List[str]):
    aggregate_grades = {}
    for index in range(len(grades)):
        grade = grades[index]
        variant_id = variant_ids[index]
        if variant_id not in aggregate_grades.keys():
            aggregate_grades[variant_id] = []
        aggregate_grades[variant_id].append(grade)

    # calculate accuracy for each variant
    for name, values in aggregate_grades.items():
        accuracy = round((values.count("Correct") / len(values)), 2)
        log_metric("accuracy", accuracy, variant_id=name)

    return aggregate_grades

在 Python 节点中调用此函数时,无需在其他地方分配它,并且稍后可以查看指标。 在批量运行中使用此评估方法时,可以在“概述 ->指标”选项卡中查看实例级分数。

后续步骤