【Dify実践】偉人10人が激論!イテレーションで作る「仮想国会」アプリ開発記

Difyのイテレーション機能を活用し、織田信長やアインシュタインなどの偉人10人が特定のテーマで議論を交わす「仮想国会」アプリの開発記を解説したブログ第108話のアイキャッチ画像。笑顔の技術者(Yasu)がノートパソコンを操作する中、青く輝く武将とオレンジに輝く科学者のホログラムが激論を交わし、背景には複雑なデータが流れる近未来的な開発現場のイメージ図。 Uncategorized

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

前回は【Dify実践】反復(イテレーション)で海外レビュー自動翻訳アプリ

を作りましたね。

これまで実業務に直結するアプリを作ってきましたが、今回は少し角度を変えて「極上のエンタメAIアプリ」の作り方を公開します。その名も**「偉人10人が現代のニュースを議論する仮想国会」**!

例えば「空前のサウナブームでおじさんたちが熱狂している」というニュースに対して、織田信長やアインシュタインがそれぞれのキャラになりきってマジメに意見をぶつけ合う、めちゃくちゃ面白いシステムです。

Difyは単なる「質問に答えるBot」を作るだけのツールではありません。「イテレーション(反復)」と「コード実行」を組み合わせれば、複数のAIキャラクターを全自動で操る高度なシステムが作れます。今回も私が思いっきりつまずいた「初心者が陥る罠」を含めて、中学生でもわかるレベルで解説していきます!40代、まだまだ新しい技術で遊んでいきましょう!

【結論】 このエンタメアプリを完成させるカギは、**「コード実行ブロックで名簿を作り、イテレーションブロックでマイクを回す」**という連携プレイです。

ただし、Dify特有の罠である「設定画面とコードの変数名(箱の名前)の不一致」や、「出力変数の設定忘れ」には要注意。現場で「洗剤のラベルと中身が合っているか」を指差し確認するのと同じように、データの受け渡し口をしっかり設定することが成功への最短ルートです。

【手順(ワークフローの作り方)】

全体の流れは「受付(お題入力)→名簿作成(コード)→議論(イテレーション)→まとめ(議長)→出力」という順番です。

ステップ1:開始(Start)ブロック ユーザーから今日のお題を受け取る窓口を作ります。

  • 変数:news_topic(テキスト型)… 例:「AIが人間の仕事を奪うというニュースについて」

ステップ2:コード実行(偉人の名簿作成) 議論に参加する10人の「名簿リスト」をプログラムで作成します。JavaScriptを選択し、以下のコードをコピペしてください。

JavaScript

// Difyのコードブロックで最初に呼び出されるメインの関数です
// 【重要】ここの「news_topic」と、左パネルの入力変数名を完全に同じにします!
function main({news_topic}) {
  // 議論に参加する10人の偉人の名前をリスト(配列)の箱に詰めて用意します
  const greatPeople = [
    "織田信長",
    "アルバート・アインシュタイン",
    "坂本龍馬",
    "マリー・アントワネット",
    "孔子",
    "レオナルド・ダ・ヴィンチ",
    "ナポレオン・ボナパルト",
    "クレオパトラ",
    "福沢諭吉",
    "トーマス・エジソン"
  ];
  
  // 作成した10人の名簿を、次のイテレーションブロックに渡す結果として返します
  // 【重要】ここの「rosterArray」と、左パネルの出力変数名を完全に同じにします!
  return {
    rosterArray: greatPeople
  };
}
Difyワークフローの「コード実行」ノード設定画面。JavaScriptを用いて、議論に参加させる10人の偉人(織田信長、アルベルト・アインシュタイン、坂本龍馬など)を配列(rosterArray)として定義している。この工程により、後続の「イテレーション(反復処理)」ノードへ偉人の名前を一人ずつ渡し、それぞれのキャラクターで意見を出力させるための準備を行うプロセス。

