イテレーション
目的
複数行テキストを「1行=1件」として処理し、各行を1文要約して一覧化します。Difyのイテレーションは 入力=配列(Array)、出力=配列(Array) が前提です。文字列は先に配列へ変換します。
イテレーションノードを動作させるためのサンプルです。
イテレーションは事前に分割、配列などに変換しておく必要がある。
テキストをそのまま渡してはだめ
全体構成
[開始: raw_texts]
→ [コード実行: split → items[]]
→ [イテレーション: 入力 items[] / 内部 LLM で要約 / 出力=LLMの text を集約(Array)]
→ [変数代入: summary_list[] に結果を書き込み]
→ [LLM(整形): summary_list[] を箇条書き化]
→ [回答]
手順
1) 開始ノード
- 変数:
raw_texts - タイプ: テキスト(複数行)
- 説明: 「1行=1件で入力してください」
2) コードノード(文字列→配列)
- 入力:
raw_texts - Python
def main(raw_texts: str):
# 改行で分割、空行は除外
items = [s.strip() for s in raw_texts.splitlines() if s.strip()]
return {"items": items}
- 出力:
items(Array[String])
3) イテレーションノード
-
入力:
items(上のコード出力の Array) -
内部 LLM(各要素の要約)
- System: 「あなたは簡潔な要約器です。」
-
User プロンプト(ここが最重要)
次の文を日本語で1文要約してください。 --- {{(変数挿入ボタンから)イテレーション要素}} ← 手打ち禁止! -
注意:
{{#item#}}を手打ちしないでください。右側の変数挿入ボタンから「イテレーション要素」(UI ではiteration.itemなど)をクリック挿入します。手打ちすると 文字列の“{{#item#}}” が送られて要約に失敗します。
-
出力(イテレーションの《出力変数》)
- 内部 LLM の
textを選択(=集約対象) - ここは保存先の会話変数を選ぶ場所ではありません。
- 内部 LLM の
4) 変数代入(会話変数へ保存)
- 右パネル「会話変数」で事前に作成:
-
summary_list/ 型: Array[String] / 既定値:[]
-
- 変数代入ノード:
- 左:
summary_list(会話変数) - 右: 前ノード(イテレーション)の出力配列
- 左:
5) LLM(整形)
- System: 「あなたは編集者です。出力は本文のみ。」
- User:
次の要約配列を、番号付き箇条書きで出力してください。
前置き・後書きは不要です。
{{#summary_list#}}
6) 回答ノード
- 送信: 上の LLM の
text
動作確認(例)
raw_texts 入力
生成AIは業務の効率化に寄与する
DifyはノーコードでLLMワークフローを構築できる
イテレーションノードで同じ処理を複数データへ適用できる
期待される最終出力(例)
1. 生成AI活用により業務効率化が可能という要点の要約
2. DifyでノーコードにLLMワークフロー構築が可能という要点の要約
3. イテレーションで同一処理を複数データへ適用できるという要点の要約
つまずき防止チェックリスト
-
コードノードの出力が
items: Array[String]になっている -
イテレーションの内部 LLM で 変数挿入ボタンから要素を挿入(
iteration.item等)。手打ちの{{#item#}}は厳禁 - イテレーションの《出力変数》は 集約対象のフィールド(LLM→text) を選ぶ
-
会話変数
summary_listは Array[String] で作成済み -
変数代入で
summary_list =(イテレーション結果の配列)を設定 - 終了ノード(回答)がある
付録:小ワザ
- パラレルモードで高速化(APIレートと順序性に注意)
-
最大件数ガード:コードで
items = items[:50]など - 空入力対策:空のときは「入力がありません」などのメッセージを返す
