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

使用提示流和 Azure DevOps 的 GenAIOps

生成人工智能运营,或 GenAIOps(有时称为 LLMOps)已成为高效提示工程和 LLM 注入的应用程序开发和部署的基石。 随着对注入 LLM 的应用程序的需求继续飙升,组织们发现自己需要一个连贯、简化的过程来管理其端到端生命周期。

使用 Azure 机器学习,可以与 Azure DevOps 集成,通过提示流自动化注入 LLM 的应用程序开发生命周期。

Azure 机器学习提示流提供了一种简化且结构化的方法,用于开发 LLM 注入的应用程序。 其定义完善的过程和生命周期将指导你完成生成、测试、优化和部署流的过程,最终创建功能完备的 LLM 注入解决方案。

GenAIOps 提示流功能

带有提示流的 GenAIOps 是一种“GenAIOps 模板和指南”,可帮助你使用提示流生成注入 LLM 的应用。 它提供以下功能:

  • 集中式代码托管:此存储库支持基于提示流为多个流托管代码,为所有流提供单个存储库。 将此平台视为所有提示流代码所在的单个存储库。 它就像流的代码库一样,便于查找、访问和协作处理不同的项目。

  • 生命周期管理:每个流都有自己的生命周期,可以从本地试验顺利过渡到生产部署。 管道的屏幕截图。

  • 变体和超参数试验:使用多个变体和超参数进行试验,轻松评估流变体。 变体和超参数就像食谱中的成分。 通过此平台,可以试验流中多个节点的不同变体组合。

  • 多个部署目标:存储库支持将流部署到通过配置驱动的 Azure 应用服务、Kubernetes、Azure 托管计算,从而确保流可以根据需要进行缩放。 它还可生成注入了 Flow 计算会话的Docker 映像,以及用于部署到支持 Docker 的任何目标平台和操作系统的流。 终结点的屏幕截图。

  • A/B 部署:无缝实现 A/B 部署,使你可以毫不费力地比较不同的流版本。 与网站的传统 A/B 测试一样,此平台有助于 A/B 部署提示流。 这意味着可以在实际设置中毫不费力地比较不同版本的流,以确定哪种性能最佳。 部署的屏幕截图。

  • 多对多数据集/流关系:针对每个标准和评估流容纳多个数据集,确保流测试和评估中的多功能性。 该平台旨在为每个流容纳多个数据集。

  • 条件数据和模型注册:仅当模型注册表中发生更改时,平台才会为 Azure 机器学习数据资产中的数据集创建新版本,并且仅在模型注册表中存在更改时流

  • 综合报告:为每个变体配置生成详细报告,使你可以做出明智的决策。 为所有运行和试验提供详细的指标集合、试验和变体批量运行,在 csv 和 HTML 文件中启用数据驱动决策。 流变体报表的屏幕截图。指标报表的屏幕截图。

其他自定义功能:

  • 提供 BYOF(自带流)。 用于开发与注入 LLM 的应用程序相关的多个用例的完整平台

  • 提供基于配置的开发。 无需编写大量样板代码。

  • 在本地和云同时执行提示试验和评估

  • 提供 用于在本地评估提示的笔记本。 提供用于本地试验的函数库。

  • 部署后在管道内进行终结点测试,检查其可用性和就绪情况。

  • 提供可选的人工干预,用于在部署之前验证提示指标。

具有提示流的 GenAIOps 可为简单和复杂的 LLM 注入应用提供功能。 它可以完全根据应用程序的需求进行自定义。

GenAIOps 阶段

生命周期包括四个不同的阶段:

  • 初始化:明确定义业务目标,收集相关数据示例,建立基本提示结构,并制定增强其功能的流。

  • 试验:将流应用于示例数据,评估提示的性能,并根据需要优化流。 持续试验,直到对结果满意为止。

  • 评估与优化:使用更大的数据集运行流对流的性能进行基准测试,评估提示的有效性,并根据需要进行优化。 如果结果满足所需标准,则进入下一阶段。

  • 部署:优化流以提高效率和有效性,将其部署到包括 A/B 部署的生产环境中,监视其性能,收集用户反馈,并使用此信息进一步增强流。

