运行和评估流#

初始化和测试流 中开发和测试流之后,本指南将帮助您学习如何使用更大的数据集运行流,然后评估您创建的流。

创建批量运行#

由于您已成功使用少量数据运行流,您可能希望测试它在大数据集中的表现,您可以运行批量测试并检查输出。

批量测试允许您使用大型数据集运行流并为每个数据行生成输出,运行结果将记录在本地数据库中,因此您可以随时使用 pf 命令 查看运行结果。(例如 pf run list

让我们使用流 web-classification 创建一个运行。这是一个演示 LLM 多分类的流。给定一个 URL,它将仅通过少量示例、简单的摘要和分类提示将 URL 分类到一个网页类别。

开始本指南,您需要

  • Git 克隆示例存储库(上述流链接)并将工作目录设置为 <path-to-the-sample-repo>/examples/flows/

  • 确保您已创建必要的连接。

使用流和数据创建运行,可以添加 --stream 以流式传输运行。

pf run create --flow standard/web-classification --data standard/web-classification/data.jsonl --column-mapping url='${data.url}' --stream

请注意,column-mapping 是从流输入名称到指定值的映射,更多详细信息请参见 使用列映射

您还可以通过在上述命令中指定 --name my_first_run 来命名运行,否则运行名称将以包含时间戳的特定模式生成。

q_0

有了运行名称,您可以使用以下命令轻松查看或可视化运行详细信息

pf run show-details -n my_first_run

q_0

pf run visualize -n my_first_run

q_0

更多详细信息可以通过 pf run --help 找到

from promptflow.client import PFClient

# Please protect the entry point by using `if __name__ == '__main__':`,
# otherwise it would cause unintended side effect when promptflow spawn worker processes.
# Ref: https://docs.pythonlang.cn/3/library/multiprocessing.html#the-spawn-and-forkserver-start-methods
if __name__ == "__main__":
  # PFClient can help manage your runs and connections.
  pf = PFClient()

  # Set flow path and run input data
  flow = "standard/web-classification" # set the flow directory
  data= "standard/web-classification/data.jsonl" # set the data file

  # create a run, stream it until it's finished
  base_run = pf.run(
      flow=flow,
      data=data,
      stream=True,
      # map the url field from the data to the url input of the flow
      column_mapping={"url": "${data.url}"},
  )

q_0

# get the inputs/outputs details of a finished run.
details = pf.get_details(base_run)
details.head(10)

q_0

# visualize the run in a web browser
pf.visualize(base_run)

q_0

请随意查看 Promptflow Python 库参考 以了解所有 SDK 公共接口。

使用 yaml 编辑器顶部的代码透镜操作触发批量运行 dag_yaml_flow_test

单击可视化编辑器顶部的批量测试按钮触发流测试。 visual_editor_flow_test

我们还有更详细的文档 管理运行,演示如何使用 CLI、SDK 和 VS Code 扩展管理已完成的运行。

评估您的流#

您可以使用评估方法评估您的流。评估方法也是使用 Python 或 LLM 等计算准确度、相关性分数等指标的流。请参阅 开发评估流 了解如何开发评估流。

在本指南中,我们使用 eval-classification-accuracy 流进行评估。这是一个演示如何评估分类系统性能的流。它涉及将每个预测与真实值进行比较,并分配 CorrectIncorrect 等级,并聚合结果以生成 accuracy 等指标,这反映了系统在分类数据方面的表现。

针对运行运行评估流#

评估已完成的流运行

运行完成后,您可以使用以下命令评估运行,与正常的运行创建命令相比,请注意有两个额外的参数

  • column-mapping:从流输入名称到指定数据值的映射。有关详细信息,请参阅 此处

  • run:要评估的流运行的运行名称。

更多详细信息可以在 使用列映射 中找到。

pf run create --flow evaluation/eval-classification-accuracy --data standard/web-classification/data.jsonl --column-mapping groundtruth='${data.answer}' prediction='${run.outputs.category}' --run my_first_run --stream

与之前的运行相同,您可以使用上述命令中的 --name my_first_eval_run 指定评估运行名称。

您还可以使用以下命令流式传输或查看运行详细信息

pf run stream -n my_first_eval_run  # same as "--stream" in command "run create"
pf run show-details -n my_first_eval_run
pf run show-metrics -n my_first_eval_run

由于现在您有两个不同的运行 my_first_runmy_first_eval_run,您可以使用以下命令同时可视化这两个运行。

pf run visualize -n "my_first_run,my_first_eval_run"

将打开一个网页浏览器以显示可视化结果。

q_0

评估已完成的流运行

运行完成后,您可以使用以下命令评估运行,与正常的运行创建命令相比,请注意有两个额外的参数

  • column-mapping:一个字典,表示评估方法所需输入数据源。数据源可以来自流运行输出或您的测试数据集。

    • 如果数据列在您的测试数据集中,则指定为 ${data.<column_name>}

    • 如果数据列来自您的流输出,则指定为 ${run.outputs.<output_name>}

  • run:要评估的流运行的运行名称或运行实例。

更多详细信息可以在 使用列映射 中找到。

from promptflow.client import PFClient

# PFClient can help manage your runs and connections.
pf = PFClient()

# set eval flow path
eval_flow = "evaluation/eval-classification-accuracy"
data= "standard/web-classification/data.jsonl"

# run the flow with existing run
eval_run = pf.run(
    flow=eval_flow,
    data=data,
    run=base_run,
    column_mapping={  # map the url field from the data to the url input of the flow
      "groundtruth": "${data.answer}",
      "prediction": "${run.outputs.category}",
    }
)

# stream the run until it's finished
pf.stream(eval_run)

# get the inputs/outputs details of a finished run.
details = pf.get_details(eval_run)
details.head(10)

# view the metrics of the eval run
metrics = pf.get_metrics(eval_run)
print(json.dumps(metrics, indent=4))

# visualize both the base run and the eval run
pf.visualize([base_run, eval_run])

将打开一个网页浏览器以显示可视化结果。

q_0

有触发本地批量运行的操作。要执行评估,您可以使用针对“现有运行”的操作。

img img

后续步骤#

了解更多关于