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

Azure 机器学习提示流是一种开发人员友好且易于使用的代码优先方法,用于开发和迭代基于大型语言模型 (LLM) 的应用程序开发流。 提示流提供一个 SDK 和 CLI、一个 Visual Studio Code 扩展和一个流创作 UI。 这些工具有助于本地流开发、本地流运行和评估运行触发,以及在本地和云工作区环境之间转换流。

可将提示流体验和代码功能与开发人员操作 (DevOps) 相结合,以增强基于 LLM 的应用程序开发工作流。 本文重点介绍如何为 Azure 机器学习基于 LLM 的应用程序集成提示流与 DevOps。

下图显示了本地和基于云的提示流开发与 DevOps 的交互。

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

先决条件

在提示流中使用代码优先体验

开发基于 LLM 的应用程序通常遵循标准化的应用程序工程过程,其中包括源代码存储库和持续集成/持续部署 (CI/CD) 管道。 此过程促进了简化的开发、版本控制和团队成员之间的协作。

将 DevOps 与提示流代码体验集成,可为代码开发人员提供更高效的 GenAIOps 或 LLMOps 迭代过程,具有以下主要特性和优势:

  • 代码存储库中的流版本控制。 可采用 YAML 格式定义流文件,它们与同一文件夹结构中引用的源文件保持一致。

  • 流运行与 CI/CD 管道的集成。 通过使用提示流 CLI 或 SDK 自动触发流运行,可将提示流无缝集成到 CI/CD 管道和传递过程。

  • 本地和云之间的平滑转换。 可轻松地将流文件夹导出到本地或上游代码存储库,以便进行版本控制、本地开发和共享。 还可毫不费力地将流文件夹导入回 Azure 机器学习,以便使用云资源进一步创作、测试和部署。

访问提示流代码

每个提示流都有一个流文件夹结构,其中包含定义流的基本代码文件。 文件夹结构对流进行组织,促进本地和云之间更流畅的转换。

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

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

使用流代码文件

在 Azure 机器学习工作室中创建流后,可在流创作页的“文件”部分中查看、编辑和管理流文件。 对这些文件所做的任何修改都直接反映在文件共享存储中。

突出显示“文件”窗格的标准流创作页的屏幕截图。

基于 LLM 的流的流文件夹包含以下关键文件。

  • flow.dag.yaml 是 YAML 格式的主要流定义文件。 此文件对于创作和定义提示流不可或缺。 该文件包含有关流使用的输入、输出、节点、工具和变体的信息。

  • Python (.py) 或 Jinja 2 (.jinja2) 格式的用户管理的源代码文件配置流中的工具和节点。 Python 工具使用 Python 文件定义自定义 Python 逻辑。 提示工具和 LLM 工具使用 Jinja 2 文件定义提示上下文。

  • 实用工具和数据文件等非源文件可与源文件一起包含在流文件夹中。

若要在文件编辑器中查看和编辑 flow.dag.yaml 和源文件的原始代码,请启用“原始文件模式”

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

或者,可从 Azure 机器学习工作室“笔记本”页访问和编辑所有流文件夹和文件

Azure 机器学习中“笔记本”的屏幕截图,其中包含显示文件的提示流文件夹。

下载并签入提示流代码

若要将流签入代码存储库,请将流文件夹从 Azure 机器学习工作室导出到本地计算机。 选择流创作页“文件”部分中的下载图标,下载包含所有流文件的 ZIP 包。 然后,可将该文件签入代码存储库,或将其解压缩,以在本地使用文件。

显示“文件”资源管理器中的下载图标的屏幕截图。

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

在本地开发和测试

在迭代开发期间优化和微调流或提示时,可在代码存储库中本地执行多次迭代。 VS Code 社区版本、VS Code 提示流扩展以及提示流本地 SDK 和 CLI 可促进在不需要 Azure 绑定的情况下进行纯本地开发和测试。

通过在本地工作,可快速进行更改和测试更改,而无需每次都更新主代码存储库。 有关使用本地版本的更多详细信息和指南,请咨询提示流 GitHub 社区

使用 VS Code 提示流扩展

通过使用提示流 VS Code 扩展,可轻松地在 VS Code 编辑器中本地创作流,其 UI 体验与云中的体验类似。

使用提示流扩展在 VS Code 中本地编辑文件:

  1. 在启用了提示流扩展的 VS Code 中,打开一个提示流文件夹。

  2. 打开 flow.dag.yaml 文件,然后选择文件顶部的“可视化编辑器”链接

    VS Code 中流定义文件顶部的“可视化编辑器”链接的屏幕截图。

  3. 使用提示流可视化编辑器对流进行更改,例如优化变体中的提示或添加更多节点。

    VS Code 中可视化提示流编辑器的屏幕截图。

  4. 若要测试流,请选择可视化编辑器顶部的“运行”图标,或若要测试任何节点,请选择节点顶部“运行”图标

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

使用提示流 SDK 和 CLI

如果更喜欢直接在代码中工作,或使用 Jupyter、PyCharm、Visual Studio 或其他集成开发环境 (IDE),可直接修改 flow.dag.yaml 文件中的 YAML 代码

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

然后,可如下使用终端中的提示流 CLI 或 SDK 触发单个流运行进行测试。

若要从工作目录中触发运行,请运行以下代码:

pf flow test --flow <directory-name>

返回值是测试日志和输出。

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

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

对本地测试的结果感到满意后,可使用提示流 CLI 或 SDK 将运行从本地存储库提交到云。 以下过程和代码基于 GitHub 中的 Web 分类演示项目。 可克隆项目存储库或将提示流代码下载到本地计算机。

