はじめに:なぜ「ワークフロー」なのか?
「AIアプリ?どうせChatGPTを呼び出すだけでしょ?」 と思っている方もいるかもしれません。
確かに、単純なAIチャットボットは、入力に対して「即答」します。 しかし、Difyの「ワークフロー」機能は、複数のAIモデルやツールを視覚的に連結し、AIの「思考の連鎖(Chain of Thought)」を明示的に設計できます。
例えば、「神話生物バトル」というテーマで文章を書く場合の、従来AIとDifyワークフローのアプローチの違いは、以下のようになります:
- 従来の単一AI: AIに「ドラゴンとクラーケンの戦いを書いて」と丸投げする。
- (AIは特徴を無視したり、適当に書いたりするかもしれません)
- Difyワークフロー(今回構築するもの):
- (AI 1:召喚士)まず「ドラゴン」「クラーケン」の伝承(データ)を分析・要約させる。
- (AI 2:吟遊詩人)次に、その分析結果だけを基に、物語を執筆させる。
このように「推論」と「実行」を分離することで、AIの思考プロセスが可視化され、出力の品質と一貫性を劇的に向上させることができます。今回は、Difyを用いたワークフローの設計と推論の基礎についてまとめてみました。
Step1. Dify Cloud セットアップ
まず、Difyを利用するためのアカウント作成と、AIモデル(LLM)の接続を行います。 本ガイドは、OpenAIのAPIキーをすでに所有していることを前提としています。
1. Dify Cloudへのサインアップ
- dify.ai にアクセスし、「Get Started」をクリックします。GoogleまたはGitHubアカウントでの認証がスムーズです。

