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

将提示流与基于 LLM 的应用程序 DevOps 集成

本文介绍如何在 Azure 机器学习中将提示流与基于 LLM 的应用程序 DevOps 集成。 提示流为开发人员提供了友好且易于使用的代码优先体验,用于流开发和迭代整个基于 LLM 的应用程序开发工作流。

它提供提示流 SDK 和 CLIVS 代码扩展以及流文件夹资源管理器的新 UI,以辅助流本地开发、流运行和评估运行本地触发,以及从本地到云(Azure 机器学习工作区)环境的流转换。

本文档重点介绍如何有效结合提示流代码体验和 DevOps 的功能,以增强基于 LLM 的应用程序开发工作流。

显示下列流的示意图:创建流、开发和测试流、代码存储库中的版本控制、向云提交运行、推出和迭代。

在提示流中引入代码优先体验

使用 LLM 开发应用程序时,通常有一个标准化的应用程序工程过程,其中包括代码存储库和 CI/CD 管道。 此集成支持在团队成员之间简化开发过程、版本控制和协作。

对于在代码开发方面有经验的开发人员,如果寻求更高效的 GenAIOps(有时称为 LLMOps)迭代流程,可以从提示流代码体验中获得以下关键功能和优势:

  • 代码存储库中的流版本控制。 可以使用 YAML 格式定义流,该流可与文件夹结构中引用的源文件保持一致。
  • 将流运行与 CI/CD 管道集成。 可以使用提示流 CLI 或 SDK 触发流运行,该流运行可以无缝集成到 CI/CD 管道和交付过程。
  • 从本地到云的顺利转换。 可以轻松地将流文件夹导出到本地或代码存储库,以便进行版本控制、本地开发和共享。 同样,可以轻松地将流文件夹导入回云,以便在云资源中进一步创作、测试、部署。

访问提示流代码定义

每个提示流都与流文件夹结构相关联,其中包含用于在代码文件夹结构中定义流的基本文件。 此文件夹结构组织流,促进更顺畅的转换。

Azure 机器学习为所有工作区用户提供共享文件系统。 创建流后,相应的流文件夹会自动生成并存储在 Users/<username>/promptflow 目录中。

创建标准流的屏幕截图,显示了创建新流的过程。

流文件夹结构

流文件夹结构及其包含的关键文件的概述:

  • flow.dag.yaml:此主流定义文件采用 YAML 格式,包括有关流中使用的输入、输出、节点、工具和变体的信息。 它是创作和定义提示流不可或缺的一部分。
  • 源代码文件(.py、.jinja2):流文件夹还包括由流中的工具/节点引用的用户管理的源代码文件
    • Python 工具可以引用 Python (.py) 格式的文件,用于定义自定义 Python 逻辑。
    • 提示工具或 LLM 工具可以引用 Jinja 2 (.jinja2) 格式的文件来定义提示上下文。
  • 非源文件:流文件夹可能还包含非源文件,例如可包含在源文件中的实用工具文件和数据文件。

创建流后,可以导航到“流创作”页,在正确的文件资源管理器中查看和操作流文件。 这样就可以查看、编辑和管理文件。 对这些文件所做的任何修改都将直接反映在文件共享存储中。

标准流的屏幕截图,突出显示了文件资源管理器。

打开“原始文件模式”后,可以在文件编辑器中查看和编辑文件的原始内容,包括流定义文件 flow.dag.yaml 和源文件。

标准流中原始文件模式的屏幕截图。

标准流中的流源文件的屏幕截图。

或者,可以直接在 Azure 机器学习笔记本中访问所有流文件夹。

Azure 机器学习笔记本的屏幕截图,显示了提示流文件夹的文件。

在代码存储库中版本控制提示流

若要将流签入代码存储库,可以轻松地将流文件夹从流创作页导出到本地系统。 这会将包含所有文件的包从资源管理器下载到本地计算机,然后你可以将其签入到代码存储库中。

文件资源管理器中“下载”按钮的屏幕截图。

有关 DevOps 与 Azure 机器学习集成的详细信息,请参阅 Azure 机器学习中的 Git 集成

从本地存储库将运行提交到云

先决条件

安装提示流 SDK