通过遵循这种结构化方法,提示流使你能够自信地开发、严格测试、微调和部署流,从而创建可靠而复杂的 AI 应用程序。

GenAIOps 提示流模板使用代码优先方法将此结构化方法正式化,并帮助你使用提示流通过工具和与提示流相关的过程生成 LLM 注入的应用。 它提供一系列功能,包括集中式代码托管、生命周期管理、变体和超参数试验、A/B 部署、针对所有运行和试验的报表等。

本文的存储库可在使用提示流设置 GenAIOps 模版中获取

GenAIOps 进程流

GenAIOps 提示流进程的屏幕截图。

  1. 这是初始化阶段。 在这里,会开发流,准备并策划数据,并更新与 GenAIOps 相关的配置文件。
  2. 使用 Visual Studio Code 进行本地开发以及提示流扩展后,提出从功能分支提升到开发分支的完整请求。 这会导致执行生成验证管道。 它还会执行试验流。
  3. PR 被手动批准,代码合并到开发分支
  4. 将 PR 合并到开发分支后,会执行开发环境的 CI 管道。 它按顺序执行试验和评估流,并在 Azure 机器学习注册表中注册流,并执行管道中的其他步骤。
  5. CI 管道执行完成后,CD 触发器可确保执行 CD 管道,该管道将 Azure 机器学习注册表中的标准流部署为 Azure 机器学习联机终结点,并在部署的流上执行集成和冒烟测试。
  6. 从开发分支创建发布分支,或者提出从开发分支向发布分支的拉取请求。
  7. PR 被手动批准,代码合并到发布分支。 将 PR 合并到发布分支后,会执行生产环境的 CI 管道。 它按顺序执行试验和评估流,并在 Azure 机器学习注册表中注册流,并执行管道中的其他步骤。
  8. CI 管道执行完成后,CD 触发器可确保执行 CD 管道,该管道将 Azure 机器学习注册表中的标准流部署为 Azure 机器学习联机终结点,并在部署的流上执行集成和冒烟测试。

从这里开始,可以按照我们提供的端到端示例来了解具有提示流的 GenAIOps,从而帮助你使用提示流和 Azure DevOps 生成 LLM 注入的应用程序。 其主要目标是利用提示流和 GenAIOps 的功能,帮助开发此类应用程序。

提示

建议了解如何将 GenAIOps 与提示流集成。

重要

提示流目前为公共预览版。 此预览版没有附带服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 试用免费版或付费版 Azure 机器学习
  • Azure 机器学习工作区。
  • 在本地计算机上运行的 Git。
  • Azure DevOps 中的组织。 Azure DevOps 中的组织有助于协作、规划和跟踪工作和代码缺陷、问题以及设置持续集成和部署。
  • Azure DevOps 的 Terraform 扩展(如果使用 Azure DevOps 和 Terraform 来启动基础结构)

注意

需要 Git 2.27 或更高版本。 有关安装 Git 命令的详细信息,请参阅 https://git-scm.com/downloads 并选择操作系统

重要

本文中的 CLI 命令是使用 Bash 进行测试的。 如果使用其他 shell,则可能会遇到错误。

设置提示流

提示流使用连接资源连接到 Azure OpenAI、OpenAI 或 Azure AI 搜索等终结点,并使用计算会话来执行流。 应在提示流中执行流之前,创建这些资源。

设置提示流的连接

可以通过提示流门户 UI 或使用 REST API 创建连接。 请按照指南为提示流创建连接。

单击提供的链接,了解有关连接的详细信息。

注意

示例流使用“aoai”连接,应创建名为“aoai”的连接来执行它们。

设置 Azure 服务主体

Azure 服务主体是应用、服务和自动化工具用来访问 Azure 资源的安全标识。 它表示需要通过 Azure 进行身份验证并代表你访问资源的应用程序或服务。 请按照指南在 Azure 中创建服务主体。

