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

开发提示流

重要

本文介绍的某些功能可能仅在预览版中提供。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

提示流是一种开发工具,旨在简化由大型语言模型 (LLM) 提供支持的 AI 应用程序的整个开发周期。 提示流提供一个综合性的解决方案,用于简化 AI 应用程序的原型设计、试验、迭代和部署过程。

通过提示流可以:

  • 使用 LLM、提示和 Python 工具通过可视化图形协调可执行流。
  • 轻松测试、调试和迭代流。
  • 创建提示变体并比较它们的性能。

本文介绍如何在 Azure AI Studio 中创建和开发第一个提示流。

先决条件

创建和开发提示流

若要创建流,可以克隆库中提供的示例或从头开始创建。 如果本地或文件共享中已有流文件,则还可以通过导入文件来创建流。

若要基于 Azure AI Studio 中的库创建提示流,请执行以下操作:

  1. 登录到 Azure AI Studio 并选择项目。

  2. 在可折叠左侧菜单中,选择“提示流”

  3. 选择“+ 新建”。

  4. 在“标准流”磁贴中,选择“创建”。

  5. 在“创建新流”页上,输入文件夹名称,然后选择“创建”。

    选择和创建标准流的屏幕截图。

  6. 此时会打开提示流创作页。 现在可以开始创作流。 默认情况下,你会看到示例流。 此示例流包含 LLM 和 Python 工具的节点。

    编辑提示流页上的流输入和输出的屏幕截图。

    注意

    图形视图仅用于可视化。 它显示你正在开发的流结构。 无法直接编辑图形视图,但可以放大、缩小和滚动。 可以在图形视图中选择一个节点,以突出显示并导航到工具编辑视图中的节点。

  7. (可选)可以向流添加更多工具。 可见的工具选项为“LLM”、“提示”和“Python”。 若要查看更多工具,请选择“+ 更多工具”。

    可在编辑提示流页上找到更多工具的屏幕截图。

  8. 在 LLM 工具编辑器中选择连接和部署。

    编辑提示流页上 LLM 工具中所选连接和部署的屏幕截图。

  9. 选择测试运行流。

    在编辑提示流页上选择运行位置的屏幕截图。

  10. 流运行状态显示为“正在运行”。

    编辑提示流页上处于运行状态的流的屏幕截图。

  11. 流运行完成后,选择“查看输出”以查看流结果。

    可从编辑提示流页中选择查看流结果的屏幕截图。

  12. 可以在“输出”部分查看流运行状态和输出。

    输出详细信息的屏幕截图。

创作流

每个流由一个文件夹表示,该文件夹包含“flow.dag.yaml”文件、源代码文件和系统文件夹。 你可以添加新文件、编辑现有文件以及删除文件。 还可以将文件导出到本地,或者从本地导入文件。

除了在平展视图中直接编辑节点外,还可以打开“原始文件模式”开关并选择文件名,以便在打开的文件选项卡中编辑文件。

流输入和输出

流输入是作为一个整体传递到流中的数据。 可以通过指定名称和类型来定义输入架构。 设置每个输入的输入值以测试流。 稍后可以使用 ${input.[input name]} 语法在流节点中引用流输入。

流输出是流作为一个整体生成的数据,用于汇总流的执行结果。 可以在流运行或批处理运行完成后查看和导出输出表。 可以通过使用语法 ${[node name].output}${[node name].output.[field name]} 引用流的单节点输出来定义流输出值。

通过引用节点输出,可以将节点链接在一起。 例如,可以在 Python 节点输入中引用 LLM 节点输出,以便 Python 节点可以使用 LLM 节点输出;在图形视图中可以看到这两个节点链接在一起。

启用流的条件控制

提示流不仅提供一种简化的方法来执行流,而且还为开发人员带来了一个强大的功能:条件控制,该功能可让用户为流中任何节点的执行设置条件。

在本质上,条件控制提供用于将流中每个节点与“激活配置”相关联的功能。此配置实质上是一个“when”语句,用于确定何时应执行某个节点。 当你的流较为复杂时(其中某些任务的执行取决于先前任务的结果),你就能认识到此功能的强大之处。 使用条件控制可将特定节点配置为仅在满足指定条件时才执行。

具体而言,可以通过在节点卡中选择“激活配置”按钮来设置节点的激活配置。 可以添加“when”语句并设置条件。 可以通过引用流输入或节点输出来设置条件。 例如,可以将条件 ${input.[input name]} 设置为特定值,或将 ${[node name].output} 设置为特定值。

如果不满足条件,则跳过该节点。 节点状态显示为“已绕过”。

测试流

可以通过两种方式测试流:

  • 运行单个节点
    • 若要运行单个节点,请对平展视图中的节点选择“运行”图标。 运行完成后,可以在节点输出部分快速检查结果
  • 运行整个流
    • 若要运行整个流,请选择右上角的“运行”按钮

