Coze智能体开发指南5:长文扩写自由 — Coze循环节点用法详解

扣子Agent技术解析

关注我~第一时间学习如何更好地使用AI。

重要的不是我们是否会被AI替代,

而是我们要比被替代的人更懂AI。

(本次更新又花了很多时间,主要是一直在纠结怎么用简单但准确的语言、示例来解释复杂的业务逻辑,希望觉得有帮助的朋友能留言、点赞、转发,给一点点正反馈哈哈哈)

大家好!上一期《《Agent | 工作流编排指南》介绍了Coze选择器节点的工作原理和配置方法。(Agent | 工作流编排指南4:萌新友好的Coze选择器节点原理及配置教程

如果您是头一次看这个系列的朋友,建议先看看:AI工作流编排手把手指南之三:Coze智能体的工作流

今天,我们学习的主题是循环节点

作为Coze的6种预设业务逻辑节点之一,循环节点具有非常广泛的使用场景,其中之一便是长文扩写:

picture.image

视频中,我输入的文章主题为“for循环的原理”,AI帮我设计了一个包括10个小标题内容的大纲,然后通过循环节点分别对它们进行扩写,最终组成输出了一篇字数达到8k字左右的文章。

picture.image

下面,我将从“循环”的概念开始,并基于上述长文扩写工作流的细节(在“使用数组循环”部分),向大家详细阐明Coze中循环节点的工作原理及配置要点。

“循环“概述

1.什么是“循环”?

正如选择器节点对应的是条件判断控制,循环节点在计算机程序语言中对应的就是以“for”、“while”为代表的循环控制。在研究各种不同类型的循环前,我们首先需要理解,什么是 循环

我们先来看一眼循环节点的结构,这个结构实际上对循环的要素进行了分离:

picture.image

事实上,在计算机编程、工作流编排中,循环的核心功能就是 “重复执行特定操作” 。而循环节点这一上一下两个部分,就是围绕这个核心功能来组织的。其中:

  • 循环 部分:确定以何种方式重复,重复多少次。
  • 循环体 部分:确定具体进行何种重复操作、对什么对象进行这个操作。

2.为什么需要“循环”

“循环”概念让我们得以将“可重复执行”的一系列指令抽象出来,从而简化我们工作流的表现形式,使其更清晰、简洁,从而更容易被正确地执行。

假设你需要让你的助手,将一个盒子中的小球,按照小球上的数字编号依次取出。在没有“循环”概念的情况下,你只能这么跟你的助手下指令:

找到编号为1的小球,取出来; 找到编号为2的小球,取出来; 找到编号为3的小球,取出来.....

这种指令描述的缺点显而易见,太臃肿了。假如盒子里有1000个小球,你就需要把“找到编号为x的小球,取出来”这段指令,重复1000遍。同时,你还会担心中间会不会写漏某个编号,导致小球无法按要求全部取出。

然而,只要我们学习了“循环”的概念,就可以轻松地简化这个指令描述。我们已经观察到,这个工作流,其实就是2个动作的重复:“找到编号为x的小球,取出来”,而重复的方式和次数,就是按照小球上的编号从小到大取,直到取完。

因此,这个工作流可以被描述为:重复 “找到当前盒子中数字编号最小的小球,将它取出”这两个动作,直到盒子中的小球取完。

其中, “找到当前盒子中数字编号最小的小球,将它取出”,就是循环体,“直到盒子中的小球取完”,就是循环方式。

如此一来,即使盒子里有1亿个小球,你都不会担心出任何差错。

综上,只要你的工作流中涉及需要重复执行特定指令的内容,都可以尝试用循环来处理。而你只需要关注,重复的每一次应该做什么,需要重复多少次。

3.Coze中的循环类型的含义

目前,Coze中的循环节点提供了三种循环类型,分别是:使用数组循环、指定循环次数、无限循环。

picture.image

三种循环的差异主要体现在重复方式上:

| 循环类型 | 重复方式 | 重复次数 | | 使用数组循环 | 根据指定数组中的元素个数进行重复 | 不确定,取决于数组元素个数 | | 指定次数循环 | 根据用户输入的次数进行重复 | 确定,取决于用户输入 | | 无限循环 | 在终止条件被满足前,一直重复 | 不确定,取决于终止条件的设定 |

下面,我将对上述内容逐一展开分析,并说明他们在Coze中的具体配置方法。

使用数组循环

1.什么是数组

在学习数组循环 的配置方法前,必须先理解什么是 “数组”

数组是一种内部元素按照一定的顺序存储和排列的数据结构。

想象一下超市里卖的盒装鸡蛋,装鸡蛋的盒子里面是有槽的,每个鸡蛋都被安放在槽里面。我们可以对照一盒鸡蛋来理解数组的相关概念。

  • 元素(item) :即数组中的单个数据,就是盒子里装的一个个鸡蛋。
  • 索引(index) :即数组中元素的位置,指的是盒子中装鸡蛋的槽的编号。这个编号是从0开始按顺序编写的,因此当一个盒子里装了5个鸡蛋的时候,它们所在的槽的编号应该是0、1、2、3、4。
  • 数组长度(length) :即数组中的元素的数量,也就是盒子里一共装了多少个鸡蛋。

2.循环数组的基本设置

正如前文所述,“循环”部分主要解决的,就是“重复多少次”的问题。

所谓的“使用数组循环”,其实就是以一个数组的长度为依据来确定需要重复的次数。换言之,数组中有多少个元素,循环体中的指令就会重复执行多少次。 (学过编程语言的同学应该秒懂这就是for循环)

当我们将循环类型选择为“使用数组循环”后,配置面板会出现“循环数组”的项目。这里需要引入的变量(默认名input),就是为这个循环确定重复次数的数组

picture.image

另外,这里变量值的类型被固定为了Array (即数组),你可以点击下拉箭头,进一步选择组成数组的元素的类型,以匹配你所引用的那个数组参数的实际情况。

picture.image

3.循环体内部工作流

如前所述,循环体解决两个问题,确定**“进行怎样的重复操作”、“对什么对象进行重复操作”** 。

所谓确定“进行怎样的重复操作”,就是在循环体内根据你的业务处理逻辑,添加节点,搭建一个需要被重复执行的小型工作流 (就像我们前面例子中取出小球的两个动作那样)。

往循环体内添加节点的方式有两种。首先,点击循环体框框左边的蓝色小点,往外一拉,就会出现节点配置界面,选择你需要的节点添加,节点会直接出现在循环体框中。其次,你也可以在框外添加节点,然后把它拖进框内。

picture.image

当你搭建好循环体内的小型工作流之后,注意前后点的链接闭合即可。

picture.image

4.循环相关变量配置

循环体解决的第二个问题, “对什么对象进行重复操作” ,决定了相关节点中的参数配置。

对于使用数组循环来说,它的使用场景往往是这样的:工作流的上游产生了一个由多个元素组成的数组类型的输出结果,然后我们需要对这个数组中的所有元素(所对应的数据)执行同样的操作

下面,我就用前面视频中的“长文扩写”工作流来详细讲解循环体中的变量配置。

(1)循环数组提供待处理元素

首先,需要说明循环节点的循环数组中的变量引用情况。

picture.image

可以看到,循环节点的上游节点“大纲生成”,会输出一个包含了文章主题大纲内容的数组对象(也就是循环数组中input 变量引用的内容),这个对象的结构大概会呈现这样的状态(具体取决于你在大纲生成节点中设置的prompt):

  
["主题1:第一个主题涉及的内容",  "主题2:第二个主题涉及的内容",  "主题3:第三个主题涉及的内容",  "主题4:第四个主题涉及的内容",  "主题5:第五个主题涉及的内容",  ]

现在,我们需要做的就是对这个数组中的每一个元素,即“主题X:第X个主题涉及的内容”,使用大模型节点重复执行“扩写”的动作。

(2)待处理元素的变量引用

我们再来看循环体中的第一个节点“段落扩写”,这个节点负责将前述的每一个主题元素,扩写成一段文字。其输入变量情况如下:

picture.image

可以看到,这个节点有三个输入变量(变量名是我们自己设置的便于理解用的,重要的是变量值的来源)。

第一个outline 来自“大纲生成节点”,它的作用是让“段落扩写”节点对整篇文章的架构有认知,以免每个主题扩写的内容之间毫无关联。(这里涉及到prompt设计问题,不是本篇重点就不详述)

后两个变量,都是来自“循环扩写”节点。

其中,current 指的是每次执行扩写动作时,所处理的主题内容,也就是我们这个循环重复操作的对象,循环数组中的每一个元素。

picture.image

从图中可以看出,我们在配置current 变量的变量值时,点击“循环扩写”节点,出现了一个没见过的值:item(in input)

其中,item ,意味着这个变量代表一个数组的元素,而input ,就是“扩写循环”中的循环数组对应的变量。换言之,item(in input) ,就是指这个变量是循环数组中的一个元素。

于是,将这个变量传入循环体,我们就能实现前述 ”对这个数组中的所有元素(所对应的数据)执行同样的操作“ 的目标。

(3)关于中间变量

“段落扩写”节点的第三个输入变量temp ,同样引用自“扩写循环”节点,它是一个“中间变量”。

picture.image

“中间变量”是一个非常有用的工具。

从长文扩写的工作流来看,每一次“段落扩写”节点执行完毕生成段落后,“段落总结”节点会对新生成的段落内容进行总结,然后“设置变量”节点会将总结内容存入中间变量temp 中,从而更新“扩写循环”中“中间变量”部分的temp 变量的值。

接着,当新一轮的扩写开始,temp (即上一轮扩写内容的总结),就会作为“段落扩写”的输入变量参与进来,以保证大模型在扩写的时候,除了知道文章的整体框架(信息来源于outline 变量),还能知道上一次扩写主要写了什么,这样扩写的内容就会与文章其他的部分内容有很好的延续性与契合,避免自说自话,过于跳脱。

picture.image

需要注意的是,在“扩写循环”中设置中间变量的变量值时,需要设定为两个双引号,即空值。因为在开始首次扩写前,并不会有“段落总结”。这个变量的值会随着每一次扩写、总结动作的执行而更新。

picture.image

5.循环节点的输出

最后我们再来看一眼整个循环节点的输出。

picture.image

根据我们的工作流目的,我们需要的是每次扩写的文章内容,所以我们需要点击“段落扩写”节点选择对应变量。这里可以看到output 后面有个“乘以n”标记,同时这个输出变量的类型被固定为Array<String>,这意味着循环节点最终会输出一个,由每一次执行循环体内的工作流所产生的对应内容的值组成的组合。

正如我前面视频中所示,大纲提供了10个主题(组成的数组),那么就会有10段扩写的内容。

picture.image

这样,后续就还需要设置一个“文本处理”节点来对这个数组内容进行拼接,使一条条的扩写内容,最终被组成一篇完整的文章。

picture.image

指定次数循环

指定次数循环的设置非常简单,就是在“循环次数”中输入以固定你希望循环体中的工作流需要重复的次数即可,目前,Coze支持设置1-1000次的设置。当然,这个值,也可以是对其节点的输出值的引用。(由于三种循环在循环体上的设置都大同小异,这里就不再重复了。)

picture.image

无限循环

无限循环是一种不达到特定的条件,便不会停止重复的循环。因此,它需要通过在循环体中加入一个“选择器”,一个“终止循环节点”来停止循环。

关于“选择器”节点的工作原理与配置方法,我们已经在上一篇文章中详尽介绍了。看过的同学应该非常容易理解下面这张官方文档中的示例图的含义,即每次循环体中选择器前面的节点执行完操作后,选择器会判断是否达到条件,如是,则触发“终止循环节点”,然后循环节点输出已有的操作结果;如否,则继续重复循环操作,直到条件满足。

picture.image

好了,以上就是本期的主要内容,下期计划将带大家学习批处理节点的玩法,敬请期待,祝大家玩得开心~!

—— END——

往期精华:

1.大模型动态

大模型动态:Qwen3系列模型正式发布 | 知识科普:模型参数、MoE、Dense

2.prompt设计

打工人看了流泪的Prompt设计原理,如何用老板思维让AI一次听懂需求?

不会Prompt还敢说自己会用DeepSeek?别怕!10分钟让你成为提示大神

3.模型能力拓展

(1)工作流编排

PPT自由!Coze工作流 X iSlide插件-小白也能看懂的节点参数配置原理详解

学过Coze,不妨玩玩Dify?萌新友好的本地部署图文指南

AI工作流编排手把手指南之三:Coze智能体的工作流

AI工作流编排手把手指南之二:Coze智能体的插件添加与调用

AI工作流编排手把手指南之一:Coze智能体的创建与基本设置

(2)MCP应用

【效率翻倍】Obsidian自动待办清单实现:MCP联动Prompt保姆级教程(萌新3分钟上手)

萌新靠MCP实现RPA、爬虫自由?playwright-mcp实操案例分享!

想玩玩极简版AI Agent?MCP就够了!手把手教你用Cherry Studio整活~

高德、彩云MCP全体验:让Cherry Studio化身私人小助理的喂饭版指南!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
边缘云打通大模型物理世界
《火山引擎边缘智能,打通大模型的物理世界》 张俊钦 | 火山引擎边缘智能资深研发工程师
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论