- ワークスペースの作成
- ログイン後、「ワークスペース名」(例:
My-Workspace)を設定します。これがAIアプリを管理するプロジェクト空間となります。
- ログイン後、「ワークスペース名」(例:

- 【重要】モデルプロバイダーの設定 (OpenAI APIキー接続)
- DifyはAIアプリのプラットフォームであり、実際のAIモデル(ChatGPT)は外部の「モデルプロバイダー」から呼び出します。
- A. OpenAI APIキーの準備:
- OpenAIのAPIキー管理ダッシュボードにアクセスします:
https://platform.openai.com/api-keys - 既存のキーをコピーするか、「Create new secret key」をクリックして新しいキーを生成し、すぐにコピーしてください。(※注:一度閉じると再表示できません)
- OpenAIのAPIキー管理ダッシュボードにアクセスします:
- B. Difyへのキー設定:
- Difyの画面に戻り、右上のアカウントアイコン → 「設定」を選択します。
- 左側メニューから「モデルプロバイダー」をクリック。
OpenAIを見つけ、まず「セットアップ」をクリックします。
OpenAIが上に表示されたら、「セットアップ」をクリックします。
- ステップAでコピーした
APIキーを所定の欄にペーストし、「保存」します。
- 右上に緑色のステータスが表示されれば、環境構築は完了です。

Step2. ワークフロー・アプリケーションの作成
次に、AIアプリケーションの「器」を作成します。今回はDifyの真価を発揮する「ワークフロー」タイプを選択します。
-
- 「アプリを作成」ボタン → 「最初から作成」を選択します。
- スタジオへ移動
- 左上のDifyロゴをクリックし、メイン画面(スタジオ)に戻ります。

- 「チャットフロー」ではなく、「ワークフロー」を選択します。アプリタイプの選択

-
- 視覚的な「キャンバス」が表示されます。ここでAIの思考プロセスを設計します。アプリ名の設定
- アプリ名を入力し、「作成」をクリックします。
- 視覚的な「キャンバス」が表示されます。ここでAIの思考プロセスを設計します。アプリ名の設定

Step3. ワークフローの設計(思考の連鎖)
キャンバス上で、ノード(処理単位)を配置し、それらを線で結線していきます。
3-1. 入力変数の定義 (開始ノード)
まず、ユーザーが「お題」を入力するためのフォームを定義します。
- キャンバスにデフォルトで配置されている「開始」ノードをクリックします。
- 画面右側に「変数」パネルが開きます。
- 「+追加」をクリックし、以下の2つの短文の変数を定義します。
- 変数名:
creature_A(ラベル名: 生物A, タイプ:string)
- 変数名:
creature_B(ラベル名: 生物B, タイプ:string)
- 変数名:
- 解説: ここで定義した変数が、ワークフロー全体で利用可能な「グローバル入力」となります。

3-2. ノード1:分析LLM (推論パート) の配置
入力された生物を「分析」し、特徴を抽出するLLMノードを配置します。
- そしてマウスを開始のブロックに移動し、開始で+のボタンでLLMを追加します。
- ブロックの名前はそれぞれ個人の好みで変更します。
- 「開始」ノードの出力ハンドル(
creature_Aとcreature_B)から、「分析LLM」ノードの入力ハンドル(llm)へ、それぞれ線を接続していることを確認します。
- 「分析LLM」ノードを選択した状態で、右パネルの「プロンプト」をそれぞれ設定します。
- プロンプト設定 (system):
systemプロンプトのテキストエリアに、このLLMの役割を厳密に定義します。
# 役割
あなたは神話生物の専門家です。
入力された2体の生物について、それぞれの特徴、能力、弱点、生息地を客観的に分析し、箇条書きで要約してください。
# 制約
この出力は、後続のLLMが物語を生成するための「中間コンテキスト(設定資料)」として使用されます。推測や創作を含めず、詳細と客観的な情報のみを出力してください。
メッセージ追加をクリックすると、user プロンプト一つ作り。AとBをそれぞれを”/”を入れることで選択できます(Xは選択された変数)。
# 入力
生物:/{x}creatrue_X
(※ {{変数名}} 形式で、「開始」ノードで定義した変数をプロンプトに埋め込むことができます)

3-3. ノード2:生成LLM (実行パート) の配置
次に、ノード1が生成した「分析結果」だけをインプットとして、物語を「生成」するLLMノードを配置します。
- キャンバスにもう一つ「LLM」ノードを追加します。
- ノード名を(例:
生成LLM (実行))に変更します。
-
- 「 分析LLM」ノードの出力ハンドル(
text)から、「 生成LLM」ノードの入力ハンドル(llm)へ、線をドラッグして接続します。
【重要】思考の連鎖 (Chain)この接続こそが「思考の連鎖」です。ノード1の「出力(推論結果)」が、ノード2の「入力(実行のためのコンテキスト)」として渡されます。
- 「 分析LLM」ノードの出力ハンドル(

- 「② 生成LLM」ノードを選択し、プロンプトを設定します。
# 指示
以下の【設定資料】に記述された特徴や能力に「厳密に基づいて」、「{{creature_A}}」と「{{creature_B}}」が戦う、迫力ある短編小説を生成してください。
# 制約
- 【設定資料】にない能力や特徴を、勝手に創作(ハルシネーション)してはいけません。
- 必ず【設定資料】の情報をすべて活用してください。
【設定資料】
{{pre_prompt}} <-- (※Difyでは、前のLLMノードの出力は {{pre_prompt}} という変数名で自動的に挿入されます)

3-4. 出力の設定 (終了ノード)
最後に、ノード2が生成した「物語」をユーザーへの最終出力として定義します。
- 「② 生成LLM」ノードの出力ハンドル(
text)を、デフォルトで配置されている「終了」ノードの入力ハンドルに接続します。
- 「終了」ノードをクリックし、右パネルの「出力変数」の名前を(例:
story)と定義します。
これで、[開始] → [分析LLM] → [生成LLM] → [終了] という、推論と実行が分離されたワークフローが完成しました。

Step4. 実行とデバッグ(推論プロセスの可視化)
設計したワークフローをテストし、AIの「思考の途中経過」を確認します。
- テスト実行
- 画面右上の「公開」ボタンを押し、変更を保存します。
- 「実行」をクリックすると、画面右側の「デバッグとプレビュー」パネルを開きます。
- 「生物A」に
ドラゴン
- 「生物B」に
クラーケン
- と入力し、「実行」クリックします。

- 数秒後、「終了」ノードの
story欄に、分析に基づいた物語が生成されれば成功です。 - 【Difyの真髄】ログによる推論の可視化
- 「なぜこの物語になったのか?」を検証します。
- 画面上部の「ログと注釈」タブをクリックします。
- 最新の実行ログを選択し、キャンバス上の「① 分析LLM (推論)」ノードをクリックします。
- パネルの「出力」タブを確認すると、**ノード1が実際に生成した「中間コンテキスト(分析結果)」**がすべて表示されます。
- これがDifyワークフローの最大の価値です。AIの思考プロセス(推論)が可視化されるため、「なぜ」この出力になったのかが明確になり、デバッグやプロンプトの改善が劇的に容易になります。

Step5. アプリケーションの公開 (Webアプリ化)
完成したワークフローを、URLでアクセス可能なWebアプリとして公開します。
- アプリ管理画面の上部にある「概要」タブをクリックします。
- 「共有可能なウェブアプリ」セクションを見つけます。
- 「公開する」ボタンをオンにします。
- 生成された URL をコピーします。
このURLをブラウザで開けば、誰でもこの「神話生物バトル・ジェネレーター」を利用できます。
まとめ:AIワークフロー設計の第一歩
お疲れ様でした。 この記事では、Difyのセットアップから、AIの「推論」と「実行」を分離した「Agentic Workflow」の設計までを実践しました。
この**「①まず分析し、②その結果に基づいて実行する」**という考え方は、AIの回答根拠を明確にし(推論ログ)、ハルシ”ネーションを防ぐため、実際の業務自動化で非常に重要です。
例えば、高精度な顧客サポートを構築する際、まず「推論(1)」として問い合わせを分析し、社内マニュアル(ナレッジ)を検索・要約させ、次に「実行(2)」としてその要約(=正しい知識)にのみ基づいて回答文を生成させることができます。同様に、議事録の自動生成では、「推論(1)」が会議テキストから「決定事項」と「TODO」を抽出し、「実行(2)」がその抽出リストを基に指定フォーマットのメール文面を生成する、といった使い方が考えられます。
Difyの本当の力は、今日作ったワークフローに「Google検索」や「ナレッジベース(RAG)」といったノードを追加し、これらのユースケースを現実に拡張できる点にあります。
まずは第一歩として、AIの思考プロセスを設計する感覚を掴んでいただけたなら幸いです。
付録:
テキスト1:ワンショット(推論なし)の例
AI(単一のLLM)に上記のお題をそのまま(丸投げして)実行させた場合の出力例です。
曙光が水面を照らし、静寂に包まれた海域に一つの影が浮かび上がった。それは、深海の恐怖、クラーケン。その蛸のような体と長い触手が、まるで海の主たるかのように威儀を振るっていた。一方、海の上空では、空を支配するドラゴンが風に乗って飛び回っていた。その巨大な体と力強い翼、火を吹く口は、空の王者であることを証明していた。ドラゴンはその眼で海面を見つめ、水面から現れる異形の影を捉えた。クラーケンもまた、空を見上げ、ドラゴンの存在を意識した。彼らは異なる領域を支配する者同士、自然と対立する存在であった。そして、その戦いが始まった。ドラゴンは空から火の息を吹き、クラーケンに向かって放った。しかし、クラーケンは水面下に潜り、火の攻撃を避けた。次に現れた時、クラーケンは触手を振り上げ、ドラゴンを海に引きずり込もうとした。しかし、ドラゴンはその試みを見抜き、高く空へと舞い上がる。そして再び火を噴き出したが、クラーケンは再び海底へと姿を消した。この攻防は何度も繰り返され、いずれの生物も優位に立つことはできなかった。しかし、戦いが長引くにつれ、ドラゴンの翼は水しぶきで濡れ、飛ぶのが難しくなってきた。それに気づいたクラーケンは、全力で水柱を立て、ドラゴンに向けて放った。ドラゴンはその攻撃を避けきれず、海へと落ちていった。クラーケンは瞬時にその巨体を巻きつけ、海底へ引きずり込もうとした。だが、ドラゴンは最後の力を振り絞り、火を吹いた。水中の火は熱蒸気を発生させ、クラーケンを一時的に退けることに成功した。翼を力強く羽ばたかせ、海から飛び上がったドラゴンは、空から一直線にクラーケンへと突進し、その頭部に強烈な一撃を加えた。その衝撃でクラーケンは一瞬動きを止め、その隙にドラゴンは再び空へと舞い上がった。その後、しばらくの間攻防は続いたが、最終的にはお互いに引き分けとなった。ドラゴンは空へ、クラーケンは海へとそれぞれ戻り、その戦いは一時的な終結を迎えた。それぞれの領域を支配する者同士、彼らの戦いは永遠とも言えるものだった。しかし、その戦いがあるからこそ、彼らは自身の領域を守り、生き続けることができたのだ。そして、その戦いを見た者たちは語り継ぐことだろう。「深海のクラーケンと空のドラゴンの壮絶な戦いを…」
テキスト2:Difyワークフロー(推論あり)の例
この記事で構築した「分析LLM」→「生成LLM」のワークフローで実行させた場合の出力例です。
ある日、深い海の底に住むクラーケンが、自分の領域を侵す者がいることに気付いた。その侵入者は他でもない、天空を飛ぶ大型の生物、ドラゴンだった。ドラゴンは海の底で宝物を探していたが、その巣は海底にあるクラーケンの領土に深く侵入していた。クラーケンは怒りに燃え、ドラゴンに攻撃を仕掛けた。巨大な触手でドラゴンを海中に引きずり込もうとしたが、ドラゴンは飛翔能力を使って海上に逃れた。クラーケンは逃げたドラゴンに向けて大量のインクを吹き出し、視界を遮って逃げ道を塞いだ。しかし、ドラゴンは火を吹き出して海面を照らし、インクの闇を払い除けた。そして、魔法を使い、クラーケンの触手を炎で焼き尽くした。海面は一瞬で蒸気に包まれ、クラーケンの姿が見えなくなった。しかし、クラーケンは強力な生物だった。焼け焦げた触手から再び新たな触手が生え、怒りに燃えるクラーケンは再びドラゴンに襲い掛かった。ドラゴンは飛翔力で逃れようとしたが、クラーケンの新たな触手に捕まり、海に引きずり込まれた。水中ではクラーケンの領域、ドラゴンは火を吹くことも、魔法を使うこともできなかった。しかし、ドラゴンはまだ負けるつもりはなかった。弱点である腹部を守るために、爪と尾で触手を切り裂いた。その間に海面に浮かび上がり、空へと飛び立った。クラーケンは再びインクを吹き出したが、ドラゴンは遠くから火を吹き、クラーケンの頭部を焼き尽くした。クラーケンは痛みに苦しみながらも、再びドラゴンを海中に引きずり込もうとしたが、既に力尽きていた。最後に、ドラゴンは空から一気に突っ込み、クラーケンの心臓を爪で貫いた。クラーケンは激痛に吠えながら、海底へと沈んでいった。この戦いの後、ドラゴンは海底の宝物を手に入れ、天空へと帰っていった。しかし、その胸にはクラーケンとの戦いの傷跡が深く刻まれていた。
結論として、テキスト2(Difyワークフロー)の方が、怪物の機能や生物的な特徴に関する記述が「精密」です。
テキスト1の描写は抽象的になりがちです(例:「蛸のような体」「火を吹く口」といった、誰でも知っている基本的な特徴のみ)。AIが推論(分析)を省略しているため、詳細な設定が欠落しています。
一方で、テキスト2は「①分析LLM」が生成した「設定資料(推論)」に厳密に基づいているため、具体的な生体機能や戦術的な弱点にまで言及が可能になります。
例えば、テキスト2では以下の描写が確認できるはずです。
- クラーケン: 単なる触手ではなく、「インクを吐く」防御行動や、そして「心臓が急所である」という明確な弱点。
- ドラゴン: 単に火を噴くだけでなく、「魔法も使う」能力、「爪と尾での物理攻撃」、そして「水中では火も魔法も使えない」「腹部が弱点」といった戦術的な制約。
このように、Difyワークフローで「推論」プロセスを挟むことにより、AIは具体的な能力や戦術的アクションに基づいた「信憑性の高い」内容を生成できるようになります。これが、ワンショットAIとの決定的な品質の差です。