查看测试结果和跟踪(预览版)

对于整个流运行,在执行流后,可以在运行横幅中看到运行状态。 然后,可以选择“查看跟踪”以查看用于检查结果和观察流执行情况的跟踪,在其中查看整个流和每个节点的输入和输出,以及用于调试的更多详细信息。 它在运行期间和运行完成后都可以使用。

了解跟踪视图

提示流的跟踪类型被指定为“流”。 在跟踪视图中,可以观察流编排工具的清晰顺序。

流根下的每个级别 2 跨度都表示流中的一个节点,以函数调用的形式执行,因此跨度类型标识为“函数”。 可以在跨度树中查看每个节点执行的持续时间。

在跨度树中,LLM 调用很容易识别为 LLM 跨度。 这些内容提供有关 LLM 调用持续时间和关联的令牌成本的信息。

通过选择跨度,可以在右侧查看详细信息。 这包括输入和输出、原始 Json 和异常,所有这些内容都可用于观察和调试。

 跟踪详细信息的屏幕截图。

注意

在提示流 SDK 中,系统定义了几种跨度类型,包括 LLM、函数、嵌入、检索和流。 系统会自动创建包含指定属性和事件中的执行信息的跨度。

若要了解有关跨度类型的详细信息,请参阅跟踪跨度

流运行完成后,若要检查结果,可以选择“查看测试结果”按钮来检查列表中的所有历史运行记录。 默认情况下,将显示在过去 7 天内创建的运行记录。 可以选择“筛选器”来更改条件。

流测试结果的屏幕截图。

还可以选择运行记录的“名称”,以查看跟踪视图中的详细信息

开发聊天流

聊天流专为对话式应用程序的开发而设计,它以标准流的功能为基础,为聊天输入/输出和聊天历史记录管理提供增强支持。 借助聊天流,可以轻松创建处理聊天输入和输出的聊天机器人。

在聊天流创作页中,聊天流标有“聊天”标签,以将其与标准流和评估流区分开来。 若要测试聊天流,请选择“聊天”按钮以触发聊天框进行对话。

聊天输入/输出和聊天历史记录

将聊天流与标准流区分开来的最重要元素是聊天输入、聊天历史记录和聊天输出

  • 聊天输入:聊天输入是指用户向聊天机器人提交的消息或查询。 有效处理聊天输入对于成功对话至关重要,因为它涉及理解用户意图、提取相关信息以及触发适当的回复。
  • 聊天历史记录:聊天历史记录是用户与聊天机器人之间所有交互记录,包括用户输入和 AI 生成的输出。 维护聊天历史记录对于跟踪对话上下文并确保 AI 能够生成上下文相关的回复至关重要。
  • 聊天输出:聊天输出是指 AI 生成的消息,这些消息将发送给用户以回复其输入。 生成符合上下文且具有吸引力的聊天输出对于获得积极的用户体验至关重要。

聊天流可以有多个输入,但“聊天历史记录”和“聊天输入”是聊天流中的必需输入

  • 在聊天流输入部分,可以将流输入标记为聊天输入。 然后,可以通过在聊天框中键入内容来填充聊天输入值。

  • 提示流可帮助用户管理聊天历史记录。 “输入”部分中的 chat_history 将保留下来,用于表示聊天历史记录。 聊天框中的所有交互(包括用户聊天输入、生成的聊天输出以及其他流输入和输出)会自动存储在聊天历史记录中。 用户无法在“输入”部分中手动设置 chat_history 的值。 它结构化为输入和输出列表:

    [
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    },
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    }
    ]
    

注意

在聊天框中执行测试时,创作页上会提供自动保存或管理聊天历史记录的功能。 对于批处理运行,用户必须在批处理运行数据集中包含聊天历史记录。 如果没有可用于测试的聊天历史记录,只需将 chat_history 设置为批处理运行数据集中的空列表 [] 即可。

使用聊天历史记录创作提示

将聊天历史记录并入提示对于创建具有上下文感知力和吸引力的聊天机器人回复至关重要。 在提示中,可以引用 chat_history 来检索过去的交互。 这样就可以参考以前的输入和输出来创建上下文相关的回复。

使用 Jinja 语言的 for-loop 语法可显示来自 chat_history 的输入和输出列表。

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

使用聊天框进行测试

聊天框通过模拟与聊天机器人的对话来提供一种交互式方法来测试聊天流。 若要使用聊天框测试聊天流,请执行以下步骤:

  1. 选择“聊天”按钮以打开聊天框。
  2. 在聊天框中键入你的测试输入,然后按 Enter 键将其发送给聊天机器人。
  3. 查看聊天机器人的回复,确保其符合上下文且准确。
  4. 查看跟踪,以便快速观察和调试。

后续步骤