pip install -r ../../examples/requirements.txt

连接到 Azure 机器学习工作区

az login

准备 run.yml 以在云中定义此流运行的配置。

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl

column_mapping:
  url: ${data.url}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 

# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

可以为流中的每个工具指定连接和部署名称。 如果未指定连接和部署名称,它将使用 flow.dag.yaml 文件上的连接和部署。 连接格式:

...
connections:
  <node_name>:
    connection: <connection_name>
      deployment_name: <deployment_name>
...

pfazure run create --file run.yml

准备 run_evaluation.yml 以在云中定义此评估流运行的配置。

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl
run: <id of web-classification flow run>
column_mapping:
  groundtruth: ${data.answer}
  prediction: ${run.outputs.category}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 


# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

pfazure run create --file run_evaluation.yml

查看 Azure 机器学习工作区中的运行结果

将流运行提交到云将返回运行的门户 URL。 可以在门户中打开 URI 以查看运行结果。

还可以使用以下命令查看运行结果。

流式传输日志

pfazure run stream --name <run_name>

查看运行输出

pfazure run show-details --name <run_name>

查看评估运行的指标

pfazure run show-metrics --name <evaluation_run_name>

重要

有关详细信息,请参阅 适用于 Azure 的提示流 CLI 文档

通过微调进行迭代开发

本地开发和测试

在迭代开发期间优化和微调流或提示时,可能在代码存储库中本地执行多次迭代是有益的。 提供了社区版本、提示流 VS Code 扩展提示流本地 SDK 和 CLI,以便无需 Azure 绑定即可进行纯本地开发和测试。

提示流 VS Code 扩展

安装提示流 VS Code 扩展后,你可以轻松地在本地通过 VS Code 编辑器来创作流,提供与云中类似的 UI 体验。

