Microsoft PromptFlow项目:开发评估流程的技术指南
评估流程概述
在Microsoft PromptFlow项目中,评估流程(Evaluation Flow)是一种专门用于测试和评估LLM(大语言模型)应用质量的流程。与标准流程不同,评估流程的核心功能是分析标准流程或聊天流程的输出结果,并计算关键性能指标,帮助开发者判断模型表现是否符合预期。
评估流程与标准流程的异同
评估流程与标准流程有许多共同特性,包括:
- 输入/输出定义方式
- 节点(Node)的基本结构
- 节点间的链式调用关系
但评估流程也有其独特之处:
- 输入来源特殊:评估流程的输入通常来自已有流程运行的输出结果
- 包含聚合节点:评估流程必须包含一个或多个聚合节点(Aggregation Node),用于实际的计算和评估工作
评估流程实例解析
我们以一个分类准确率评估流程为例,展示评估流程的典型结构和工作原理。该流程主要功能是:
- 将预测结果与真实标签(groundtruth)进行比对
- 标记每个预测结果为"正确"或"错误"
- 汇总所有结果计算准确率等指标
输入定义详解
评估流程通常需要定义两个关键输入参数:
inputs:
groundtruth:
type: string
description: 原始问题的真实标签,即你希望标准流程能预测出的正确结果
default: APP
prediction:
type: string
description: 你的流程实际产生的预测输出
default: APP
groundtruth
:代表标准答案或期望值prediction
:来自标准流程或聊天流程的预测输出
从定义语法上看,这与标准流程的输入定义没有区别。但在实际运行时,评估流程需要同时指定数据文件和流程输出作为数据源。
聚合节点深度解析
聚合节点是评估流程的核心组件,它与常规节点有两个关键区别:
1. 语法标记差异
在YAML定义中,聚合节点需要显式设置aggregation: true
属性:
- name: calculate_accuracy
type: python
source:
type: code
path: calculate_accuracy.py
inputs:
grades: ${grade.output}
aggregation: true # 这个属性标记了这是一个聚合节点
2. 参数处理方式
聚合节点的Python代码需要接收列表(List)类型的参数,这个列表包含了所有相关常规节点的输出结果:
from typing import List
from promptflow.core import log_metric, tool
@tool
def calculate_accuracy(grades: List[str]):
# 计算准确率
accuracy = round((grades.count("Correct") / len(grades)), 2)
log_metric("accuracy", accuracy)
return grades
数据匹配机制
评估流程具有智能的数据匹配能力,能够:
- 自动对齐标准流程输出和数据文件中的记录
- 处理部分运行失败的情况
- 确保评估结果与原始数据正确对应
例如,当标准流程有3个输入但第2个运行失败时,评估流程会自动跳过无效数据,只处理成功的记录。
指标记录最佳实践
在评估流程中,我们可以使用log_metric
函数记录关键指标:
from promptflow.core import log_metric
log_metric("accuracy", 0.95) # 记录准确率为95%
重要注意事项:
- 指标记录只能在聚合节点中进行
- 记录的指标会作为运行元数据保存
- 可以通过命令行工具查看记录的指标
开发建议
- 模块化设计:将评估逻辑拆分为多个节点,每个节点负责单一功能
- 错误处理:考虑数据不匹配、类型错误等边界情况
- 指标选择:根据应用场景选择合适的评估指标
- 可视化:利用PromptFlow提供的工具直观展示评估结果
通过合理设计评估流程,开发者可以系统性地监控和优化LLM应用的性能,确保模型在实际应用中的表现符合预期。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考