你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将提示流与基于 LLM 的应用程序 DevOps 集成
本文介绍如何在 Azure 机器学习中将提示流与基于 LLM 的应用程序 DevOps 集成。 提示流为开发人员提供了友好且易于使用的代码优先体验,用于流开发和迭代整个基于 LLM 的应用程序开发工作流。
它提供提示流 SDK 和 CLI、VS 代码扩展以及流文件夹资源管理器的新 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 机器学习笔记本中访问所有流文件夹。
在代码存储库中版本控制提示流
若要将流签入代码存储库,可以轻松地将流文件夹从流创作页导出到本地系统。 这会将包含所有文件的包从资源管理器下载到本地计算机,然后你可以将其签入到代码存储库中。
有关 DevOps 与 Azure 机器学习集成的详细信息,请参阅 Azure 机器学习中的 Git 集成
从本地存储库将运行提交到云
先决条件
如果还没有 Azure 机器学习工作区,请完成创建帮助入门的资源。
已安装 Azure 机器学习 Python SDK v2 的 Python 环境 - 安装说明。 此环境用于定义和控制 Azure 机器学习资源,独立于计算会话的环境。 如需了解详细信息,请参阅如何管理提示流工程的计算会话。
安装提示流 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 体验。
若要使用扩展,请执行以下操作:
- 在 VS Code Desktop 中打开提示流文件夹。
- 在笔记本视图中打开 ```flow.dag.yaml`` 文件。
- 使用可视化编辑器对流进行任何必要的更改,例如在变体中优化提示或添加更多工具。
- 若要测试流,请选择可视化编辑器顶部的“运行流”按钮。 这会触发流测试。
提示流本地 SDK 和 CLI
如果想要使用 Jupyter、PyCharm、Visual Studio 或其他 IDE,可以直接修改 flow.dag.yaml
文件中的 YAML 定义。
然后可以使用提示流 CLI 或 SDK 触发单个流运行进行测试。
假设你在工作目录 <path-to-the-sample-repo>/examples/flows/standard/
中
pf flow test --flow web-classification # "web-classification" is the directory name
这样就可以快速进行更改和测试更改,而无需每次更新主代码存储库。 对本地测试的结果感到满意后,即可转到从本地存储库将运行提交到云以在云中执行试验运行。
有关使用本地版本的详细信息和指南,请参阅提示流 GitHub 社区。
返回到工作室 UI 进行持续开发
或者,可以选择返回到工作室 UI,使用云资源和体验在流创作页中更改流。
若要继续开发和处理流文件的最新版本,可以访问笔记本中的终端,并从存储库拉取流文件的最新更改。
此外,如果希望继续在工作室 UI 中工作,可以直接将本地流文件夹导入为新的草稿流。 这样,就可以在本地和云开发之间无缝转换。
CI/CD 集成
CI:在 CI 管道中触发流运行
成功开发和测试流并将其作为初始版本签入后,即可进行下一次优化和测试迭代。 在此阶段,可以使用提示流 CLI 触发流运行,包括批量测试和评估运行。 这可以充当持续集成 (CI) 管道中的自动化工作流。
在流迭代的整个生命周期中,可以自动执行多个操作:
- 在拉取请求后运行提示流
- 运行提示流评估以确保质量高结果
- 注册提示流模型
- 部署提示流模型
有关执行 Web 分类流的端到端 MLOps 管道的综合指南,请参阅使用提示流和 GitHub 设置端到端 GenAIOps 和 GitHub 演示项目。
CD:持续部署
转到生产的最后一步是在 Azure 机器学习中将流部署为联机终结点。 这样,就可以将流集成到应用程序中,并使其可供使用。
有关如何部署流的详细信息,请参阅使用 CLI 和 SDK 将流部署到 Azure 机器学习管理的联机终结点以进行实时推理。
在生产环境中协作开发流
在使用提示流开发基于 LLM 的应用程序时,团队成员之间的协作通常至关重要。 团队成员可能会参与相同的流创作和测试,处理流的不同方面或同时进行迭代更改和增强。
这种协作需要一种高效且简化的方法来共享代码、跟踪修改、管理版本以及将这些更改集成到最终项目中。
引入提示流 SDK/CLI 和 Visual Studio Code 扩展作为提示流代码体验的一部分,有助于在代码存储库中轻松协作处理流开发。 建议使用基于云的代码存储库(例如 GitHub 或 Azure DevOps)来跟踪更改、管理版本并将这些修改集成到最终项目中。
协作开发的最佳做法
在本地创作流并进行单个测试 - 代码存储库和 VSC 扩展
基于云的试验性批处理测试和评估 - 提示流 CLI/SDK 和工作区门户 UI
本地迭代开发或用于生产的一步式 UI 部署
为何建议使用代码存储库进行协作开发
对于迭代开发,本地开发环境和版本控制系统(如 Git)的组合通常更有效。 可以在本地进行修改并测试代码,然后将更改提交到 Git。 这会创建更改的持续记录,并且能够在必要时还原到早期版本。
当需要跨不同环境共享流时,建议使用基于云的代码存储库(如 GitHub 或 Azure Repos)。 这使你能够从任何位置访问最新版本的代码,并提供协作和代码管理工具。
通过遵循这一最佳做法,团队可以为提示流开发创建无缝、高效且富有成效的协作环境。