跳到主要内容

循环

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

循环处理过程

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

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

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

    更具体地说,Loop 会不断从 DataDataFrame 对象中按 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 组件,把它处理为结构化数据;然后再把结果送回 LoopLooping 端口。 所有行处理结束后,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 处理完成后聚合得到的最终结果。