你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure AI Studio 中开发评估流
重要
本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
评估流是一种特殊类型的流,用于评估运行的输出与特定标准和目标的一致程度。
在提示流中,可以自定义或创建针对任务和目标定制的评估流,然后用其评估其他流。 本文档将介绍:
- 如何开发评估方法。
- 了解用于提示流评估的输入、输出和日志记录指标。
开始开发评估方法
可通过两种方法开发自己的评估方法:
自定义内置评估流:修改内置评估流。
- 在“工具”下,选择“提示流”。
- 选择“创建”打开流创建向导。
- 在流库中的“浏览库”下,选择“评估流”以按该类型进行筛选。 选取一个示例,然后选择“克隆”进行自定义。
从头开始创建新的评估流:从头开始开发全新的评估方法。
- 在“工具”下,选择“提示流”。
- 选择“创建”打开流创建向导。
- 在流库的“评估流”框中的“按类型创建”下,选择“创建”,然后可以看到评估流的模板。
了解提示流中的评估
在提示流中,流是处理输入并生成输出的一系列节点。 评估流还采用所需的输入并生成相应的输出。
评估方法的一些特殊之处在于:
- 它们通常在要测试的运行后运行,并从该运行接收输出。
- 除了要测试的运行中的输出之外,他们还可选择性地接收另一个可能包括相应基本事实的数据集。
- 它们可能具有一个聚合节点,该节点根据各个分数计算要测试的流的总体性能。
- 他们可以使用
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 节点中调用此函数时,无需在其他地方分配它,并且稍后可以查看指标。 在批量运行中使用此评估方法时,可以在“概述 ->指标”选项卡中查看实例级分数。