{T}

变量、选择器、信息节点、文本处理节点:工作流辅助必备

在上一篇文章中,我们了解了 Coze 平台工作流中几个重要的节点。它们就像 Bot 的大脑,赋予 Bot 智能对话、知识检索、数据存储等核心能力。今天,我们要继续探索 Coze 工作流中的几个小帮手 —— 变量、选择器、消息、文本处理节点。虽然它们看起来只是辅助性的工具,但稍加利用,就能让你的 Bot 变得更灵活。

变量节点:存储和读取 Bot 状态的利器

我们先来说说变量节点。其实,变量就像一个小盒子,你可以把各种东西装到里面,比如数字、文字、是非题的答案等等。然后我们再用一个名字来称呼它,比如 user_name。以后提到这个名字,就等于提到盒子里的内容。

在 Coze 工作流里,这个盒子就是变量节点。它让你的 Bot 拥有了记性,可以在工作流中存储和改写用户预定义的各种信息,并在需要的时候读取出来。

变量节点的操作比较简单,以下是一些使用注意事项

  1. 首先要说明一下,工作流本身不能创建变量。工作流中的变量节点只是为当前工作流中的 Bot 服务的,这意味着这些变量节点只能查看或修改这个 Bot 所拥有的变量。 可能不太理解?我这里直接举个例子,假设你创建了一个变量节点,你直接点击一下其右上角的测试该节点按钮,你就会发现要想测试这个变量节点,你必须要选择一个 Bot,这就是说,这个变量节点是为这个 Bot 服务的:

  2. 在变量节点上,无论你是要读写所属 Bot 的某个变量的值,输入区域中的字段名必须与 Bot 中的变量名匹配,而且一个变量节点的输入区域是只能读或写一个所属 Bot 的变量值

  3. 变量节点的输出区域,是输出一个isSuccess的字段,这个字段的值是一个布尔值,表示变量节点的操作是否成功。如果成功,isSuccess的值为true,否则为false,在工作流的逻辑上,你可以基于这个字段的值来进行不同情况的后续操作。

至于 Bot 变量的具体用法,我们参考回文档第 9 篇文章内容就好了。

选择器节点:工作流中的分叉口

在 Coze 工作流中,经常会遇到根据不同条件走不同分支的情况。比如,当用户输入时,执行一个子流程;输入时,执行另一个子流程。这就需要使用选择器节点来实现分支控制的时候了。

选择器节点的原理很简单,它通过判断一个布尔条件的真假,来决定接下来执行哪个分支。如果条件为 true,就走True 分支;如果为 false,就走False 分支。就像一个岔路口,通过指示牌决定你的去向。

选择器的核心在于分支条件的设置,使用上游节点的一个到多个输出参数作为条件,我这里具体举些例子来理解一下条件分支的情况:

  1. 一条件双分支:大模型节点的输出参数 isStudenttrue,就可以直接将其连接到选择器的布尔条件,以此执行对应的后续处理流程:
  2. 多条件双分支:大模型节点的输出参数 isStudenttrueisAdulttrue,然后条件判断上,可以判断是否isStudentisAdult同时为true,还是说只有其中一个为true
  3. 多条件多分支:大模型节点的输出参数 isStudenttrueisAdulttrueisWorkertrue,然后条件判断上,可以判断是否isStudentisAdultisWorker中有一个为true,还是说只有其中两个为true,还是说这三个参数都为true

除了判断参数的值是否为true等静态值以外,你也可以与上游节点中的其他输出值进行比较。比如,你可以判断用户的输入是否包含你上游节点得出的某个关键词,或者判断用户的输入是否大于某个数值。这样,你就可以根据用户的输入,自动选择不同的分支,实现更加灵活的逻辑控制。

这里是一些使用选择器节点时的注意事项:

  1. 选择器节点里的一个分支,理论上是可以同时创建无限个条件的(起码我实验了下,创建了很多也没有被限制);
  2. 一个选择器节点理论上也是可以创建无限个分支的(也经过类似第一项的测试);
  3. 在绑定选择器节点的输入参数时,不同数据类型的输入参数给出的选择条件是有不同的,大致上的区别分为以下几类:
    1. 布尔类型(Boolean)
    2. 数字类型(Number、Integer)
    3. 字符串类型(String)
    4. 对象类型(Object)
    5. 数组类型(Array<String、Integer、Boolean、Number、Object>)
  4. 在使用选择器节点进行工作流设计的时候,一定要全面考虑到所有的分支情况(包括预料不到的否则条件),以免出现逻辑错误导致工作流运行失败。这里我举个最典型也是大家最容易犯错的例子,先看看下图,我们根据用户输入是否在国外地区来判定,分别搜索ChatGPTCoze是什么的一个工作流,然后获取对应结果集中摘取所需的检索结果简介: 这里的工作流其实就是设计有误的,我们就来试试,假设我们的开始输入参数的is_overseatrue: 为什么就报错了呢?其实原理不难,但是很难被发现,当这里的工作流选择了走is_overseatrue的分支时,那么is_overseafalse的分支就不会被执行,也就是说,我们的is_overseafalse的分支中的ChatGPTCoze的检索结果集是没有被获取的,所以在后续的结束节点中,结束节点的输入参数是不允许为null,即不允许不存在的,这就导致了工作流的运行失败,从图中报错的信息中我们也可以看到。 所以为了避免这种情况的发生,我们可以取巧在选择器节点所有的后续分支上,加多一个文本处理节点,无论条件走哪个分支,后续都会将搜索结果放到对应的文本处理节点中,文本处理节点是允许你的输入参数为null的,即使为null,它也会帮你转换为输出空值给到后续的结束节点,这样就可以避免工作流的运行失败了:

