【Dify実践】反復(イテレーション)で海外レビュー自動翻訳アプリを作る!初心者がハマる罠も解説

Difyの「反復(イテレーション)」ノードを活用して、大量の海外レビューを自動翻訳・分析するアプリの作り方を解説したブログ第107話のアイキャッチ画像。笑顔の49歳店主(Yasu)が親指を立てる傍らで、ベルトコンベアに乗った仕様書や市場分析データがAIによって次々と処理され、「Accuracy(正確性)」や「Speed(速度)」を兼ね備えた翻訳結果へと変換されていく近未来的な工場のイメージ図。 Uncategorized

こんにちは、横浜で清掃業を営む49歳、ヤスです。

前回はAI同士を戦わせる!自動ブログ生成ワークフローアプリを作りましたね

今回は、私がDifyとGASを学習する中で実際に作成した「海外サイトの靴サイズ一瞬で変換&買い物サポートAI」の作り方を大公開します。

Difyを触り始めると、「1つの質問に1つ答える」アプリは簡単に作れますよね。でも、「10個の長文レビューを全部一気に翻訳して要約してほしい!」と思った途端、どう組めばいいか分からなくなりませんか?

この記事では、そんな時に必須となる「イテレーション(反復)」機能の使い方と、私が実際に見事にハマった「初心者が絶対につまずくエラーの落とし穴」を、中学生でもわかるレベルで解説します。40代からでも遅くない。一緒に壁をぶち破っていきましょう!

【結論】 複数の長文データをAIに一気に自動処理させたいなら、「コード実行」で文章をリスト(配列)に切り分け、「イテレーション(反復)」ブロックのベルトコンベアに乗せて処理するコンボが最強です。

ただし、作業員(LLM)を配置する場所や、変数名(箱の名前)を一つでも間違えると途端にシステムは動きません。現場の清掃で「洗剤のラベルと中身が合っているか」を必ず確認するように、設定画面とコードの変数名の一致を指差し確認することが成功のカギです。

【手順(コード解説あり)】

アプリの構成は、「材料を入れる」→「変換・加工する(2ルート並行)」→「結果を出す」というシンプルな流れです。

ステップ1:開始(Start)ブロックで受付窓口を作る ユーザーがデータを入力する箱を用意します。

  • 変数1:shoe_size(テキスト型)… 例:「EUR43」
  • 変数2:foreign_reviews(段落型)… 海外の長文レビューを複数コピペして入れる大きな箱です。(※ファイルリストではなく「段落」を選ぶのがポイント!)

ステップ2:ルートA(靴サイズ変換) 開始ブロックからLLMを繋ぎ、「入力された海外の靴サイズ({{shoe_size}})を、日本のcmサイズに変換してください」とプロンプトで指示します。これで約27cmといった結果が出ます。

DifyワークフローのLLMノード(gpt-4)設定画面。入力された海外の靴サイズ((x) shoe_size)を、日本のcmサイズへ自動変換するためのシステムプロンプト設定。ワークフロー全体では「ユーザー入力」から「コード実行」および「イテレーション(反復処理)」ノードへと分岐しており、大量の海外レビューデータを1件ずつ正確に処理し、サイズ表記などのローカライズを行うプロセス。

ステップ3:ルートB(コード実行でリスト化) ここが最初の難所です!開始ブロックに入力された長文のレビューを、1行ずつに切り分けて「リスト(配列)」にするためのコードを挟みます。ここでGASの知識が活きます!

JavaScriptを選択し、以下のコードをコピペしてください。

JavaScript