若要使用扩展,请执行以下操作:

  1. 在 VS Code Desktop 中打开提示流文件夹。
  2. 在笔记本视图中打开 ```flow.dag.yaml`` 文件。
  3. 使用可视化编辑器对流进行任何必要的更改,例如在变体中优化提示或添加更多工具。
  4. 若要测试流,请选择可视化编辑器顶部的“运行流”按钮。 这会触发流测试。

显示在可视化编辑器中运行流的 VS Code 的屏幕截图。

提示流本地 SDK 和 CLI

如果想要使用 Jupyter、PyCharm、Visual Studio 或其他 IDE,可以直接修改 flow.dag.yaml 文件中的 YAML 定义。

VS Code 中 yaml 文件的屏幕截图,突出显示了默认输入和流目录。

然后可以使用提示流 CLI 或 SDK 触发单个流运行进行测试。

假设你在工作目录 <path-to-the-sample-repo>/examples/flows/standard/

pf flow test --flow web-classification  # "web-classification" is the directory name

PowerShell 中流测试输出的屏幕截图。

这样就可以快速进行更改和测试更改,而无需每次更新主代码存储库。 对本地测试的结果感到满意后,即可转到从本地存储库将运行提交到云以在云中执行试验运行。

有关使用本地版本的详细信息和指南,请参阅提示流 GitHub 社区

返回到工作室 UI 进行持续开发

或者,可以选择返回到工作室 UI,使用云资源和体验在流创作页中更改流。

若要继续开发和处理流文件的最新版本,可以访问笔记本中的终端,并从存储库拉取流文件的最新更改。

此外,如果希望继续在工作室 UI 中工作,可以直接将本地流文件夹导入为新的草稿流。 这样,就可以在本地和云开发之间无缝转换。

创建新的流面板的屏幕截图,突出显示了“上传到本地”。

CI/CD 集成

CI:在 CI 管道中触发流运行

成功开发和测试流并将其作为初始版本签入后,即可进行下一次优化和测试迭代。 在此阶段,可以使用提示流 CLI 触发流运行,包括批量测试和评估运行。 这可以充当持续集成 (CI) 管道中的自动化工作流。

在流迭代的整个生命周期中,可以自动执行多个操作:

  • 在拉取请求后运行提示流
  • 运行提示流评估以确保质量高结果
  • 注册提示流模型
  • 部署提示流模型

有关执行 Web 分类流的端到端 MLOps 管道的综合指南,请参阅使用提示流和 GitHub 设置端到端 GenAIOpsGitHub 演示项目

CD:持续部署

转到生产的最后一步是在 Azure 机器学习中将流部署为联机终结点。 这样,就可以将流集成到应用程序中,并使其可供使用。

有关如何部署流的详细信息,请参阅使用 CLI 和 SDK 将流部署到 Azure 机器学习管理的联机终结点以进行实时推理

在生产环境中协作开发流

在使用提示流开发基于 LLM 的应用程序时,团队成员之间的协作通常至关重要。 团队成员可能会参与相同的流创作和测试,处理流的不同方面或同时进行迭代更改和增强。

这种协作需要一种高效且简化的方法来共享代码、跟踪修改、管理版本以及将这些更改集成到最终项目中。

引入提示流 SDK/CLIVisual Studio Code 扩展作为提示流代码体验的一部分,有助于在代码存储库中轻松协作处理流开发。 建议使用基于云的代码存储库(例如 GitHub 或 Azure DevOps)来跟踪更改、管理版本并将这些修改集成到最终项目中。

协作开发的最佳做法

  1. 在本地创作流并进行单个测试 - 代码存储库和 VSC 扩展

    • 此协作过程的第一步涉及使用代码存储库作为项目代码的基础,其中包括提示流代码。
      • 此集中存储库可以实现高效的组织、跟踪所有代码更改以及团队成员之间的协作。
    • 设置存储库后,团队成员可以利用 VSC 扩展对流进行本地创作和单个输入测试。
      • 这种标准化的集成开发环境可以促进从事流不同方面工作的多个成员之间的协作。 本地开发的屏幕截图。
  2. 基于云的试验性批处理测试和评估 - 提示流 CLI/SDK 和工作区门户 UI

    • 在本地开发和测试阶段之后,流开发人员可以使用 pfazure CLI 或 SDK 将批量运行和评估运行从本地流文件提交到云。
      • 此操作提供了一种使用云资源的方法,即使用 Azure 机器学习工作区中的门户 UI 持久存储和有效管理结果。 此步骤允许消耗云资源,包括计算和存储以及用于部署的其他终结点。 用于将运行提交到云的 pfazure 命令的屏幕截图。
    • 将提交内容发布到云端后,团队成员可以访问云门户 UI 以查看结果并有效管理试验。
      • 该云工作区提供了一个集中位置,用于收集和管理所有运行历史记录、日志、快照、综合结果(包括实例级输入和输出)。 云运行快照的屏幕截图。
      • 在记录开发期间所有运行历史的运行列表中,团队成员可以轻松比较不同运行的结果,有助于质量分析和必要的调整。 工作区中的运行列表的屏幕截图。工作区中的运行比较的屏幕截图。
  3. 本地迭代开发或用于生产的一步式 UI 部署

    • 试验分析完成后,团队成员可以返回代码存储库进行其他的开发和微调。 然后,可以迭代方式将后续运行提交到云端。
      • 这种迭代方法可确保持续增强,直到团队对可投入生产的质量感到满意为止。
    • 如果团队对流完全有信心,则可以通过 UI 向导将其无缝部署为 Azure 机器学习中的联机终结点。 如果团队对流的质量完全有信心,则可以通过 UI 部署向导将其作为强大云环境中的联机终结点无缝过渡到生产环境。
      • 联机终结点上的这一部署可以基于运行快照,从而实现稳定和安全的服务、进一步的资源分配和使用情况跟踪以及云中的日志监控。 从运行快照部署流的屏幕截图。部署向导的屏幕截图。

为何建议使用代码存储库进行协作开发

对于迭代开发,本地开发环境和版本控制系统(如 Git)的组合通常更有效。 可以在本地进行修改并测试代码,然后将更改提交到 Git。 这会创建更改的持续记录,并且能够在必要时还原到早期版本。

当需要跨不同环境共享流时,建议使用基于云的代码存储库(如 GitHub 或 Azure Repos)。 这使你能够从任何位置访问最新版本的代码,并提供协作和代码管理工具。

通过遵循这一最佳做法,团队可以为提示流开发创建无缝、高效且富有成效的协作环境。

后续步骤