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

在 Microsoft Foundry 门户(经典)中创建评估流程

仅适用于:Foundry (经典版)门户。 本文不适用于新的 Foundry 门户。 详细了解新门户

注意

本文中的链接可能会打开新 Microsoft Foundry 文档中的内容,而不是你现在正在查看的 Foundry (经典)文档。

警告

Microsoft Foundry 和 Azure 机器学习 中的 Prompt flow 将于 2027 年 4 月 20 日退役。 对于新开发,不再推荐使用提示流。 请于 2027 年 4 月 20 日前将现有的 Prompt flow 应用和部署迁移到 Microsoft Agent Framework。

提示流容器映像不再接收更新,包括安全更新和包更新。 这适用于 Prompt flow 运行时镜像,包括 promptflow-runtimepromptflow-runtime-stablepromptflow-python

2027 年 4 月 20 日之后,提示流(包括 Microsoft Foundry 和 Azure 机器学习 中的 Web 创作体验、VS Code 扩展和相关提示流容器映像)将不再受支持或可用。

如果应用程序依赖于提示流部署或运行时映像,请计划在停用日期之前将这些工作负荷移动到受支持的替代项,例如 Microsoft Agent Framework。 有关迁移指南,请参阅提示流 迁移指南 和迁移 代码示例

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

在提示流中,可以自定义或创建根据任务和目标定制的自己的评估流,然后使用它评估其他流。 在本文件中,您将学习:

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

先决条件

重要

本文为基于中心的项目提供旧版支持。 它将不适用于 Foundry 项目。 请参阅 如何知道我拥有哪种类型的项目?

SDK 兼容性说明:代码示例需要特定Microsoft Foundry SDK 版本。 如果遇到兼容性问题,请考虑 从基于中心迁移到 Foundry 项目

开始开发评估方法

有两种方法可以开发自己的评估方法:

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

    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()在聚合节点中记录指标。 指标应为数值(float/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节点中调用此函数时,无需在其他地方分配它,以后可以查看指标。 在批处理运行中使用此评估方法时,可以在“概述指标>”选项卡中查看实例级分数。

后续步骤