此服务主体稍后用于配置 Azure DevOps 服务连接和 Azure DevOps,以进行身份验证,并连接到 Azure 服务。 在提示流中为两个 experiment and evaluation runs 执行的作业都属于此服务主体的标识。

提示

该设置为服务主体提供 owner 权限。

  • 这是因为 CD 管道自动提供对 Azure 机器学习工作区新预配的 Azure 机器学习终结点的访问权限,以便读取连接信息。
  • 它还会将其添加到 Azure 机器学习工作区关联的密钥保管库策略,其中包含 getlist 机密权限。

可以通过更改管道 YAML 代码并删除与权限相关的步骤,将所有者权限更改为 contributor 级别权限。

设置 Azure DevOps

应执行多个步骤来使用 Azure DevOps 设置 GenAIOps 过程。

创建 Azure DevOps 新项目

请按照指南使用 Azure DevOps UI 创建新的 Azure DevOps 项目。

在 Azure ML 和 Azure 之间设置身份验证

请按照指南使用先前创建的服务主体,并在 Azure DevOps 和 Azure 服务之间设置身份验证。

此步骤配置存储服务主体信息的新的 Azure DevOps 服务连接。 项目中的管道可以使用连接名称读取连接信息。 这有助于配置 Azure DevOps 管道步骤,以自动连接到 Azure。

创建 Azure DevOps 变量组

请按照指南创建新的变量组,并添加与 Azure DevOps 服务连接相关的变量。

服务主体名称作为环境变量自动提供给管道。

配置 Azure DevOps 存储库和管道

此存储库使用两个分支 - maindevelopment 进行管道代码升级和执行,而不是更改其中的代码。 请按照指南设置自己的本地和远程存储库,以使用此存储库中的代码。

这些步骤涉及从存储库克隆 maindevelopment branches,以及关联代码以引用新的 Azure DevOps 存储库。 除了代码迁移之外,还配置了 PR 和开发管道,以便根据 PR 创建和合并触发器自动执行它们。

还应将开发分支的分支策略配置为针对从功能分支在开发分支上提出的任何 PR 执行 PR 管道。 将 PR 合并到开发分支时,将执行“开发”管道。 “开发”管道由 CI 和 CD 阶段组成。

管道中实现的循环中还有人类。 执行 dev 管道中的 CI 阶段后,CD 阶段会在手动批准后执行。 审批应来自 Azure DevOps 管道生成执行 UI。 默认超时为 60 分钟,之后管道将被拒绝,CD 阶段不会执行。 手动批准执行将导致执行管道的 CD 步骤。 手动审批配置为将通知发送到“replace@youremail.com”。 应将其替换为适当的电子邮件 ID。

测试管道

请按照提到的指南来测试管道。

步骤如下:

  1. 从功能分支向开发分支提出 PR(拉取请求)。
  2. PR 管道应根据分支策略配置自动执行。
  3. 然后,PR 被合并到开发分支。
  4. 将执行关联的“开发”管道。 这将引出完整的 CI 和 CD 执行,从而进行预配或更新现有的 Azure 机器学习终结点。

测试输出应类似于此处所示的输出。

本地执行

要利用本地执行的功能,请执行以下安装步骤:

  1. 克隆存储库:首先从其 GitHub 存储库克隆模板的存储库。
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. 设置 env 文件:在顶层文件夹级别创建 .env 文件,并提供提到的项的信息。 根据需要添加任意数量的连接名称。 此存储库中的所有流示例都使用名为 aoai 的 AzureOpenAI 连接。 为 api_key 和 api_base 添加具有更新值的行 aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}。 如果在流中使用了具有不同名称的其他连接,则应相应地添加它们。 目前,支持由 AzureOpenAI 作为提供程序的流。

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. 准备本地 conda 或虚拟环境以安装依赖项。

python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv

  1. 根据此处的文档将你的流引入或写入模板。

  2. 编写类似于 local_execution 文件夹中提供的示例的 python 脚本。

后续步骤