总结一下,当你的 Bot 需要根据不同条件采取不同的行动时,选择器节点就是你的不二之选。合理使用选择器,可以让你的工作流更加智能化,提供更加个性化的用户体验。

消息节点:向用户友好地反馈 Bot 进度

在 Coze 工作流中,消息节点(Message Node)是一种特殊的节点,它的主要作用是向用户在工作流执行的任何阶段发送消息,反馈 Bot 当前的执行进度或状态。与其他功能节点不同,消息节点不会对数据进行处理,而是专注于与用户的交互。

消息节点有以下几个特点:

  1. 支持流式输出非流式输出两种模式,避免用户在等待 Bot 回答时因为用时太长而影响用户体验:
    1. 流式输出:消息会以打字机的效果逐字显示,给人一种聊天机器人正在实时输入的感觉。这种模式适合较长的消息,可以营造出更自然、更有交互感的对话氛围;
    2. 非流式输出:消息会一次性完整显示,没有打字机效果。这种模式适合较短的消息,如确认提示、状态更新等,可以快速给出反馈,如果内容太长,可能会导致 Bot 在回复内容时因为等待时间过程导致调用失败,影响用户体验;
  2. 每个消息节点都可以绑定一个指定的消息卡片,在一个工作流多消息节点的情况下,消息的返回是按工作流顺序走的,以便在 Bot 回复消息中按需展示更丰富的内容;

消息节点当然也是支持变量引用的。通过在消息内容中使用{{var_name}}的语法,可以将工作流中的变量值动态插入到消息中。

举个例子,假设你的 Bot 是一个天气助手,用户可以查询指定城市的天气情况。你可以在消息节点中这样编写内容:

txt
{{city}}今天的天气是{{weather}},温度为{{temperature}}°C,{{tips}}

其中,$city$weather$temperature$tips都是在之前的节点中设置好的变量,分别表示城市名称、天气状况、温度、出行提示等。假设当用户查询北京的天气时,Bot 返回的消息可能是:

txt
北京今天的天气是晴,温度为25°C,适合外出游玩。

接下来我们来再演示一下,我们的消息节点究竟如何绑定消息卡片呢?我们先来创建一个示例工作流,如下图:

这里总共有三个消息节点,加上一个结束节点,我们先来看看调用这个工作流的效果是怎样的:

你看,你会发现在用户的一次提问中,Bot 会依次按顺序返回三个消息节点的内容,然后最后返回结束节点的内容(其实结束节点也算一种消息节点,只是能力会比普通消息节点要强,毕竟它能使用大模型能力去处理输入参数来优化最后的结果回复)这就是消息节点的流程控制,这样的设计可以让你的 Bot 在回复消息时更加有条理。

然后基于这个消息的顺序,我们就可以在对应工作流的配置功能上点击绑定消息卡片,然后你就会发现,这里居然可以每个消息节点都可以绑定一个消息卡片,这样你的消息节点就会变得更加丰富了,比如你可以在消息卡片中插入图片、链接等,让你的消息节点更加生动:

比如我之前做的一个旅游 Bot 的输出效果:

那可能大家就想,我又如何巧用消息节点提升交互体验的窍门呢?

消息节点看似简单,但稍加巧思,就能在提升用户体验方面发挥大作用。以下是一些实用的小技巧和注意事项:

  1. 在长时间的处理过程中,适时插入消息节点,告知用户当前的执行进度,避免用户等待太久而失去耐心。
  2. 对于可能出错的操作,先用消息节点询问用户是否确认,再执行后续节点,尊重用户的决定权。
  3. 在输出结果前,先用消息节点做一个简单的过渡,如稍等,马上就好正在为您搜索,请耐心等待等,让交互更自然。
  4. 配合变量引用,输出一些有趣的随机消息,如今天我看到第{{count}}位客人了,有点小激动呢{{userName}},久等啦!,增加 Bot 的亲和力。
  5. 消息节点只有在大模型节点后可开启流式响应
  6. 当使用了消息节点并开启了流式响应的工作流绑定了消息卡片后,内容回复是非流式的,等待所有回复内容加载后一次性回复所有内容。
  7. 当在一个工作流中配置了多个消息节点并开启了流式返回时,消息节点的执行遵循工作流的执行顺序,先执行的消息节点优先输出消息。

灵活运用消息节点,可以让你的 Bot 更懂得如何与人打交道,让用户在获取信息的同时,也能享受到更愉悦的交互体验。

