5.4 KiB
5.4 KiB
迭代
定义
对数组执行多次步骤直至输出所有结果。
迭代步骤在列表中的每个条目(item)上执行相同的步骤。使用迭代的条件是确保输入值已经格式化为列表对象。迭代节点允许 AI 工作流处理更复杂的处理逻辑,迭代节点是循环节点的友好版本,它在自定义程度上做出了一些妥协,以便非技术用户能够快速入门。
场景
示例1:长文章迭代生成器

长故事生成器
- 在 开始节点 内输入故事标题和大纲
- 使用 代码节点 从用户输入中提取出完整内容
- 使用 参数提取节点 将完整内容转换成数组格式
- 通过 迭代节点 包裹的 LLM 节点 循环多次生成各章节内容
- 将 直接回复 节点添加在迭代节点内部,实现在每轮迭代生成之后流式输出
具体配置步骤
- 在 开始节点 配置故事标题(title)和大纲(outline);

开始节点配置
- 通过 Jinja-2 模板节点 将故事标题与大纲转换为完整文本;

模板节点
- 通过 参数提取节点,将故事文本转换成为数组(Array)结构。提取参数为
sections,参数类型为Array[Object]

参数提取
{% hint style="info" %} 参数提取效果受模型推理能力和指令影响,使用推理能力更强的模型,在指令内增加示例可以提高参数提取的效果。 {% endhint %}
- 将数组格式的故事大纲作为迭代节点的输入,在迭代节点内部使用 LLM 节点 进行处理

配置迭代节点
在 LLM 节点内配置输入变量 GenerateOverallOutline/output 和 Iteration/item

配置 LLM 节点
{% hint style="info" %}
迭代的内置变量:items[object] 和 index[number]
items[object] 代表以每轮迭代的输入条目;
index[number] 代表当前迭代的轮次;
{% endhint %}
- 在迭代节点内部配置 直接回复节点 ,可以实现在每轮迭代生成之后流式输出。

配置 Answer 节点
- 完整调试和预览

按故事章节多轮迭代生成
示例 2:长文章迭代生成器(另一种编排方式)

- 在 开始节点 内输入故事标题和大纲
- 使用 LLM 节点 生成文章小标题,以及小标题对应的内容
- 使用 代码节点 将完整内容转换成数组格式
- 通过 迭代节点 包裹的 LLM 节点 循环多次生成各章节内容
- 使用 模板转换 节点将迭代节点输出的字符串数组转换为字符串
- 在最后添加 直接回复节点 将转换后的字符串直接输出
什么是数组内容
列表是一种特定的数据类型,其中的元素用逗号分隔,以 [ 开头,以 ] 结尾。例如:
数字型:
[0,1,2,3,4,5]
字符串型:
["monday", "Tuesday", "Wednesday", "Thursday"]
JSON 对象:
[
{
"name": "Alice",
"age": 30,
"email": "alice@example.com"
},
{
"name": "Bob",
"age": 25,
"email": "bob@example.com"
},
{
"name": "Charlie",
"age": 35,
"email": "charlie@example.com"
}
]
支持返回数组的节点
- 代码节点
- 参数提取
- 知识库检索
- 迭代
- 工具
- HTTP 请求
如何获取数组格式的内容
使用 CODE 节点返回

code 节点输出 array
使用 参数提取 节点返回

参数提取节点输出 array
如何将数组转换为文本
迭代节点的输出变量为数组格式,无法直接输出。你可以使用一个简单的步骤将数组转换回文本。
使用代码节点转换

代码节点转换
def main(articleSections: list):
data = articleSections
return {
"result": "\n".join(data)
}
使用模板节点转换

模板节点转换
{{ articleSections | join("\n") }}