大模型_搭建工作流(成语接龙)
概述
这篇文章全面解析了如何在百炼平台上,构建一个可自动循环运行的“成语接龙”工作流。从设计思路到具体配置步骤,全部进行了详细拆解。核心内容涵盖三个方面:循环节点的功能定位、成语接龙工作流的完整运行逻辑,以及那些容易踩坑的关键配置要点。

简单来说,该工作流基于百炼官方文档的思路,设计并实现了一套支持循环执行的流程,能够自动加载数据、校验逻辑、串联上下游节点,确保整个过程稳定高效地持续运行。
先来了解循环节点
- 循环节点本质上就是工作流里专门用于处理重复任务的组件。
- 它接受引用类型的数组作为输入。如果同时传入多个数组,系统会以最短的那个数组长度为基准,每次循环只取对应位置的一项。
- 可以通过一个中间变量,在循环之间共享数据。配合“变量设置节点”,还能动态修改变量的值。
- 输出也是数组形式,数组的长度等于实际循环的次数。每次循环开始前,都会检查终止条件,条件满足则直接结束循环。
- 循环体本身是一个独立的子画布,里面自带固定的开始节点和结束节点,变量设置节点也只有在这个子画布里才能看到。
- 它还支持记录每次执行的日志和流式输出,这对排查问题、提升运行效率都很有帮助。
案例说明
来看一个具体的例子,整个工作流的执行步骤如下:
- 首先,用一个脚本节点构造了一个长度为20的数字数组(命名为
num ms),同时还输出一个叫variable的数值,这个变量用来存储当前的成语值。 - 然后,进入循环节点。该循环节点配置了以下几个关键参数:
- 输入数组:使用脚本节点构造的那个数组。
- 中间变量:指定
variable作为中间变量。 - 输出变量:最终输出的
output1是variable的值;循环体内大模型节点生成的结果,则作为output2输出。 - 终止条件:当中间变量满足某个特定条件时,循环就会停止。
- 接下来看循环体内部:流程会先展示一下输入的信息,然后调用大模型节点来生成下一个成语,再用一个脚本节点读取当前中间变量的值,最后通过“变量设置节点”更新中间变量的值。这样,一轮循环就完成了。
- 你可以在运行结束后,查看循环体内每个节点的输入输出信息,观察这些输入数据是怎么一步步变化的。
需要留意的一点:循环次数被限制在100次以内。如果实际业务中需要超过100次,可以联系客服申请加白处理。
配置过程
步骤一:设置开始和脚本转换节点
配置开始节点参数
这一步很简单,不需要添加任何参数,保持默认状态就好。
添加脚本转换节点
用脚本节点构造一个长度为20的数字数组(类型为 Array)。
节点命名:可以叫它“构造并输出初始结果”。
输入参数:这个节点没有外部输入参数。
输出参数:所有输出都写入一个叫result的变量对象中,具体包含以下字段:
nums:一个包含1到20连续数字的数组。variable:一个字符串,初始值设为"三心二意"。history:一个数组,里面只有一个元素"三心二意",用来记录已经用过的成语。Flag:一个布尔值,初始值为false,用作后续分支判断的标志位。
注意事项:
nums必须是长度为20的整数数组。variable和history需要同步初始化,这样才能让后续节点正确追踪当前值和历史记录。Flag默认为false,用来控制流程分支。- 如果你要修改输出结构,务必保持
result字段下的键名不变,否则下游节点会找不到数据。
脚本代码:
def main():
import json
ret = {
"result": {
"nums": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
"variable":"三心二意",
"history": ["三心二意"],
"Flag": False
},
}
return ret
步骤二:设置循环节点
在循环体中,需要配置大模型节点和变量设置节点(这是必选的)。你完全可以根据自己的需求,往循环体里添加其他节点。
配置循环节点参数
1. 循环数组:使用脚本节点构造的数组作为输入,类型为Array。循环体的输入必须是数组类型的数据,循环会按照数组的索引顺序逐个执行。
2. 中间变量:
- variable:类型为
Number,用来存储当前成语。 - history:一个数组,记录所有已经用过(接龙过)的成语。
- flag:一个布尔值,用来标识是否要结束循环。
3. 终止变量:当flag的值为True时,循环就会停止。
4. 输出变量:
- output1:输出每次循环后得到的新成语。
- out_his:输出所有成语的完整列表。
添加文本转换节点
这个节点的作用,是把循环节点运行时的各种信息,比如循环轮次、当前输入、中间变量1和中间变量2,全部整理成文本格式,方便后续传给大模型。
循环轮次:${Iterator_Dhlg.index}
循环节点当前轮次输入:${Script_Hfl9.result.nums}
中间变量1:${Iterator_Dhlg.variable}
中间变量2:${Iterator_Dhlg.history}
这样就相当于把循环节点的核心状态,以文本形式喂给了大模型。
主要大模型逻辑内容
这里用了一个qwen-max模型作为“成语接龙”游戏的核心逻辑引擎。给它输入的提示词(Prompt)是这样的:
“你需要做一个成语接龙的游戏,根据我提供的成语${Iterator_Dhlg.variable},进行接龙,结果只输出成语就行。但是用过的成语不能再使用。历史成语:${Iterator_Dhlg.history}。”
脚本输出 + 变量设置
大模型输出一个成语后,需要用脚本节点把它的输出值读取出来,再通过“变量设置节点”把这个新成语更新到中间变量里,为下一轮循环做准备。
判断大模型
另外,还需要一个专门用来做判断的大模型节点。它的任务是:根据当前生成的成语,判断它是否包含“天空”、“地貌”、“颜色”相关的字眼。如果包含,就输出True,否则输出False。一旦输出的成语触发了这个隐藏的终止条件,就把flag设置为True,循环会立即中断。
步骤三:设置结束节点
在测试的时候,可以在“运行结果”里观察到每次循环的中间过程,看到每一步的输出内容。
最终的结果很直观:当运行到成语“昧地瞒天”时,因为其中包含了“地”这个字,触发了结束条件,流程就会自动停止并输出结果。