// Difyのコードブロックで最初に呼び出されるメインの関数です
// 【重要】ここの「foreign_reviews」と、左パネルの入力変数名を完全に同じにします!
function main({foreign_reviews}) {
    // もし入力が空っぽだった場合は、エラーにならないように空のリストを返して終了します
    if (!foreign_reviews) {
        // 空のリスト(配列)を返します
        return { resultArray: [] };
    }

    // 入力されたレビューの長文を、改行(\n)のタイミングで切り分けてリスト(配列)にします
    const reviewList = foreign_reviews.split('\n');

    // 切り分けたリストの中から、空っぽの行を取り除くための処理(フィルター)をかけます
    const cleanedList = reviewList.filter(function(line) {
        // 文字の前後にある見えないスペースを清掃して、文字が残っている行だけを残します
        return line.trim() !== '';
    });

    // 綺麗に整理されたリスト(配列)を、次のブロックに渡すための結果として返します
    // 【重要】ここの「resultArray」と、左パネルの出力変数名を完全に同じにします!
    return {
        resultArray: cleanedList
    };
}
Difyワークフローの「コード実行」ノード設定画面。JavaScript(main関数)を用いて、入力された海外レビューのリスト(foreign_reviews)が空でないかを確認し、エラーを防ぐための例外処理(空の配列を返す処理)を記述している。この工程により、後続の「イテレーション(反復処理)」ノードへ安全にデータを渡すための、プログラミングによるデータ整形プロセス。

⚠️初心者の罠①:変数名の不一致 左側の設定パネルにある「入力変数(デフォルトでarg1)」の名前を、必ずコード内の foreign_reviews に書き換えてください。出力変数も resultArray に変更必須です。ここがズレていると絶対に動きません!

ステップ4:ルートB(イテレーションで連続処理) 切り分けたリストを、ベルトコンベア(イテレーションブロック)に流し込みます。入力配列に resultArray を設定します。

Difyワークフローの「イテレーション(Iteration)」ノード設定画面。直前の「コード実行」ノードで整形された配列データ(resultArray)を入力として受け取り、内部のLLMノード(gpt-4)がリスト内の各レビューを一件ずつ繰り返し翻訳・処理するループ構造の設定。大量のテキストデータを一括処理し、最終的に「出力をフラット化」して一つのリストにまとめるまでの自動化プロセス。

⚠️初心者の罠②:「リスト処理」と間違えない 「リストのデータを処理するからリスト処理ブロックだ!」と思いがちですが、AIに繰り返し作業をさせるのは「イテレーション(反復)」ブロックです。私はここで盛大に勘違いしました(笑)。

⚠️初心者の罠③:LLMの配置場所 イテレーションブロックの**「大きな枠の中」**にある「+ 次ノード選択」を押してLLMを追加してください。外に置いてしまうと、コンベアの荷物(item)をAIが受け取れません。 プロンプトには {{#iteration.item#}} を挿入し、「この海外レビューを日本語に翻訳して要約して」と指示します。

ステップ5:終了(End)ブロックで完成! 最後に「終了」ブロックを追加し、ルートAの「サイズ変換結果」と、ルートBの「イテレーション結果(翻訳済みリスト)」を繋いで出力変数に設定すれば、アプリの完成です!

Difyワークフローのテスト実行(Test Run)結果画面。海外の靴サイズ「EUR43」を日本の「約27cm」へ自動変換し、同時に複数の英語レビューをイテレーション(反復処理)によって一件ずつ日本語へ翻訳。各レビューに対してAIが「良い点」「悪い点」を箇条書きで抽出・要約しており、右側のコンソールに構造化された解析結果が正常に出力されている様子。

【まとめ】 お疲れ様でした!このアプリを作れるようになれば、Difyの実力は初心者から中級者へと大きくステップアップします。

思い通りに動かず「itemが出ない!」「エラーになる!」と頭を抱えることもありますが、その一つ一つの「やらかし」を解決していく過程こそが、確実なスキルアップに繋がっています。

アプリを作ってテスト実行する時に海外の靴の通販サイトを見たんですが

今はこのようなアプリを使わなくてもサイト内に

同じような機能があるんですね。まあ練習と思ってよしとします。

一人親方として日々の現場仕事は体力的にもキツイですが、家に帰ってからのAI学習は、未来の自分を少しだけ楽にしてくれる最高の投資です。49歳、まだまだ新しい知識を吸収して、ガンガン実践していきましょう!

X(旧Twitter)のアカウント(@yyyyss)でも、日々の学習の泥臭い実践記録や、収益化に向けたリアルな試行錯誤を発信しています。同世代で「これからAIを始めてみようかな」と思っている方、ぜひ一緒に頑張りましょう。フォローやコメント、お待ちしています!私のxはこちら

コメント

タイトルとURLをコピーしました