虽然LLMs的工作原理对许多开发者来说可能难以捉摸,但LLM应用程序的工作原理并非如此——它们本质上涉及一系列对外部服务(如LLMs/数据库/搜索引擎)的调用,或中间数据处理,所有这些都被粘合在一起。
流程#
弹性流#
你可以使用Python函数或类作为入口点来创建LLM应用程序,这些函数或类封装了你的应用程序逻辑。你可以直接以纯代码体验测试或运行这些应用程序。或者,你可以定义一个flow.flex.yaml
,指向这些入口点,这样就可以通过Promptflow VS Code扩展进行测试、运行或查看跟踪。
我们的示例也应该让你了解如何编写flex flows
。
DAG流程#
因此,LLM 应用程序可以定义为函数调用的有向无环图(DAG)。这些 DAG 是提示流中的流程。
在提示流中的DAG flow
是一个由函数(我们称之为tools)组成的有向无环图。这些函数/工具通过输入/输出依赖关系连接,并根据提示流执行器的拓扑结构执行。
一个流程被表示为一个YAML文件,并且可以通过我们的Prompt flow for VS Code extension进行可视化。以下是一个示例flow.dag.yaml
:
请参考我们的示例来学习如何编写DAG flow
。
何时使用Flex或DAG流程#
Dag flow
提供了一种用户界面友好的方式来开发您的LLM应用程序,具有以下优势:
低代码: 用户可以在用户界面中通过拖放来创建一个LLM应用。
DAG可视化: 用户可以通过DAG视图轻松理解应用程序的逻辑结构。
Flex flow
提供了一种代码友好的方式来开发您的LLM应用程序,具有以下优势:
快速开始: 用户可以通过简单的提示快速测试,然后使用带有追踪可视化界面的python代码进行自定义。
更高级的编排: 用户可以使用Python内置的控制操作符(if-else, foreach)或其他第三方/开源库编写复杂的流程。
从其他平台轻松接入: 用户可能已经接入了像
langchain
和sematic kernel
这样的平台,并且已经有现成的代码。用户只需进行少量代码修改即可轻松接入 promptflow。
流程类型#
提示流示例按三个类别组织流:
标准流程 或 聊天流程:这两种流程用于开发您的LLM应用程序。两者之间的主要区别在于“聊天流程”为聊天应用程序提供了额外的支持。例如,您可以为您的流程定义
chat_history
、chat_input
和chat_output
。在流程开发过程中,提示流将提供类似聊天的体验(包括对话历史)。此外,它还提供了一个示例聊天应用程序用于部署。评估流程用于测试/评估您的LLM应用程序(标准/聊天流程)的质量。它通常在标准/聊天流程的输出上运行,并计算一些可用于确定标准/聊天流程是否表现良好的指标。例如,答案是否准确?答案是否基于事实?
Flex流 examples:
basic: 一个基本的标准流程定义,使用函数入口调用Azure OpenAI,连接信息存储在环境变量中。
chat-basic: 使用类入口定义的基本聊天流程。它演示了如何创建一个可以记住先前交互并使用对话历史生成下一条消息的聊天机器人。
eval-code-quality: 一个使用函数入口定义的示例流程,展示了如何评估代码片段的质量。
DAG流程 examples:
basic: 使用自定义Python工具的基本标准流程,该工具调用Azure OpenAI,连接信息存储在环境变量中。
chat-basic: 这个示例展示了如何创建一个基本的聊天流程。它演示了如何创建一个能够记住先前交互并使用对话历史生成下一条消息的聊天机器人。