跳到主要内容

循环

Loop 组件用于遍历一组输入数据:它会把列表中的每个元素依次发送到 Item 输出端口所连接的组件中,直到所有元素都处理完毕。 处理结束后,Loop 会把整个循环过程中聚合出的结果,通过 Done 端口传给下一个组件。

循环处理过程​

你可以把 Loop 看成是在流程内部嵌了一条“小流程”。 整个过程如下:

  1. 通过 Inputs 端口接收一个 Data 或 DataFrame 列表,例如 CSV 文件内容。

  2. 将输入拆分成单个 item。 例如,CSV 文件会按行拆分。

    更具体地说,Loop 会不断从 Data 或 DataFrame 对象中按 text 键提取元素,直到没有更多元素可提取。 每个 item 输出都是一个 Data 对象。

  3. 通过 Item 输出端口逐个处理这些 item。

    该端口会连接到一个或多个负责处理单个 item 的组件。 在循环链路的最后一个组件上,需要把输出再接回 Loop 组件的 Looping 端口,以继续处理下一个 item。

    Item 端口本身只连接一个起始组件,但在回到 Looping 之前,你可以在中间串接任意多个组件。

    If-Else 组件 与 Loop 不兼容。 更多说明请参阅条件循环。

  4. 当所有 item 都处理完后,结果会被聚合成一个 Data 对象,并从 Done 端口传给流程中的下一个组件。

下面这段简化的 Python 代码可以帮助你理解 Loop 的工作方式。 这不是组件的真实实现代码,只是一个便于理解的抽象说明:


_10
for i in input: # 接收一个列表作为输入
_10
process_item(i) # 通过 Item 端口连接的组件处理每个元素
_10
if has_more_items():
_10
continue # 回到 Looping 端口处理下一个元素
_10
else:
_10
break # 没有更多元素时退出循环
_10
_10
done = aggregate_results() # 汇总所有返回结果
_10
_10
print(done) # 从 Done 端口把聚合结果传给下一个组件

Loop 示例​

下面的例子中,Loop 组件会遍历一个 CSV 文件,直到没有剩余行可处理。 这里,Item 端口先把每一行传给 Type Convert 组件,将这一行转换成 Message;再传给 Structured Output 组件,把它处理为结构化数据;然后再把结果送回 Loop 的 Looping 端口。 所有行处理结束后,Loop 会把聚合后的结构化数据列表通过 Done 端口传给 Chroma DB,写入数据库。

Loop CSV parser

提示

如果你想看更多 Loop 的示例,可以试试 SkillFlaw 自带的 Research Translation Loop 模板,或者观看视频教程 Mastering the Loop Component and agentic RAG。

条件循环​

If-Else 组件 与 Loop 不兼容。 如果你需要带条件的循环逻辑,建议在进入循环之前先完成条件处理。 例如,当你遍历的是一个 DataFrame 时,可以先用多个 DataFrame Operations 组件 做条件过滤,然后分别对不同过滤结果执行独立循环。

A flow with conditional looping.

Loop 参数​

有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。

NameTypeDescription
inputsData or DataFrame输入参数。要被逐项遍历的数据集合。
itemData输出参数。当前循环中的单个元素,通过 Item 端口输出。
loopingData输入参数。循环链路末尾回传给 Loop 的处理中间结果,用于继续下一轮迭代。
doneData输出参数。全部 item 处理完成后聚合得到的最终结果。