你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用提示流和 Azure DevOps 的 GenAIOps
随着对注入 LLM 的应用程序的需求不断飙升,组织需要一个有凝聚力的简化过程来管理这些应用的端到端生命周期。 生成式人工智能运营 (GenAIOps)(有时称为 LLMOps)是高效提示工程和注入 LLM 的应用程序的开发和部署基石。
本文介绍了如何通过 Azure 机器学习与 Azure DevOps 集成,从而利用提示流自动完成注入 LLM 的应用程序开发生命周期。 提示流为开发注入 LLM 的应用程序提供了一种简化的结构化方法。 其明确定义的流程和生命周期将指导你完成生成、测试、优化和部署流的过程,最终创建功能完备的注入 LLM 解决方案。
GenAIOps 提示流功能
带有提示流的 GenAIOps 使用 GenAIOps 模板和指南来帮助使用提示流生成注入 LLM 的应用。 带有提示流的 GenAIOps 提供了一些功能,可用于注入 LLM 的简单或复杂应用,并且可以根据应用程序的需求进行自定义。
具有提示流平台的 GenAIOps 提供以下功能:
集中式代码托管。 存储库支持为多个提示流托管代码,为所有流提供单个存储库。 此存储库类似于流的库,便于查找、访问和协作处理不同的项目。
生命周期管理。 每个流都有自己的生命周期,提供从本地试验到生产部署的平稳过渡。
变体和超参数试验。 变体和超参数就像食谱中的成分。 通过该平台,可以在流中的多个节点上试验不同的变体组合。 可以试验多个变体和超参数,以便轻松评估流变体。
多个部署目标。 该平台会生成注入流和计算会话的 Docker 映像,以便部署到支持 Docker 的任何目标平台和操作系统。 可以将流部署到 Azure 应用服务、Kubernetes 和 Azure 托管计算,并将其配置为根据需要进行缩放。
A/B 部署。 具有提示流的 GenAIOps 可无缝实现 A/B 部署,使你可以轻松比较不同的流版本。 此平台以与传统网站 A/B 测试相同的方式帮助进行提示流的 A/B 部署。 可以在实际设置中轻松比较不同版本的流,以确定哪个版本性能最佳。
多对多数据集与流的关系。 具有提示流的 GenAIOps 可容纳每个标准和评估流的多个数据集,从而在流测试和评估中实现多功能性。
条件数据和模型注册。 仅当数据集发生更改时,平台才会在模型注册表中注册流以及 Azure 机器学习数据资产的新数据集版本。
综合报告。 具有提示流的 GenAIOps 会为每个变体配置生成详细报告,使你能够做出明智的决策。 该平台为所有运行和试验提供详细的指标集合、试验和变体批量运行,为 CSV 和 HTML 文件启用数据驱动的决策。
具有提示流的 GenAIOps 提供以下其他自定义功能:
- 自带流 (BYOF) 提供了一个完整的平台,用于开发与注入 LLM 的应用程序相关的多个用例。
- 基于配置的开发意味着无需编写大量样板代码。
- 提示试验和评估在本地和云端执行。
- 本地提示评估笔记本提供用于本地试验的函数库。
- 部署后,管道内的终结点测试会检查终结点可用性和就绪情况。
- 可选人工干预在部署前验证提示指标。
GenAIOps 阶段
GenAIOps 生命周期包括四个不同的阶段:
初始化。 明确定义业务目标、收集相关数据示例、建立基本提示结构,以及制定增强其功能的流。
试验。 将流应用于示例数据,评估提示的性能,并根据需要优化流。 持续试验,直到对结果满意为止。
评估和优化。 使用较大的数据集对流的性能进行基准测试,评估提示的有效性,并相应地进行优化。 如果结果满足所需标准,则进入下一阶段。
部署。 优化流以提高效率和有效性,将其部署到包括 A/B 部署的生产环境中,监视其性能,收集用户反馈,并使用此信息进一步增强流。
通过遵循这种结构化方法,提示流使你能够自信地开发、严格测试、微调和部署流,从而创建可靠而复杂的 AI 应用程序。
GenAIOps 提示流模板使用代码优先方法正式化此结构化方法,并帮助使用提示流工具和流程以及 GenAIOps 提示流功能构建注入 LLM 的应用。 此模板可在带有提示流模板的 GenAIOps 中获取。
GenAIOps 进程流
- 在初始化阶段,可以开发流、准备和策展数据,以及更新与 GenAIOps 相关的配置文件。
- 使用带有提示流扩展的 Visual Studio Code 进行本地开发后,可以从功能分支向开发分支提出拉取请求 (PR),从而执行生成验证管道和试验流。
- PR 已手动批准,代码已合并到开发分支。
- PR 合并到开发分支后,将执行开发环境的持续集成 (CI) 管道。 CI 管道按顺序执行试验和评估流,并在 Azure 机器学习注册表中注册流,并执行管道中的其他步骤。
- CI 管道执行完成后,持续部署 (CD) 触发器将执行 CD 管道,该管道将 Azure 机器学习注册表中的标准流部署为 Azure 机器学习联机终结点。 然后,管道对已部署的流运行集成和冒烟测试。
- 从开发分支创建发布分支,或者从开发分支向发布分支提出 PR。
- PR 被手动批准,代码合并到发布分支。 将 PR 合并到发布分支后,将执行生产环境的 CI 管道。 该管道按顺序执行试验和评估流,并在 Azure 机器学习注册表中注册流,并执行管道中的其他步骤。
- CI 管道执行完成后,CD 触发器将执行 CD 管道,该管道将 Azure 机器学习注册表中的标准流部署为 Azure 机器学习联机终结点。 然后,管道对已部署的流运行集成和冒烟测试。
创建 GenAIOps 提示流
本文的其余部分介绍了如何按照带有提示流模板存储库的 GenAIOps 中的端到端示例将 GenAIOps 与提示流结合使用,从而帮助使用提示流和 Azure DevOps 生成注入 LLM 的应用程序。 主要目标是使用提示流和 GenAIOps 的功能帮助开发这些应用程序。
先决条件
- 带有免费版或付费版 Azure 机器学习的 Azure 订阅。
- 一个 Azure 机器学习工作区。
- 在本地计算机上运行的 Git 2.27 版本或更高版本。
- 一个 Azure DevOps 组织,可在其中创建项目、Azure Repos 源代码管理存储库和 Azure Pipelines 管道。 Azure DevOps 组织有助于协作、规划和跟踪工作、代码和问题,还有助于设置 CI 和 CD。
- 了解如何将 GenAIOps 与提示流集成。
注意
如果使用 Azure DevOps 和 Terraform 来启动基础结构,则需要安装适用于 Azure DevOps 的 Terraform 扩展。
设置提示流连接
提示流使用连接资源连接到 Azure OpenAI、OpenAI 或 Azure AI 搜索终结点。 可以通过提示流门户 UI 或使用 REST API 创建连接。 有关详细信息,请参阅提示流中的连接。
若要创建连接,请按照设置提示流的连接中的说明进行操作。 示例流使用名为 aoai
的连接,因此请为连接指定该名称。
设置计算会话
提示流使用计算会话来执行流。 在执行提示流之前,创建并启动计算会话。
设置 Azure Repos 存储库
要在 Azure DevOps 组织中创建分叉存储库,请按照设置 GitHub 存储库中的说明进行操作。 此存储库使用两个分支 main
和 development
进行代码提升和管道执行。
要创建新的本地存储库,请按照克隆存储库中的说明进行操作。 此克隆可帮助从开发分支创建新的功能分支并合并更改。
设置 Azure 服务主体
Azure 服务主体是应用程序、服务和自动化工具用来访问 Azure 资源的安全标识。 应用程序或服务通过 Azure 进行身份验证,以代表你访问资源。
按照创建 Azure 服务主体中的说明创建服务主体。 可以使用此服务主体来配置 Azure DevOps Services 连接并允许 Azure DevOps Services,以进行身份验证并连接到 Azure 服务。 提示流试验和评估作业均在服务主体的标识下运行。
该设置向服务主体提供了所有者权限,因此 CD 管道可以自动为新预配的 Azure 机器学习终结点提供对 Azure 机器学习工作区的访问权限,以读取连接信息。 该管道还会将终结点添加到与具有 get
和 list
机密权限的 Azure 机器学习工作区关联的密钥保管库策略。 可以通过更改管道 YAML 代码来移除与权限相关的步骤,从而将所有者权限更改为参与者级别权限。
创建一个新的 Azure DevOps 项目
要在 Azure DevOps UI 中创建新项目,请按照创建新的 Azure DevOps 项目中的说明进行操作。
在 Azure ML 和 Azure 之间设置身份验证
此步骤配置用于存储服务主体信息的新 Azure DevOps 服务连接。 项目管道可以使用连接名称读取连接信息,以自动连接到Azure。 要使用创建的服务主体在 Azure DevOps 和 Azure 服务之间设置身份验证,请按照使用 Azure 和 Azure DevOps 设置身份验证中的说明进行操作。
创建 Azure DevOps 变量组
要创建新的变量组并添加与 Azure DevOps 服务连接相关的变量,请按照创建 Azure DevOps 变量组中的说明进行操作。 然后,服务主体名称作为环境变量自动提供给管道。
配置 Azure Repos 和 Azure Pipelines
示例存储库使用两个分支 main
和 development
进行代码提升和管道执行。 要设置自己的本地和远程存储库以使用示例存储库中的代码,请按照配置 Azure DevOps 本地和远程存储库中的说明进行操作。
从示例存储库克隆 main
和 development
分支,并关联代码以引用新的 Azure Repos 存储库。 PR 和开发管道都配置为根据 PR 创建和合并触发器自动执行。
development
分支的分支策略配置为对从功能分支在开发分支上提出的任何 PR 执行 PR 管道。 dev
管道在 PR 合并到开发分支时执行,包含 CI 和 CD 阶段。
还在管道内实现了“人机协作”。 在 dev
管道中执行 CI 阶段之后,在 Azure Pipelines 构建执行 UI 中提供手动批准后,将进入 CD 阶段。
等待批准的默认时间为 60 分钟,超过此时间后会拒绝管道,并且不会执行 CD 阶段。 手动批准执行后,将执行管道的 CD 步骤。
示例管道中的手动批准配置为向 replace@youremail.com
发送通知。 将占位符替换为适当的电子邮件地址。
测试管道
要测试管道,请按照测试管道中的说明进行操作。 完整过程涉及以下步骤:
- 从功能分支向开发分支提出 PR。
- 由于分支策略配置,PR 管道会自动执行。
- PR 合并到开发分支。
- 执行关联的
dev
管道,从而完全执行 CI 和 CD,以及预配或更新 Azure 机器学习终结点。
输出应类似于示例提示运行、评估和部署应用场景中的示例。
使用本地执行
要使用本地执行功能,请执行以下步骤。
克隆存储库,如下所示:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
在顶级文件夹级别创建 .env 文件。 为每个连接添加行,更新占位符的值。 示例存储库中的示例使用名为
aoai
的 AzureOpenAI 连接和 API 版本2024-02-01
。aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"} <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
准备本地 conda 或虚拟环境以安装依赖项。
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
根据如何加入新流中的说明,将流引入或写入模板中。
在 local_execution 文件夹中编写与所提供示例类似的 Python 脚本。