文档大纲

手把手教你建扣子工作流 自动分割长消息 掌握循环节点

最近,搭建了一个调用个人知识库回答问题的智能体,在网页调用。

在使用中,发现一个问题:当答案比较长的时候,即便是流式输出,也会因为大段文字堆积在一起,非常影响阅读体验。

因此,就考虑通过修改子工作流,将输出修改为按语句分割,分段发送。这种结构更清晰,阅读体验更好,也不会给人过于机械的感觉。

下面,我就将具体步骤,希望能帮助有同样需求的朋友掌握子流程的能力。这个过程,也有助于你了解工作流的循环节点、文本处理节点和代码节点。

一、文本节点

在智能体中,插入工作流,再点击工作流,并进入工作流编辑界面。

进入工作流编辑界面,添加及设置好默认的大模型节点(本文略),再插入文本处理节点。

将文本处理节点的输入连接大模型节点的输出。

对文本处理节点进行设置,输入,选择大模型节点的输出,选择应用设置为"字符串分割",分割符选择"句号",这里的输出就成为文本串的数组。

在测试时,如果发现文本分割不理想,可以对大模型做补充设置,内容参考如下:

二、循环节点

添加循环节点。循环节点的输入连接文本节点的输出。

点击循环节点进行设置,循环类型选择"使用数组循环",循环数组的变量名,选择文本处理节点的输出。

在每次循环中,都会有文本数组中的一项数据,即一段文本进入循环体。

在循环体中,插入一个输出节点。这个输出节点可以实现将进入循环体的文本以消息形式发送出去。

输出节点的输入,选择循环的Input,也就是进入循环体的文本字符串。输出,用键盘敲"{",然后选择"{{output}}"。输出内容,选择流式输出。这样循环节点就设置好了。

三、结束节点

结束节点,一定要选择"返回变量"。选择返回文本,否则的话文本内容,在输出时,还会把所有文本内容再汇总发送一次。

记得清空输出变量中的变量。

在工作流中进行测试,会发现已经可以按计划的分段回复内容发送了。

四、智能体设置

回到智能体,进行测试,发现又有问题了,智能体的回复,居然还是大段的,并没有分段的效果。

这是因为,在智能体中,默认已经有了大模型,并且你也对大模型做过设置。虽然提供了你做了工作流,在实际使用中,它可能被跳过或忽略了。这就需要进一步对智能体做设置了。

你要在智能体的"人设与回复逻辑"部分,把技能部分加上刚才这段话,告诉智能体,收到问询后,直接调用工作流。输入工作流的名称时,还是用对话框输入"{",然后选择你的工作流。

OK,再做测试,正常了!

五、进阶:间隔定时发送消息

经过以上一系列的操作,输出的消息分段了,阅读体验好多了。

然而,这些消息会瞬间出现在读者面前,不自然。如果每一段文字都在上一段文字出现后,稍等一会儿出现,也就是所谓的流式发送,效果就更好了。

修改路径是这样的:

好了,回到工作流,开始进阶操作。

扣子本身无内置定时器或者等待节点,那就要通过代码节点(python/JS)实现等待的效果。

插入代码节点,注意,这个节点要放入循环体。

循环体内节点的连接方式按下图修改:

点击代码,开始进行设置:

注意,输入的变量名,设为"current_item",这个要在代码中调用,需要保持一致。变量名按如下设置。

打开代码的IDE,进行编辑。经历以下代码:

import time
def main(args):
    params = args.params
    # 获取循环变量(假设循环变量名为 current_item)
    current_item = params["current_item"]
   
    # 输出当前内容(通过代码节点返回值传递到输出节点)
    ret = {"output": current_item}
   
    # 等待 1ms
    time.sleep(0.2)  # 单位:秒,0.001秒 = 1ms
   
    return ret

代码中的等待时间,即time.sleep(0.2),这个0.2可以自己测试修改。我自己测试设置定时0.2秒比较自然。

输出的参数设置如下:

设置后,分别在工作流页面和智能体页面进行测试,均工作正常。

在网页测试:

工作流的修改完工了!

六、总结:

通过此方法,可以进一步掌握工作流、工作流中的循环节点、代码节点的设置。

要让工作流完全发挥效果,需要智能体的"人设与回复逻辑"中,进行对应设置。

阅读量: 532