初始化和测试流#

通过本文档,客户可以初始化流并进行测试。

初始化流#

使用代码/提示和流的 yaml 定义创建流文件夹。

从头开始初始化流#

Promptflow 可以创建三种类型的流文件夹

  • standard(标准):流文件夹的基本结构。

  • chat(聊天):聊天流专为会话应用程序开发而设计,它以标准流的功能为基础,并为聊天输入/输出和聊天历史记录管理提供增强支持。

  • evaluation(评估):评估流是特殊类型的流,用于评估流的输出与特定标准和目标的匹配程度。

# Create a flow
pf flow init --flow <flow-name>

# Create a chat flow
pf flow init --flow <flow-name> --type chat

使用 VS Code 资源管理器窗格 > 目录图标 > 右键单击 > “在此目录中新建流”操作。按照弹出的对话框在目标文件夹中初始化您的流。img

或者,您可以在提示流窗格 > 快速访问部分使用“创建新流”操作来创建新流img

流文件夹的结构

  • flow.dag.yaml:具有输入/输出、节点、工具和用于创作目的的变体的流定义。

  • .promptflow/flow.tools.json:包含 flow.dag.yaml 中引用的工具元数据。

  • 源代码文件(.py, .jinja2):用户管理,由工具引用的代码脚本。

  • requirements.txt:此流的 Python 包依赖项。

init_flow_folder

从现有代码创建#

客户需要将工具脚本的路径传递给 entry,并且还需要将 promptflow 模板字典传递给 prompt-template,其中键是工具的输入名称,值是 promptflow 模板的路径。Promptflow CLI 可以使用工具脚本和提示模板从现有文件夹生成 prompt flow 所需的 yaml 定义。

# Create a flow in existing folder
pf flow init --flow <flow-name> --entry <tool-script-path> --function <tool-function-name> --prompt-template <prompt-param-name>=<prompt-tempate-path>

customer-intent-extraction 为例,它演示了如何将 langchain 代码转换为 prompt flow。

init_output

在这种情况下,promptflow CLI 生成 flow.dag.yaml.promptflow/flow.tools.jsonextract_intent_tool.py,它是一个流中的 python 工具。

init_files

测试流#

注意

测试流将不会创建批处理运行记录,因此无法使用 pf run show-details 等命令获取运行信息。如果要持久化运行记录,请参阅运行和评估流

Promptflow 还提供了测试已初始化流或流节点的方法。它将帮助您快速测试您的流。

VS Code 上用于提示流的视觉编辑器。#

打开流的 flow.dag.yaml 文件。在 yaml 编辑器的顶部,您可以找到“视觉编辑器”操作。使用它来打开具有 GUI 支持的视觉编辑器。

img

测试流#

客户可以使用 CLI 或 VS Code 扩展来测试流。

# Test flow
pf flow test --flow <flow-name>

# Test flow with specified variant
pf flow test --flow <flow-name> --variant '${<node-name>.<variant-name>}'

流测试的日志和结果将显示在终端中。

flow test

Promptflow CLI 将在 .promptflow 中生成测试日志和输出

  • flow.detail.json:流测试的详细信息,包括每个节点的结果。

  • flow.log:流测试的日志。

  • flow.output.json:流测试的结果。

flow_output_files

test 函数的返回值是流的输出。

from promptflow.client import PFClient

pf_client = PFClient()

# Test flow
inputs = {"<flow_input_name>": "<flow_input_value>"}  # The inputs of the flow.
flow_result = pf_client.test(flow="<flow_folder_path>", inputs=inputs)
print(f"Flow outputs: {flow_result}")

流测试的日志和结果将显示在终端中。

flow test

Promptflow CLI 将在 .promptflow 中生成测试日志和输出

  • flow.detail.json:流测试的详细信息,包括每个节点的结果。

  • flow.log:流测试的日志。

  • flow.output.json:流测试的结果。

flow_output_files

您可以在默认的 yaml 编辑器或视觉编辑器上使用该操作来触发流测试。请参见下面的快照:img img

测试流中的单个节点#

客户可以测试流中的单个 python 节点。它将使用客户提供的数据或节点的默认值作为输入。它将仅使用客户指定的节点与输入一起执行。

客户可以执行此命令来测试流。

# Test flow node
pf flow test --flow <flow-name> --node <node-name>

流节点测试的日志和结果将显示在终端中。节点测试的详细信息将生成到 .promptflow/flow-<node-name>.node.detail.json

客户可以执行此命令来测试流。test 函数的返回值是节点输出。

from promptflow.client import PFClient

pf_client = PFClient()

# Test not iun the flow
inputs = {<node_input_name>: <node_input_value>}  # The inputs of the node.
node_result = pf_client.test(flow=<flow_folder_path>, inputs=inputs, node=<node_name>)
print(f"Node outputs: {node_result}")

流节点测试的日志和结果将显示在终端中。节点测试的详细信息将生成到 .promptflow/flow-<node-name>.node.detail.json

提示流扩展在默认的 yaml 编辑器和视觉编辑器中都提供了内联操作来触发单节点运行。

img img

以交互模式测试#

Promptflow CLI 提供了一种为聊天流启动交互式聊天会话的方法。客户可以使用以下命令启动交互式聊天会话

# Chat in the flow
pf flow test --flow <flow-name> --interactive

执行此命令后,客户可以在终端中与聊天流进行交互。客户可以按 Enter 发送消息到聊天流。客户可以通过 ctrl+C 退出。Promptflow CLI 将通过颜色区分不同角色的输出,用户输入机器人输出流脚本输出节点输出

使用此聊天流来演示如何使用交互模式。

chat

如果流在流接口中包含聊天输入或聊天输出,则在触发流测试时会有选择。如果需要,可以选择交互模式。

img img

当聊天流中连接到流输出的LLM 节点时,Promptflow SDK 会流式传输 LLM 节点的结果。

流结果将按如下所示在终端中流式传输。

streaming_output

LLM 节点 test 函数的返回值是一个生成器,您可以通过这种方式使用结果

from promptflow.client import PFClient

pf_client = PFClient()

# Test flow
inputs = {"<flow_input_name>": "<flow_input_value>"}  # The inputs of the flow.
flow_result = pf_client.test(flow="<flow_folder_path>", inputs=inputs)
for item in flow_result["<LLM_node_output_name>"]:
    print(item)

调试流中的单个节点#

客户可以通过扩展在 VScode 中调试单个 python 节点。

流中 Python 步骤的断点和调试功能。只需设置断点并使用默认的 yaml 编辑器或视觉编辑器上的调试操作即可。img img

后续步骤#