在使用HuggingFists进行业务流程编写时,很可能会发现多个流程间拥有相同的流程片段。按照通常的思考,如果能将这些相同的片段封装为一个可复用的子流程,在各个主流程中引用使用,就可以避免每次重复编写该片段,省去不必要的重复工作量。对于逻辑复杂的流程片段,也避免了重复编写时,由于疏忽大意而引入的流程错误。这个子流程概念对于有编程经验的人来说,非常熟悉,这不就是程序语言中函数的概念吗?的确,HuggingFists中的子流程其功能含义的确与程序语言的函数一致。主流程、子流程的概念也是相对的,更统一的概念就是流程,任何一个流程都可以成为其它流程的子流程,或者引用一个其它流程成为一个主流程。下面我们就来介绍一下在HuggingFists中,如何定义及引用一个流程。
如何定义可引用流程
正如我们在上一节所说,在HuggingFists中,任何一个流程都可以被其它流程引用使用。主流程可以驱动被引用流程执行。但如果希望向被引用流程输入数据流或接收其输出流,则需要一些特殊的定义了。就如同使用函数时,需要声明函数的入参及返回值一样,我们也需要为流程进行相应的声明。
如上图,在进行流程定义时,我们可以看到流程定义面板的两侧有两类端口。一类是在定义面板左侧边缘,蓝色框内的输入端口,表示当前流程可以从该端口获得输入数据。一个流程允许接入多个数据流,当蓝色框内的端口存在连接后,会自动扩展一个没有建立连接的端口,方便流程定义多输入流;另一类是定义面板右侧边缘,绿色框内的输出端口,表示可以将流程的处理结果从该端口输出。父流程可以建立与该输出端口的连接接收输出数据。需要注意的是,在定义面板右侧边缘的上部还有一个端口,这个端口是流程的快速数据输出端口。方便流程定义时,迅速查看输出结果,方便流程的调试。与输入一样,流程也允许输出多个数据流。
下面我们看一个示例,如下:
这是一个实现列添加动作的“子流程”。其逻辑为对输入到该流程的数据流添加一个名为”column1”的String类型列,列的缺省值为”添加”。列添加完成后,将数据流输出。
如何引用流程
流程的引用与算子的应用非常相似。如上图,在流程定义界面左侧的蓝色框内的菜单按钮。点击该按钮,右侧的算子树会切换为流程树。可拖拽流程树中的任意一个流程到流程定义面板。使用方式与拖拽和使用算子没有任何差别。唯一需要注意的是,被引用的流程必须是已经发布过的流程,是被确认过逻辑没有问题的流程。当将流程从左侧树拖拽到右侧定义面板中时,会弹出如下窗口,要求使用者选中要引用的流程版本。
流程版本一旦选中,就不支持修改了。选中后,被引用的流程在面板中也被表达为一个与算子相似的图元。若被引用流程支持输入/输出,则该图元会有对应的输入输出端口。
下面我们接着上面做过的实现添加列的流程,做一个引用其完成列添加过程的流程。如下图:
该流程读取了一个csv文件,并将输出流传输给流程引用算子。流程引用算子中引用的流程会为输入的数据流缺省添加一个”column1”列,并将数据流输出(注:流程在上一章节中有介绍)。图中蓝色框部分为csv文件的结构,共13列。图中绿色的方框部分为被引用的流程的名字。流程引用算子总是以被引用的流程名字作为缺省的算子实例名。下面我们运行一下流程,看一下流程的运行结果。
我们可以看到,输出结果在csv的结果集后加了名为column1的一列,其值为”添加”,这与我们定义的“子流程”的逻辑相同。实验证明,主流程能够成功的调用子流程。
HuggingFists一款能够便捷使用LLM及HuggingFace模型的低代码数据流工具,部分功能可被视为低代码版的Langchain。社区版下载地址:
【Linux版】
微云:https://share.weiyun.com/mmmowpEX
Github:https://github.com/Datayoo/HuggingFists
百度网盘:https://pan.baidu.com/s/1zV_ScCtLgFQSYEb0wLmXIQ?pwd=2024
【windows版】
微云:https://share.weiyun.com/2eDVeN8Q
Github: https://github.com/Datayoo/HuggingFists4Win/tree/main
百度网盘:https://pan.baidu.com/s/1JXgd5bEfSX8RsDb0WTocdw?pwd=2024