工作流的基本构成要素
一张最基础的大模型应用工作流图
%%{ init: { 'theme': 'neutral' } }%%
graph LR
START[START] --> user_input[User Input]
user_input[User Input] --> if_condition{If}
if_condition{If} -->|input == #exit| END
if_condition{If} -->|else| assistant_reply[Assistant Reply]
assistant_reply[Assistant Reply] --> user_input
上图展示了AI大模型应用的一种最基础的工作流程:可根据条件停止的多轮对话。
工作流执行过程解析
将上面的工作流图转换成文字版的执行过程描述:
- 从
START
处开始工作流程 - 从
User Input环节
处获得用户输入内容 - 进入
If判断环节
- 如果用户输入为"#exit":
- 进入END结束工作流程
- 如果用户输入为其他:
- 从
Assistant Reply环节
处返回模型生成内容 - 回到
User Input环节
处继续获得用户输入内容
- 从
- 如果用户输入为"#exit":
工作流构成要素
观察上面的工作流程图和解析,我们可以总结构成工作流的关键要素:
-
工作块(Chunk)
决定当前工作环节需要进行的具体工作内容,如上图中的
User Input
和Assistant Reply
两个方块就是典型的工作块 -
连接关系(Connection)
:决定工作块之间的执行顺序和编排逻辑,通常用有方向指示的连接线表示,根据需要表达的执行顺序编排条件的不同,可进一步分为:
-
直接连接
做完前一个工作块的任务之后,即可直接开始后一个工作块的任务
-
条件连接
做完前一个工作块的任务之后,需要根据条件决定应该进入到哪一个后续工作块
-
列表分发连接
前一个工作块为列表,而后续执行的工作需要以列表中的每一个项作为输入来执行时,需要使用列表分发连接,这是一种更复杂的连接表达
-
-
数据传递方式(Communication)
在上面的工作流程描述中,还隐含了一个保障工作流能够被正确推进的关键的要素,即在工作流中流转的信息或数据,它们应该以什么样的数据传递方式进行流转?仔细想想,如果没有使用合适的数据传递方式进行信息传递,上图中的
If判断环节
和Assistant Reply环节
又应该如何知道在User Input环节
用户到底输入了什么?在工作流中,常见的信息传递方式包括:- 块间传递:即数据通过连接关系的设定,从前一个工作块直接传递给下一个工作块,或是进行如列表分发连接时,将列表拆解成单项进行传递
- 工作流全局传递:即指定的数据更新会直接让工作流内所有后续需要使用该数据的环节都获得新的数据值
- 跨工作流传递:在多个工作流协同(如在工作流中嵌套子工作流)时,有些时候需要为工作流之间的数据传递和共享提供支持,确保多个工作流能够共同维护同一份数据信息