Difyのはじめ方―ワークフローと推論の基礎

はじめに:なぜ「ワークフロー」なのか?

「AIアプリ?どうせChatGPTを呼び出すだけでしょ?」 と思っている方もいるかもしれません。

確かに、単純なAIチャットボットは、入力に対して「即答」します。 しかし、Difyの「ワークフロー」機能は、複数のAIモデルやツールを視覚的に連結し、AIの「思考の連鎖(Chain of Thought)」を明示的に設計できます。

例えば、「神話生物バトル」というテーマで文章を書く場合の、従来AIとDifyワークフローのアプローチの違いは、以下のようになります:

  • 従来の単一AI:  AIに「ドラゴンとクラーケンの戦いを書いて」と丸投げする。
    • (AIは特徴を無視したり、適当に書いたりするかもしれません)
  • Difyワークフロー(今回構築するもの):
    1. (AI 1:召喚士)まず「ドラゴン」「クラーケン」の伝承(データ)を分析・要約させる。
    1. (AI 2:吟遊詩人)次に、その分析結果だけを基に、物語を執筆させる。

このように「推論」と「実行」を分離することで、AIの思考プロセスが可視化され、出力の品質と一貫性を劇的に向上させることができます。今回は、Difyを用いたワークフローの設計と推論の基礎についてまとめてみました。


Step1. Dify Cloud セットアップ

まず、Difyを利用するためのアカウント作成と、AIモデル(LLM)の接続を行います。 本ガイドは、OpenAIのAPIキーをすでに所有していることを前提としています。

1. Dify Cloudへのサインアップ

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

Step2. ワークフロー・アプリケーションの作成

次に、AIアプリケーションの「器」を作成します。今回はDifyの真価を発揮する「ワークフロー」タイプを選択します。

    • アプリを作成」ボタン → 「最初から作成」を選択します。
    • スタジオへ移動
    • 左上のDifyロゴをクリックし、メイン画面(スタジオ)に戻ります。
アプリ作成画面
  • 「チャットフロー」ではなく、「ワークフロー」を選択します。アプリタイプの選択
ワークフロータイプ選択
    • 視覚的な「キャンバス」が表示されます。ここでAIの思考プロセスを設計します。アプリ名の設定
      • アプリ名を入力し、「作成」をクリックします。
アプリ名設定画面

Step3. ワークフローの設計(思考の連鎖)

キャンバス上で、ノード(処理単位)を配置し、それらを線で結線していきます。

3-1. 入力変数の定義 (開始ノード)

まず、ユーザーが「お題」を入力するためのフォームを定義します。

  1. キャンバスにデフォルトで配置されている「開始」ノードをクリックします。
  1. 画面右側に「変数」パネルが開きます。
  1. 「+追加」をクリックし、以下の2つの短文の変数を定義します。
    • 変数名: creature_A (ラベル名: 生物A, タイプ: string
    • 変数名: creature_B (ラベル名: 生物B, タイプ: string
  2. 解説: ここで定義した変数が、ワークフロー全体で利用可能な「グローバル入力」となります。
変数定義画面

3-2. ノード1:分析LLM (推論パート) の配置

入力された生物を「分析」し、特徴を抽出するLLMノードを配置します。

  1. そしてマウスを開始のブロックに移動し、開始で+のボタンでLLMを追加します。
  1. ブロックの名前はそれぞれ個人の好みで変更します。
  1. 開始」ノードの出力ハンドル(creature_Acreature_B)から、「分析LLM」ノードの入力ハンドル(llm)へ、それぞれ線を接続していることを確認します
  1. 分析LLM」ノードを選択した状態で、右パネルの「プロンプト」をそれぞれ設定します。
  2. プロンプト設定 (system):
    • system プロンプトのテキストエリアに、このLLMの役割を厳密に定義します。
# 役割
あなたは神話生物の専門家です。
入力された2体の生物について、それぞれの特徴、能力、弱点、生息地を客観的に分析し、箇条書きで要約してください。

# 制約
この出力は、後続のLLMが物語を生成するための「中間コンテキスト(設定資料)」として使用されます。推測や創作を含めず、詳細と客観的な情報のみを出力してください。

メッセージ追加をクリックすると、user プロンプト一つ作り。AとBをそれぞれを”/”を入れることで選択できます(Xは選択された変数)。

# 入力
生物:/{x}creatrue_X

(※ {{変数名}} 形式で、「開始」ノードで定義した変数をプロンプトに埋め込むことができます)

分析LLMプロンプト設定

3-3. ノード2:生成LLM (実行パート) の配置

次に、ノード1が生成した「分析結果」だけをインプットとして、物語を「生成」するLLMノードを配置します。

  1. キャンバスにもう一つ「LLM」ノードを追加します。
  1. ノード名を(例: 生成LLM (実行))に変更します。
    • 分析LLM」ノードの出力ハンドルtext)から、「 生成LLM」ノードの入力ハンドルllm)へ、線をドラッグして接続します。

    【重要】思考の連鎖 (Chain)この接続こそが「思考の連鎖」です。ノード1の「出力(推論結果)」が、ノード2の「入力(実行のためのコンテキスト)」として渡されます。

ノード接続図
  1. ② 生成LLM」ノードを選択し、プロンプトを設定します。
プロンプト設定はスクリーンショットのように設定します。
# 指示
以下の【設定資料】に記述された特徴や能力に「厳密に基づいて」、「{{creature_A}}」と「{{creature_B}}」が戦う、迫力ある短編小説を生成してください。

# 制約
- 【設定資料】にない能力や特徴を、勝手に創作(ハルシネーション)してはいけません。
- 必ず【設定資料】の情報をすべて活用してください。

【設定資料】
{{pre_prompt}} <-- (※Difyでは、前のLLMノードの出力は {{pre_prompt}} という変数名で自動的に挿入されます)
生成LLMプロンプト設定

3-4. 出力の設定 (終了ノード)

最後に、ノード2が生成した「物語」をユーザーへの最終出力として定義します。

  1. ② 生成LLM」ノードの出力ハンドルtext)を、デフォルトで配置されている「終了」ノードの入力ハンドルに接続します。
  1. 「終了」ノードをクリックし、右パネルの「出力変数」の名前を(例: story)と定義します。

これで、[開始] → [分析LLM] → [生成LLM] → [終了] という、推論と実行が分離されたワークフローが完成しました。

完成したワークフロー全体図

Step4. 実行とデバッグ(推論プロセスの可視化)

設計したワークフローをテストし、AIの「思考の途中経過」を確認します。

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

Step5. アプリケーションの公開 (Webアプリ化)

完成したワークフローを、URLでアクセス可能なWebアプリとして公開します。

  1. アプリ管理画面の上部にある「概要」タブをクリックします。
  1. 共有可能なウェブアプリ」セクションを見つけます。
  1. 公開する」ボタンをオンにします。
  1. 生成された 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との決定的な品質の差です。

ShtockData

お問い合わせフォーム

お問い合わせ項目を選択してください