⚠️ 初心者の罠①:入力変数名と出力変数の設定忘れ コード実行ブロックの左側の設定パネルで、デフォルトの「arg1」を必ず「news_topic」に変更してください!また、一番下の出力変数(Output Variables)の追加ボタンを押し、「rosterArray」(Array[String]型)という箱を自分で作るのを絶対に忘れないでください。ここを忘れると次の工程にデータが渡りません!

ステップ3:イテレーション(国会のマイクで順番に発言) コードブロックの右に「イテレーション」ブロックを繋ぎ、入力配列に先ほどの rosterArray を設定します。 そして、イテレーションの**「枠の中」**に「LLM」ブロックを追加し、以下のプロンプトを入力します。

あなたは歴史上の偉人である「{{#iteration.item#}}」です。 自身の性格、口調、歴史的背景、当時の価値観を完全に模倣して振る舞ってください。 以下の「現代のニュース」について、あなた独自の視点から100文字程度で意見を熱く語ってください。

【現代のニュース(本日の議題)】 {{#start.news_topic#}}

※文字が変数として認識されない場合は、一度消して半角の { を打つとメニューから正確に選べます!

Difyワークフローの「イテレーション(Iteration)」ノード設定画面。直前のコード実行ノードで作成した偉人リスト(rosterArray)を入力変数として読み込み、内部のLLMノード(gpt-4)が各偉人のキャラクターになりきって順番に意見を出力するためのループ構造。複数のAIエージェントに役割を順番に割り振ることで、多角的な議論を自動生成するロジックの設定。

ステップ4:LLM(議長のまとめ) イテレーションブロックの**「外(右側)」**に新しい「LLM」ブロックを繋ぎ、議長としてのまとめを指示します。

あなたは仮想国会の「議長」です。 以下の10人の偉人たちの白熱した議論録を踏まえ、現代を生きる私たちに向けた総括とアドバイスを、少しユーモアを交えて300文字程度で分かりやすくまとめてください。

【偉人たちの発言録】 {{#iteration.output#}}

DifyワークフローのLLMノード(gpt-4)設定画面。AIに「仮想国会の議長」の役割を与え、イテレーション(反復処理)によって生成された10人の偉人たちの議論録((x) output)を読み込ませ、現代人へのアドバイスを300文字程度でユーモアを交えてまとめさせるためのシステムプロンプト設定。複数の意見を統合し、最終的な結論を導き出すプロセスの構築。

ステップ5:終了(End)ブロック 最後に「終了」ブロックを繋ぎます。議長のまとめ(chairman_summary)と、イテレーションの出力結果(all_opinions)の2つを出力変数に設定すれば、偉人たちの生々しい発言リストと総括がセットで画面に表示されるようになります!

Difyワークフローのテスト実行(Test Run)結果画面。ユーザーが入力したニューステーマ((x) news_topic)に対し、イテレーション(反復処理)によって呼び出された複数の偉人AI(gpt-4)が順番に意見を出力している。右側のコンソールには、アインシュタインやクレオパトラ、情報科学者などのキャラクターになりきった、ITテクノロジーに関する多角的な議論内容が正常に表示されている様子。

【まとめ】 お疲れ様でした!このアプリが動いた瞬間、偉人たちが自分のキャラ全開で現代のニュースに意見する様子に、思わず笑ってしまうはずです。

今回はちょっと遊び心を入れて仕事には役には立たないけどたまには

こういうアプリもいいのかと思いました。練習にもなるし。

Difyは少し設定を間違えるとすぐエラーを吐きます。私も「arg1のままだった!」「出力変数を設定し忘れた!」と何度も頭を抱えましたが、そのエラーと格闘した数だけ、確実にシステム全体を見渡す力がついています。

本業の清掃ビジネスの合間にパソコンに向かうのは体力的にもラクではありませんが、自分で作ったAIが想像以上の面白い答えを返してくれた時の達成感は最高です。この熱量と感動を、X(@yyyyss)でもガンガン発信していきますので、AI学習に興味がある同世代の方はぜひ一緒に語り合いましょう!

私のエックス

次回も新しいアプリを作ろうと思うので是非お楽しみに!

コメント

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