安装提示流 SDK

通过运行 pip install promptflow[azure] promptflow-tools 安装 Azure 提示流 SDK/CLI。

如果使用演示项目,请通过以下命令安装 requirements.txt 来获取 SDK 和其他必需的包:
pip install -r <path>/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-file>.jsonl

column_mapping:
  url: ${data.url}

# Define cloud compute resource

resources:
  instance_type: <compute-type>

# If using compute instance compute type, also specify instance name
#  compute: <compute-instance-name> 

# Specify connections

  <node-name>:
    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-file>.jsonl
run: <id-of-base-flow-run>
column_mapping:
  <input-name>: ${data.<column-from-test-dataset>}
  <input-name>: ${run.outputs.<column-from-run-output>}

resources:
  instance_type: <compute-type>
  compute: <compute_instance_name> 

connections:
  <node-name>:
    connection: <connection-name>
    deployment_name: <deployment-name>
  <node-name>:
    connection: <connection-name>
    deployment_name: <deployment-name>

创建评估运行。

pfazure run create --file run_evaluation.yml

查看运行结果

将流运行提交到云会返回运行的云 URL。 可打开 URL,在 Azure 机器学习工作室中查看运行结果。 还可运行以下 CLI 或 SDK 命令来查看运行结果。

流式传输日志

pfazure run stream --name <run-name>

查看运行输出

pfazure run show-details --name <run-name>

查看评估运行指标

pfazure run show-metrics --name <evaluation-run-name>

与 DevOps 集成

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

需要跨不同环境共享流时,可将它们推送到基于云的代码存储库,例如 GitHub 或 Azure Repos。 通过此策略,可从任何位置访问最新的代码版本,并提供用于协作和代码管理的工具。

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

在 CI 管道中触发流运行

成功开发和测试流,并将其作为初始版本签入后,即可进行优化和测试迭代。 在此阶段,通过使用提示流 CLI 自动执行 CI 管道中的步骤,可触发流运行,包括批测试和评估运行。

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

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

使用工作室 UI 进行持续开发

在流开发的任何时刻,均可返回到 Azure 机器学习工作室 UI,并使用云资源和体验对流进行更改。

若要继续开发和使用最新版本的流文件,可访问“笔记本”页上的终端,从存储库中拉取最近的流文件。 或者,可直接将本地流文件夹导入为新的草稿流,以在本地和云开发之间无缝转换。

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

将流部署为联机终结点

进入生产的最后一步是在 Azure 机器学习中将流部署为联机终结点。 通过此过程,可将流集成到应用程序中,并使其可供使用。 有关如何部署流的详细信息,请参阅将流部署到 Azure 机器学习托管联机终结点,以便进行实时推理

协作进行流开发

使用提示流开发基于 LLM 的应用程序时,团队成员之间的协作可能至关重要。 团队成员可能正在创作和测试同一个流、处理流的不同方面,或同时进行迭代更改和增强。 此协作需要一种高效且简化的方法来共享代码、跟踪修改、管理版本以及将更改集成到最终项目中。

提示流 SDK/CLI 和 VS Code 提示流扩展促进了在源代码存储库中轻松协作进行基于代码的流开发。 可使用基于云的源代码管理系统(如 GitHub 或 Azure Repos)来跟踪更改、管理版本并将这些修改集成到最终项目中。

遵循协作开发最佳做法

  1. 设置集中式代码存储库。

    该协作过程的第一步涉及将代码存储库设置为项目代码(包括提示流代码)的基础。 此集中式存储库可实现高效的组织、更改跟踪以及团队成员之间的协作。

  2. 使用提示流扩展在 VS Code 中对流进行本地创作和单一测试。

    设置存储库后,团队成员以将 VS Code 与提示流扩展配合使用,对流进行本地创作和单一输入测试。 该标准化的集成开发环境促进了从事流不同方面工作的多个成员之间的协作。

    本地开发的屏幕截图。

  3. 使用 pfazure CLI 或 SDK 将批运行和评估运行从本地流提交到云。

    在本地开发和测试后,团队成员可使用提示流 CLI/SDK 向云提交和评估批运行和评估运行。 通过此过程,可在工作室 UI 中启用云计算使用情况、持久性结果存储、对部署的终结点创建以及高效管理。

    用于将运行提交到云的 pfazure 命令的屏幕截图。

  4. 在 Azure 机器学习工作室工作区 UI 中查看和管理运行结果。

    将运行提交到云后,团队成员可访问工作室 UI,以查看结果并有效地管理试验。 该云工作区提供了一个集中位置,用于收集和管理运行历史记录、日志、快照、综合结果以及实例级输入和输出。

    云运行快照的屏幕截图。

  5. 使用记录所有运行历史记录的“运行”列表,轻松比较不同运行的结果,帮助进行质量分析和必要的调整

    工作区中的运行列表的屏幕截图。

  6. 继续使用本地迭代开发。

    分析试验的结果后,团队成员可返回到本地环境和代码存储库进行更多的开发和微调,并迭代地将后续运行提交到云。 这种迭代方法可确保持续增强,直到团队对用于生产的质量感到满意为止。

  7. 在工作室中使用向生产的一步式部署。

    在团队对流的质量完全有信心后,他们就可以在可靠的云环境中无缝地将其部署为联机终结点。 作为联机终结点的部署可基于运行快照,从而实现稳定且安全的服务、进一步的资源分配和使用情况跟踪以及云中的日志监视。

    从运行快照部署流的屏幕截图。

    Azure 机器学习工作室“部署”向导有助于轻松配置部署

    部署向导的屏幕截图。