文本处理节点:字符串操作的得力工具

在 Coze 工作流中,我们经常需要对文本数据进行一些预处理或转换,以满足下游节点的输入要求。文本处理节点就是专门用于执行字符串操作的工具节点。它提供了两种主要的处理方式:字符串拼接和字符串分割。

  • 字符串拼接:将多个字符串连接成一个完整的字符串。可以自定义拼接输入参数为数组时的分隔符,如空格、逗号、换行符等,以便可以遍历输出全部的数组元素出来。
  • 字符串分割:按照指定的一个到多个分隔符,将一个字符串切分成多个子串。分割后的结果可以输出为数组,方便后续节点使用。

通过组合使用字符串拼接和分割,可以完成各种复杂的文本转换任务。

字符串拼接:组合关键信息的利器

在实际应用中,我们往往需要将不同来源的信息组合在一起,形成一个完整的文本。比如,将用户输入的关键词与固定的模板拼接成一个搜索请求,或者将多个字段的值按照一定格式拼成一条日志记录。这就需要用到文本处理节点的字符串拼接功能。

以搜索请求的生成为例。假设用户输入的关键词存储在keyword变量中,搜索模板为在百度搜索{{keyword}}的相关信息。我们可以在文本处理节点中进行如下配置:

(这里假设我模拟用户搜索coze这个关键词)

那如果我们的关键词是多个的话,这时候我们就可以使用数组的形式来进行拼接,比如我们的关键词是cozechatgpt,我们可以在文本处理节点中进行如下配置:

(这里我是用了,作为数组元素之间的拼接符)

根据输出参数的不同数据类型,我们都可以通过文本处理节点的拼接功能将该结果传递给下游的网络搜索插件节点,就可以自动执行搜索并获取结果了。

字符串分割:为下游节点预处理文本

在某些场景下,上游节点返回的是一个结构化的字符串,包含了多个字段的信息。为了方便后续节点进行单独处理,我们需要先将这些字段拆分出来。这就用到了文本处理节点的字符串分割功能。

例如,假设某个上游功能返回的每行数据中,数据格式都为姓名,年龄,城市或者姓名;年龄;城市对应的值,如张三,25,北京李四;30;广东。我们希望将其拆分成三个独立的变量nameagecity,便于在后面的节点中使用。我们可以通过同时满足两种分隔符识别,;,从而在文本处理节点中进行如下配置:

分割后的结果就变成一个数组了,结果对应如下:

分隔符的示例和处理结果)

分隔符的示例和处理结果)

我们可以将不同情况数组中的元素分别赋值给下游节点的输入参数,后续节点就可以直接引用这些变量,而无需再从原始的字符串中提取信息了。

文本处理节点在实际项目中有广泛的应用,下面是一些具体的案例:

  1. 将多个关键词拼接成一个搜索字符串,提交给搜索引擎的插件。
  2. 将数据库查询结果中的多个字段拼接成一条完整的记录,输出给用户。
  3. 将用户输入的日期字符串按照年-月-日的格式进行分割,分别存储到年、月、日三个变量中。
  4. 将知识库中的文档按照段落分隔符进行切分,每个段落作为一个独立的知识点输入给大模型节点。
  5. 将 CSV 格式的数据按照逗号分隔,转换成二维表格,存储到数据库中。

文本处理节点虽然简单,但在数据的预处理和转换方面发挥着重要作用。熟练掌握它的用法,可以让你的工作流更加灵活,能够处理各种格式的文本数据。

总结

在本文中,我们深入探讨了 Coze 工作流中的几个重要辅助节点:变量节点选择器节点消息节点文本处理节点。虽然它们看似简单,但在实际应用中却能发挥出意想不到的作用。

变量节点就像是 Bot 的记忆,可以在工作流中存储和读取各种状态信息。我们要注意变量与所属 Bot 的对应关系,输入字段与变量名的匹配,以及变量操作结果的判断。

选择器节点是工作流的分叉口,根据布尔条件决定执行不同的分支。我们可以使用上游节点的一个或多个输出参数作为判断依据,支持多条件、多分支的复杂逻辑。在设计分支时要全面考虑各种情况,避免遗漏某些边界条件导致错误。

消息节点是 Bot 与用户对话的媒介,向用户反馈当前的执行进度或状态。它支持流式输出和非流式输出两种模式,可以绑定丰富的消息卡片。我们可以巧妙地在恰当的时机插入消息节点,让交互更自然流畅。

文本处理节点则是字符串操作的利器,提供字符串拼接和分割两大功能。通过它,我们可以灵活地组合和拆分各种文本信息,为下游节点预处理数据,简化后续的处理逻辑。

这些辅助节点虽不起眼,但在 Coze 工作流的设计中却不可或缺。熟练掌握它们的特性和用法,可以极大地提升你的工作流开发效率和质量,让 Bot 更加智能、灵活、亲和。希望这篇文章能够帮你更好地理解和应用这些节点,让你在之后设计工作流时更加游刃有余。

参考资料

  1. Coze 使用工作流