循环
Loop 组件用于遍历一组输入数据:它会把列表中的每个元素依次发送到 Item 输出端口所连接的组件中,直到所有元素都处理完毕。 处理结束后,Loop 会把整个循环过程中聚合出的结果,通过 Done 端口传给下一个组件。
循环处理过程
你可以把 Loop 看成是在流程内部嵌了一条“小流程”。 整个过程如下:
-
将输入拆分成单个 item。 例如,CSV 文件会按行拆分。
更具体地说,Loop 会不断从
Data或DataFrame对象中按text键提取元素,直到没有更多元素可提取。 每个item输出都是一个Data对象。 -
通过 Item 输出端口逐个处理这些
item。该端口会连接到一个或多个负责处理单个 item 的组件。 在循环链路的最后一个组件上,需要把输出再接回 Loop 组件的 Looping 端口,以继续处理下一个 item。
Item 端口本身只连接一个起始组件,但在回到 Looping 之前,你可以在中间串接任意多个组件。
If-Else 组件 与 Loop 不兼容。 更多说明请参阅条件循环。
-
当所有 item 都处理完后,结果会被聚合成一个
Data对象,并从 Done 端口传给流程中的下一个组件。
下面这段简化的 Python 代码可以帮助你理解 Loop 的工作方式。 这不是组件的真实实现代码,只是一个便于理解的抽象说明:
_10for i in input: # 接收一个列表作为输入_10 process_item(i) # 通过 Item 端口连接的组件处理每个元素_10 if has_more_items():_10 continue # 回到 Looping 端口处理下一个元素_10 else:_10 break # 没有更多元素时退出循环_10_10done = aggregate_results() # 汇总所有返回结果_10_10print(done) # 从 Done 端口把聚合结果传给下一个组件
Loop 示例
下面的例子中,Loop 组件会遍历一个 CSV 文件,直到没有剩余行可处理。
这里,Item 端口先把每一行传给 Type Convert 组件,将这一行转换成 Message;再传给 Structured Output 组件,把它处理为结构化数据;然后再把结果送回 Loop 的 Looping 端口。
所有行处理结束后,Loop 会把聚合后的结构化数据列表通过 Done 端口传给 Chroma DB,写入数据库。

如果你想看更多 Loop 的示例,可以试试 SkillFlaw 自带的 Research Translation Loop 模板,或者观看视频教程 Mastering the Loop Component and agentic RAG。
条件循环
If-Else 组件 与 Loop 不兼容。
如果你需要带条件的循环逻辑,建议在进入循环之前先完成条件处理。
例如,当你遍历的是一个 DataFrame 时,可以先用多个 DataFrame Operations 组件 做条件过滤,然后分别对不同过滤结果执行独立循环。

Loop 参数
有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。
| Name | Type | Description |
|---|---|---|
| inputs | Data or DataFrame | 输入参数。要被逐项遍历的数据集合。 |
| item | Data | 输出参数。当前循环中的单个元素,通过 Item 端口输出。 |
| looping | Data | 输入参数。循环链路末尾回传给 Loop 的处理中间结果,用于继续下一轮迭代。 |
| done | Data | 输出参数。全部 item 处理完成后聚合得到的最终结果。 |