EzoAI Course Catalog
Course 09 / Layer 2 -- 技術特化

Dify実践 AIワークフロー構築

ノーコード/ローコードでAIワークフローを構築するDifyの実践コース。チャットボット、RAG、外部連携、エージェントモード、本番運用まで。法人向け3日間研修の深さをそのまま凝縮。コードを書かずにAIアプリを作りたい方に最適です。

初級-中級約12時間(720分)10 Sections + 3 Reviewハンズオン比率 65%

目次

  1. AIワークフローとは 50min
  2. 環境構築 50min
  3. チャットボット構築 55min
  4. 復習ハンズオン A -- カスタムチャットボット 25min
  5. ワークフロー構築 65min
  6. RAG実装 65min
  7. 復習ハンズオン B -- RAG付きワークフロー 30min
  8. 外部連携 60min
  9. 条件分岐と高度なワークフロー 55min
  10. エージェントモード 60min
  11. 復習ハンズオン C -- 統合ワークフロー 30min
  12. 本番運用とセキュリティ 45min
  13. 総合ハンズオン 130min
Section 01 -- 50min(講義30 + ハンズオン20)

AIワークフローとは

AIワークフローの概念

業務の中で「問い合わせを受けて、分類して、回答を生成して、記録する」といった一連の流れがあるとき、各ステップにAIを組み込んで自動化する仕組みがAIワークフローです。個々のAI処理を「ノード」として定義し、それをつなげてパイプラインにする。手作業で順番にこなしていた処理が、入力ひとつで一気に完了する世界を目指します。

Difyとは

Difyはオープンソースの LLM アプリケーション開発プラットフォームです。GUIのドラッグ&ドロップ操作でAIアプリケーションを組み立てられます。コードを1行も書かずにチャットボット、RAG検索、マルチステップワークフロー、エージェントを構築可能。セルフホストすればデータを完全にコントロールでき、クラウド版なら即日利用開始できます。

Difyの4つのアプリタイプ

アプリタイプ用途特徴
チャットボット対話型QA、カスタマーサポート会話履歴を保持。ナレッジベース連携可
テキスト生成翻訳、要約、文書作成単発の入出力。APIコール向き
ワークフロー複数ステップの自動処理ノードをつないでパイプライン構築
エージェント自律的なタスク実行ツールを選択・実行して問題解決
%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
graph LR
  A["ユーザー入力"] --> B["Difyアプリ"]
  B --> C["LLM
(GPT/Claude/Gemini)"] C --> D["ツール / API"] C --> E["ナレッジベース"] D --> F["出力"] E --> F
Difyの基本アーキテクチャ。LLMを中心にツールとナレッジベースが接続される
Difyダッシュボード画面

Difyのダッシュボード。アプリの作成・管理をGUIで行える

競合プラットフォーム比較

プラットフォームライセンスノーコードRAGエージェントセルフホスト
DifyApache 2.0対応対応対応対応
LangFlowMIT対応対応限定的対応
FlowiseApache 2.0対応対応限定的対応
n8nSustainable Use対応プラグイン限定的対応

Difyの強みはRAGとエージェント機能が最初から統合されている点にあります。LangFlowはLangChainとの親和性が高く、n8nは非AIのワークフロー自動化に強い。使い分ける場面はありますが、AI特化のアプリ構築ならDifyが最も完成度が高い選択肢です。

Tips: なぜ今Difyなのか
2025年後半からGitHub Star数が急増し、2026年にはセルフホスト型LLMプラットフォームの事実上の標準になりつつあります。日本語ドキュメントも整備が進み、国内企業の導入事例が増えています。

理解度チェック: Section 01

Q1. Difyの4つのアプリタイプのうち、複数のAI処理をノードとしてつなげて自動化するのはどれですか?

正解: C。ワークフローは複数のノードをGUI上でつないでパイプラインを構築するアプリタイプです。エージェントも複数処理を行いますが、こちらはAIが自律的にツールを選択する方式。

Q2. Difyをセルフホストする最大のメリットは?

正解: B。社内の機密データを外部サーバーに送信せず、自社インフラ上でデータを完全管理できます。
ハンズオン: Difyアカウント作成と初めてのチャットアプリ 20min
目標: Difyクラウド版にアカウントを作成し、最初のチャットアプリを動かす

パート1: アカウント作成(5min)

  1. cloud.dify.ai にアクセスしてください
  2. GitHubまたはGoogleアカウントでサインアップしてください
  3. ダッシュボードが表示されたら成功です

パート2: 初めてのチャットアプリ(15min)

  1. ダッシュボード左上の「アプリを作成」をクリックしてください
  2. 「チャットボット」を選択し、アプリ名を「はじめてのDifyアプリ」と入力してください
  3. 「オーケストレーション」画面が開きます。左側の「モデル」でGPT-4o-miniまたはClaude 3.5 Sonnetを選択してください
  4. 「プロンプト」欄に以下を入力してください
あなたは親切なAIアシスタントです。 ユーザーの質問に対して、わかりやすく簡潔に回答してください。 日本語で回答してください。
  1. 右上の「プレビュー」をクリックし、チャットウィンドウに「DifyとLangChainの違いを教えてください」と入力してください
  2. AIが回答を返すことを確認してください
  3. 「公開」ボタンをクリックし、公開URLを取得してください
期待される結果

アプリが動作し、チャットウィンドウでAIと対話できる状態になります。公開URLを開くと、Difyのデフォルトチャット画面が表示されます。ここまでの作業でコードは一切書いていません。この手軽さがDifyの最大の強みです。

Tips
クラウド版の無料枠にはメッセージ数の上限があります。研修中は節約のためGPT-4o-miniを使い、本番用途では性能の高いモデルに切り替える運用がおすすめです。

参考リンク

Section 02 -- 50min(講義25 + ハンズオン25)

環境構築

クラウド版とセルフホスト版

クラウド版 (cloud.dify.ai)

  • 即利用可能、セットアップ不要
  • 無料枠あり(メッセージ数制限)
  • Dify社のサーバーにデータが保存される
  • 個人利用・プロトタイプに最適

セルフホスト版 (Docker Compose)

  • データが外部に一切出ない
  • カスタマイズが自由
  • コスト管理しやすい(API従量課金のみ)
  • 法人本番環境に推奨

セルフホスト版の必要スペック

項目最小要件推奨
OSLinux / macOS / Windows (WSL2)Linux (Ubuntu 22.04+)
Docker Desktop24.0以上最新版
メモリ4GB以上8GB以上
ディスク10GB以上20GB以上
API キーOpenAI or Anthropic複数プロバイダー推奨

環境変数の設定

セルフホスト版では .env ファイルでAPIキーやデータベース設定を管理します。OpenAIやAnthropicのAPIキーはDifyの管理画面からも設定できますが、.envに記述すればデフォルト値として機能します。

APIキーの扱い
APIキーは絶対にGitリポジトリにコミットしないでください。.env.gitignore に必ず追加します。チームで共有する場合は .env.example(値を空にしたテンプレート)を用意してください。
ハンズオン: Docker Composeでローカルセットアップ 25min
目標: 自分のPCにDifyをインストールし、ローカルで動作確認する

ステップ1: リポジトリのクローン(3min)

# Difyのリポジトリをクローン git clone https://github.com/langgenius/dify.git cd dify/docker

ステップ2: 環境変数の設定(5min)

# 環境変数テンプレートをコピー cp .env.example .env # .env を編集(お好みのエディタで) # 最低限、以下を設定してください: # - SECRET_KEY: ランダムな文字列(openssl rand -hex 32 で生成) # - OPENAI_API_KEY: OpenAIのAPIキー(Dify管理画面からも設定可能)

ステップ3: Docker Compose起動(10min)

# コンテナの起動(初回はイメージのダウンロードに数分かかります) docker compose up -d # 起動状態を確認 docker compose ps # 全コンテナが "running" であることを確認してください

ステップ4: 動作確認(5min)

  1. ブラウザで http://localhost/install にアクセスしてください
  2. 管理者アカウント(メール/パスワード)を設定してください
  3. ダッシュボードが表示されたら成功です
  4. 「設定」→「モデルプロバイダー」でOpenAIまたはAnthropicのAPIキーを登録してください

Docker Compose起動時のよくあるエラーと対処法

ポート競合: "Bind for 0.0.0.0:80 failed: port is already allocated"

ポート80が他のアプリケーション(Apache, nginx等)に使われています。

  1. 競合プロセスを確認: lsof -i :80 (Mac/Linux) / netstat -ano | findstr :80 (Windows)
  2. 競合プロセスを停止するか、Difyのポートを変更してください
  3. .env ファイルで NGINX_PORT=8080 に変更し、docker compose up -d で再起動
  4. ブラウザからは http://localhost:8080 でアクセスします
メモリ不足: "Container exited with code 137" / OOMKilled

Docker Desktopに割り当てられたメモリが足りません。Difyは複数のコンテナ(API, Web, Worker, DB, Redis等)を同時に起動するため、最低4GB必要です。

  1. Docker Desktop > Settings > Resources > Memory を4GB以上(推奨8GB)に変更
  2. Docker Desktopを再起動
  3. docker compose downdocker compose up -d で再起動

PCのRAMが8GB以下の場合、セルフホスト版は厳しい環境です。クラウド版( cloud.dify.ai )の利用を検討してください。

APIキー未設定: "Model provider not configured" / モデルが選択できない

LLMプロバイダーのAPIキーが未設定の状態です。Difyはモデルを内蔵していないため、外部のLLM APIキーが必須です。

  1. Dify管理画面にログイン
  2. 右上のアカウントメニュー > 「設定」をクリック
  3. 「モデルプロバイダー」で OpenAI または Anthropic を選択
  4. APIキーを入力して「保存」

.envOPENAI_API_KEY=sk-xxx を直接書く方法もありますが、管理画面から設定する方が安全で管理しやすいです。

ステップ5: 停止と再開(2min)

# Difyを停止(データは保持される) docker compose down # Difyを再開 docker compose up -d # データも含めて完全に削除する場合(注意) # docker compose down -v
Tips
クラウド版で先に進め、セルフホスト版は後から構築する順番でも問題ありません。研修ではクラウド版を推奨しますが、本番運用ではセルフホストが望ましい場面が多くなります。

参考リンク

Section 03 -- 55min(講義20 + ハンズオン35)

チャットボット構築

チャットボットの構成要素

Difyのチャットボットは4つの要素で成り立っています。LLMモデルの選択、システムプロンプト(AIの振る舞いを定義する指示書)、変数(ユーザー入力のパラメータ化)、コンテキスト(ナレッジベースからの補足情報)。この4つを調整するだけで、汎用チャットから業務特化型アシスタントまで自在に作り分けられます。

3種類のチャットボット

1. 基本応答型

シンプルなQA。システムプロンプトで役割と回答ルールを定義するだけ。プロトタイプや社内テスト用途に向いています。

2. ペルソナ設定型

カスタマーサポート担当者やITヘルプデスク等、特定の人格を設定。回答トーン、禁止事項、エスカレーション条件まで細かく制御します。

3. コンテキスト付き型

ファイル添付やナレッジベースを利用して、社内文書に基づく回答を生成。RAG(Sec05)と組み合わせて本領を発揮します。

Tips: モデル選択の指針
コスト優先ならGPT-4o-mini、回答品質優先ならClaude 3.5 SonnetかGPT-4o。日本語の自然さはClaudeが安定しています。Difyでは1つのアプリ内で複数モデルを試してA/Bテストが可能です。
ハンズオン: 3種のチャットボットを順に構築 35min
目標: 基本応答型、ペルソナ設定型、コンテキスト付き型の3種を構築し、回答品質の差を体感する

演習1: 基本応答型チャットボット(10min)

  1. Difyダッシュボードで「アプリを作成」→「チャットボット」を選択してください
  2. アプリ名を「基本QAボット」に設定してください
  3. 以下のシステムプロンプトを設定してください
あなたは汎用AIアシスタントです。 ユーザーの質問に正確かつ簡潔に回答してください。 回答は日本語で200文字以内にまとめてください。 わからないことは「確認が必要です」と正直に答えてください。
  1. プレビューで「Pythonの特徴を教えてください」と質問し、回答を確認してください

演習2: ペルソナ設定型チャットボット(12min)

  1. 新しいチャットボットを作成し、アプリ名を「CSサポートボット」に設定してください
  2. 以下のシステムプロンプトを設定してください
あなたはSaaS製品「SmartTask Pro」のカスタマーサポート担当です。 【回答ルール】 - 敬語で丁寧に対応する - 回答は300文字以内 - 手順がある場合は番号付きリストで示す - 回答の最後に「他にご質問はございますか?」を付ける 【対応可能な範囲】 - アカウント設定、ログイン、プラン変更 - 機能の使い方、トラブルシューティング - 請求・支払いに関する一般的な質問 【禁止事項】 - 競合製品の比較や推奨 - 返金判断(「担当部署にエスカレーションいたします」と返す) - 技術的なバグ修正の約束 【エスカレーション】 対応不可の質問: 「申し訳ございません。この件は専門チームにおつなぎいたします。サポート窓口 support@example.com までご連絡ください。」
  1. プレビューで以下の質問を試してください
    • 「パスワードを変更したいです」(通常対応)
    • 「他社製品と比べてどうですか?」(禁止事項に抵触)
    • 「返金してほしいです」(エスカレーション)

演習3: コンテキスト付き型チャットボット(13min)

  1. 新しいチャットボットを作成し、アプリ名を「社内FAQボット」に設定してください
  2. 「変数」セクションで、テキストエリア変数 context を追加してください
  3. 以下のシステムプロンプトを設定してください
あなたは社内ヘルプデスクのアシスタントです。 以下のコンテキスト情報に基づいて回答してください。 【コンテキスト】 {{context}} 【回答ルール】 - コンテキストに記載のある内容のみ回答する - コンテキストにない情報を推測で回答しない - 該当する情報がない場合は「お手数ですがヘルプデスク(内線: 1234)へお問い合わせください」と回答する - 回答の根拠となるコンテキストの該当箇所を引用する
  1. プレビューで、context欄に社内ルール(例: 「有給休暇は年間20日付与。申請は3営業日前までにシステムから。」)を入力し、関連する質問を試してください
  2. コンテキストにない質問をして、適切にエスカレーションするか確認してください
3種類の比較ポイント

基本応答型は汎用的だが回答がぶれやすい。ペルソナ設定型は回答のトーンと範囲が安定する。コンテキスト付き型はハルシネーションを大幅に抑制できるが、コンテキストの品質に回答が依存します。実務では2と3を組み合わせるケースが多くなります。

自走チャレンジ
テーマ: 講師が基本応答型チャットボットを作ったのと同じ手順で、あなたの業務に合わせたペルソナ設定型チャットボットを自力で作成してください。システムプロンプトの役割定義、トーン指定、回答範囲の制限を自分で設計してください。
条件: Difyのチャットボットアプリで、システムプロンプトを自分で書くこと。テンプレートのコピーは禁止です。
ここで動画を一度止めて、7分間取り組んでください

ヒント: まず「誰として振る舞うか」「何について答えるか」「何について答えないか」の3点を決めてからシステムプロンプトを書き始めると整理しやすくなります。

講師の解答例を見る
あなたはECサイトのカスタマーサポート担当「アシスタントK」です。 【役割】 - 注文状況の確認、返品・交換の案内、商品の基本情報提供を担当します。 【トーン】 - 丁寧で親しみやすい口調。「ですます」調を使います。 - お客様の不満には共感を示してから解決策を提示します。 【回答範囲の制限】 - 技術的な質問(APIの仕様など)には回答しません。「技術サポート窓口へお問い合わせください」と案内します。 - 競合他社の製品比較には応じません。 - 個人情報(住所、電話番号)の確認は行いません。セキュリティ上の理由で「マイページからご確認ください」と案内します。 【エスカレーション条件】 - お客様が2回以上同じ不満を繰り返した場合は「担当者におつなぎします」と伝えます。

解説ポイント: 回答範囲を明確に定義しないと、想定外の質問に対して的外れな回答を生成してしまいます。「答えないこと」の設計が、業務チャットボットの品質を左右します。

Review Hands-on A -- 25min

復習ハンズオン A: カスタムチャットボット

Section 01-03の知識を組み合わせ、自分の業務に合ったチャットボットを完成させます。

課題: 自分の業務向けチャットボットを完成させる 25min
成果物: 業務特化型チャットボット(ペルソナ設定+コンテキスト付き)

手順

  1. 自分の業務で最も頻繁に受ける質問パターンを3つ書き出してください(3min)
  2. Difyで新しいチャットボットを作成し、以下の要素を設定してください(12min)
    • 業務に合ったシステムプロンプト(Sec03のペルソナ設定型をベースに)
    • 禁止事項とエスカレーション条件
    • 回答のトーンと長さ
  3. 書き出した3つの質問パターンでテストしてください(5min)
  4. テスト結果を見てプロンプトを1回以上改善してください(5min)
ヒント: プロンプト改善の観点

回答が長すぎる場合は文字数制限を追加。専門用語が多すぎる場合は「専門用語は使わず平易な表現で」と指定。的外れな回答が出る場合は具体例(Few-shot)をプロンプト末尾に追加すると安定します。

Section 04 -- 65min(講義25 + ハンズオン40)

ワークフロー構築

Difyワークフロービルダー

ワークフローの基本構造

Difyのワークフローは「トリガー(開始ノード)→処理ノード群→出力(終了ノード)」で構成されます。各ノードが1つの処理を担当し、ノード間は変数でデータを受け渡す。GUIのキャンバス上でノードをドラッグ&ドロップして接続するだけで、プログラミング不要のパイプラインが完成します。

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
graph LR
  A["開始
(ユーザー入力)"] --> B["LLMノード
(テキスト生成)"] B --> C["テンプレート
(フォーマット)"] C --> D["条件分岐
(IF/ELSE)"] D -->|条件A| E["LLMノード2
(詳細回答)"] D -->|条件B| F["HTTPリクエスト
(外部API)"] E --> G["終了
(出力)"] F --> G
5ノードのサンプルワークフロー。条件分岐で処理を振り分ける

ノードの種類と役割

ノード役割主な用途
開始 / 入力ワークフローのエントリーポイントユーザー入力の受け取り、変数定義
LLMLLMにプロンプトを送信して回答を取得テキスト生成、分類、要約、翻訳
テンプレートJinja2テンプレートで出力を整形フォーマット制御、変数の埋め込み
条件分岐IF/ELSEで処理を振り分け質問カテゴリ別の分岐、閾値判定
HTTP リクエスト外部APIへリクエスト送信Slack通知、Google Sheets書込み
コードPython/JavaScriptコードを実行データ加工、計算、JSON解析
変数割当変数の値を設定・更新フラグ管理、カウンター
終了 / 出力ワークフローの出力を返す最終結果の返却

ワークフローのデバッグ方法

Tips: ワークフローデバッグの3つの手法
  1. テスト実行(Run) -- ワークフロー編集画面右上の「実行」ボタンで全体をテスト実行できます。入力値を指定して実行すると、各ノードの処理結果がリアルタイムで表示されます。まずはこれで全体の流れを確認してください
  2. ノードごとの入出力確認 -- テスト実行後、各ノードをクリックすると「入力」タブと「出力」タブが表示されます。期待した値がノード間で正しく受け渡されているかをここで確認します。変数名の参照ミス(typo)はここで発見できることが多い
  3. 実行ログの確認 -- ダッシュボードの「ログ」セクションに過去の実行履歴が残ります。各実行の入力、各ノードの処理時間、出力、エラー情報が記録されるので、本番稼働後のトラブルシューティングに使えます。特にLLMノードの応答内容とトークン消費量はここで把握してください

ノード間の変数接続

各ノードの出力は次のノードの入力として参照できます。LLMノードの出力を {{llm_node.text}} のように変数名で取得し、テンプレートノードや条件分岐ノードで利用する。この「変数のバケツリレー」がワークフローのデータフローを構成します。

ハンズオン: ワークフローを段階的に構築 40min
目標: 4つのワークフローを順に構築し、ノードの使い方を体得する

演習1: 最小ワークフロー(10min)

  1. Difyで「アプリを作成」→「ワークフロー」を選択してください
  2. キャンバスに「開始」「LLM」「終了」の3ノードを配置してください
  3. 「開始」ノードにテキスト入力変数 user_input を追加してください
  4. 「LLM」ノードに以下のプロンプトを設定してください
以下の質問に日本語で簡潔に回答してください。 質問: {{#start.user_input#}}
  1. 「終了」ノードでLLMの出力を返すように設定し、テスト実行してください

演習2: テンプレートノードで出力フォーマット制御(10min)

  1. 演習1のワークフローを複製してください
  2. LLMノードと終了ノードの間に「テンプレート」ノードを追加してください
  3. テンプレートに以下のJinja2コードを設定してください
## 回答レポート **質問:** {{user_input}} **AI回答:** {{llm_output}} **生成日時:** {{ now() }} **注意:** この回答はAIによる自動生成です。重要な判断に使用する前に事実確認をお願いします。
  1. テスト実行し、フォーマットが適用された出力を確認してください

演習3: 条件分岐で応答を切替(10min)

  1. 新しいワークフローを作成してください
  2. 開始 → LLM(質問分類)→ 条件分岐 → LLM(技術回答)/LLM(一般回答)→ 終了 の構成を作成してください
  3. 最初のLLMで「質問が技術的かどうか」を判定させてください
以下の質問が「技術的な質問」か「一般的な質問」かを判定してください。 「技術的」か「一般的」のどちらか一言で回答してください。 質問: {{#start.user_input#}}
  1. 条件分岐ノードでLLMの出力に「技術」が含まれるかどうかで分岐させてください
  2. それぞれの分岐先に異なるプロンプトのLLMノードを配置し、テスト実行してください

演習4: コードノードでデータ加工(10min)

  1. 新しいワークフローを作成してください
  2. 開始 → コードノード → LLM → 終了 の構成を作成してください
  3. コードノードにPythonで以下の処理を設定してください
def main(user_input: str) -> dict: # 入力テキストの基本統計を計算 char_count = len(user_input) word_count = len(user_input.split()) line_count = user_input.count('\n') + 1 return { "original_text": user_input, "stats": f"文字数: {char_count}, 単語数: {word_count}, 行数: {line_count}" }
  1. LLMノードでコードの出力(統計情報)を含めて回答を生成してください
  2. テスト実行し、コードノードとLLMノードの連携を確認してください
期待される結果

演習1で基本構造を把握し、演習2でフォーマット制御、演習3で分岐処理、演習4でコード連携を体験します。この4パターンがワークフロー構築の基本型です。これらを組み合わせれば、ほとんどの業務自動化に対応できます。

自走チャレンジ
テーマ: 講師が3ノードのワークフローを作ったのと同じ方法で、以下のワークフローを自力で構築してください。「ユーザーの質問を受け取り → 質問を英語に翻訳 → 英語で回答生成 → 日本語に翻訳して出力」の4ノード構成。
条件: 開始ノード + LLMノード3つの構成。各ノード間の変数の受け渡しを正しく設定すること。
ここで動画を一度止めて、7分間取り組んでください

ヒント: 各LLMノードの出力変数名を明確に(例: english_question, english_answer, japanese_answer)つけると、次のノードで参照しやすくなります。

講師の解答例を見る
【ノード構成】 1. 開始ノード: ユーザー入力(question)を受け取る 2. LLMノード「翻訳_JP_to_EN」: プロンプト: 「以下の日本語の質問を英語に翻訳してください。翻訳のみを出力し、説明は不要です。 質問: {{question}}」 出力変数: english_question 3. LLMノード「回答生成_EN」: プロンプト: 「Answer the following question concisely and accurately: {{english_question}}」 出力変数: english_answer 4. LLMノード「翻訳_EN_to_JP」: プロンプト: 「以下の英語のテキストを自然な日本語に翻訳してください。翻訳のみを出力してください。 {{english_answer}}」 出力変数: japanese_answer → 終了ノードにjapanese_answerを接続

解説ポイント: 変数の受け渡しがワークフロー構築の鍵です。あるノードの出力変数名と、次のノードのプロンプト内の変数参照名が一致していないと、空文字が渡されます。

Section 05 -- 65min(講義25 + ハンズオン40)

RAG実装

RAGの仕組み

RAG(Retrieval-Augmented Generation)は「検索してから生成する」手法です。ユーザーの質問を受け取ったら、まずナレッジベースから関連する文書チャンクを検索し、その文脈をLLMに渡して回答を生成する。LLM単体ではカットオフ以降の情報や社内固有の情報に答えられませんが、RAGなら最新かつ正確な情報源に基づく回答が可能になります。

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
graph LR
  A["ユーザーの質問"] --> B["Embedding
(ベクトル化)"] B --> C["ベクトル検索
(類似チャンク取得)"] C --> D["文脈付与
(質問+検索結果)"] D --> E["LLM
(回答生成)"] E --> F["回答"]
RAGの処理フロー。検索結果を文脈としてLLMに渡す

Difyのナレッジベース

Difyは「ナレッジ」機能でRAGを実現します。PDF、テキスト、Markdown、Webページ、Notionからドキュメントをインポートし、自動的にチャンク分割とベクトル化を行います。ナレッジベースはアプリ間で共有可能で、1つの文書セットを複数のチャットボットやワークフローから参照できます。

チャンク戦略

戦略チャンクサイズ適する文書注意点
自動分割Difyが自動判定汎用。まずこれで試す精度が低い場合はカスタムへ
カスタム分割500-1000トークンFAQ、マニュアル小さすぎると文脈が不足
カスタム分割1000-2000トークン論文、報告書大きすぎると検索精度が低下

検索モードとチューニング

ベクトル検索

意味的な類似度で検索。「有休の申請方法」と「休暇を取るには」を同義と判定できる。デフォルトで推奨。

全文検索

キーワード一致で検索。固有名詞や型番など、正確な文字列一致が必要な場合に強い。

ハイブリッド検索はベクトル検索と全文検索を組み合わせたモードで、両方のスコアを統合してランキングします。多くの場合、ハイブリッドが最も安定した検索精度を出します。

文書タイプ別チャンクサイズガイドライン

チャンクサイズは文書の性質で使い分けます。小さすぎると文脈が失われ、大きすぎると検索精度が下がる。以下の目安で始め、検索テストの結果を見ながら調整してください。

文書タイプ推奨チャンクサイズオーバーラップ理由
FAQ / Q&A型256-512 トークン0-50 トークン1つのQ&Aが1チャンクに収まるのが理想。質問と回答がセットで検索される
マニュアル / 手順書512-1024 トークン50-100 トークン手順の前後関係が重要。オーバーラップを設定して文脈の断絶を防ぐ
契約書 / 法的文書1024-2048 トークン100-200 トークン条項が長く、前後の条項を参照しないと意味が通らない場合がある
論文 / レポート512-1024 トークン100 トークン段落単位で分割し、図表の説明文が本文と分離しないように注意
議事録 / メモ256-512 トークン50 トークン発言単位やアジェンダ項目単位で分割すると検索精度が上がる

検索スコア閾値の設定指針

閾値効果適した場面
0.3 以下(低め)多くのチャンクがヒットする。漏れは少ないがノイズが多い網羅性を重視したい場面(法務文書の検索、コンプライアンスチェック)
0.5 前後(標準)バランス型。まずはこの値で始める一般的なFAQ、マニュアル検索
0.7 以上(高め)高精度だがヒットしない質問が増える正確性が最優先の場面(医療情報、技術仕様の回答)

閾値を高く設定しすぎて「該当する情報が見つかりませんでした」が頻発する場合は、まず閾値を下げ、それでもダメならチャンク分割やEmbeddingモデルの見直しを検討してください。

Tips: Top-KとScore閾値
Top-K は検索結果の上位何件をLLMに渡すかの設定(デフォルト3〜5)。Score閾値は類似度がこの値以下の結果を除外します(デフォルト0.5前後)。Top-Kを増やすと網羅性が上がる反面、ノイズも増加。閾値を上げると精度が上がるが、該当なしになりやすい。トレードオフを意識してチューニングしてください。
ハンズオン: RAG付きチャットボットの構築 40min
目標: PDFからナレッジベースを作成し、RAG付きチャットボットで検索精度を体験する

演習1: ナレッジベース作成(10min)

  1. 以下のサンプルFAQデータをダウンロードしてください
サンプルFAQデータ(.txt)をダウンロード
  1. Difyダッシュボードの「ナレッジ」→「ナレッジを作成」をクリックしてください
  2. ダウンロードしたファイルをアップロードしてください
  3. チャンク設定は「自動」のままで「保存して処理」をクリックしてください
  4. 処理完了後、チャンク一覧を確認してください

演習2: チャンク設定の調整(10min)

  1. ナレッジの「設定」でチャンク方法を「カスタム」に変更してください
  2. チャンクサイズを500トークン、オーバーラップを50トークンに設定してください
  3. 再処理を実行し、チャンク数の変化を確認してください
  4. 「検索テスト」機能で「有給休暇の申請方法は?」と検索し、該当チャンクが上位に来ることを確認してください

演習3: RAG付きチャットボット構築(10min)

  1. 新しいチャットボットを作成してください
  2. 「コンテキスト」セクションで先ほど作成したナレッジベースを追加してください
  3. 以下のシステムプロンプトを設定してください
あなたは社内FAQアシスタントです。 以下のコンテキスト情報に基づいて回答してください。 【回答ルール】 - コンテキストに記載のある情報のみを使って回答する - 推測や一般知識での補足はしない - 該当する情報が見つからない場合は「FAQに該当する情報がありませんでした。総務部(内線: 1234)にお問い合わせください。」と回答する - 回答の末尾に参照元のQ&A番号を記載する
  1. プレビューで5つの質問を試し、回答の正確性を確認してください

演習4: 検索精度チューニング(10min)

  1. チャットボットの「コンテキスト」設定でTop-Kを3→5に変更してテスト
  2. Score閾値を0.3→0.7に変更してテスト
  3. 検索モードを「ベクトル検索」→「ハイブリッド」に変更してテスト
  4. 各設定での回答品質の変化を記録してください
チューニング結果の目安

Top-Kを増やすと「質問に直接関係ない情報も含まれるが、漏れが減る」。Score閾値を上げると「精度は上がるが、閾値未満のチャンクが除外されて回答できない質問が増える」。ハイブリッドはキーワード一致と意味検索の両方を活用するため、FAQ系の文書ではベクトル単体より安定する傾向があります。

参考リンク

自走チャレンジ
テーマ: 講師が使ったのとは異なるPDFドキュメント(サンプルFAQデータをDL)でナレッジベースを構築し、チャンクサイズを3パターン(256/512/1024)で試して検索精度を比較してください。どのサイズが最も良い結果だったか、理由とともに記録してください。
条件: 同じ質問を3回(各チャンクサイズで1回ずつ)投げ、回答の正確さ・網羅性を自分で評価すること。
ここで動画を一度止めて、10分間取り組んでください

ヒント: チャンクサイズが小さいと検索精度は上がりますが、文脈が切れやすくなります。大きいとノイズが増えます。テスト質問は「複数の段落にまたがる情報を必要とする質問」が比較しやすいです。

講師の解答例を見る
【検証手順】 1. Difyのナレッジベースで同じPDFを3回インポート(KB_256, KB_512, KB_1024) 2. 各ナレッジベースのチャンクサイズ設定: - KB_256: チャンクサイズ256, オーバーラップ50 - KB_512: チャンクサイズ512, オーバーラップ100 - KB_1024: チャンクサイズ1024, オーバーラップ200 3. テスト質問(3問): Q1: 「返品ポリシーの条件と手順を教えてください」(単一セクション) Q2: 「配送料金と配送日数の関係を教えてください」(複数セクション) Q3: 「会員ランクごとの特典の違いを一覧で教えてください」(テーブル情報) 【典型的な結果パターン】 - 256: Q1は正確だがQ2は文脈切れで不完全、Q3はテーブルが分断 - 512: 3問ともバランスよく回答(多くのFAQドキュメントで最適) - 1024: Q3は完全だがQ1にノイズ混入(無関係な段落が含まれる)

解説ポイント: 最適なチャンクサイズはドキュメントの構造に依存します。FAQ形式なら256-512、マニュアル形式なら512-1024が目安。実務では必ずテスト質問セットで検証してから本番に適用してください。

Review Hands-on B -- 30min

復習ハンズオン B: RAG付きワークフロー

Section 04-05の知識を組み合わせ、「質問 → ナレッジ検索 → LLM回答 → フォーマット出力」のワークフローを構築します。

課題: RAG付きワークフローの統合構築 30min
成果物: ナレッジベース検索→LLM回答→テンプレートフォーマットの一気通貫ワークフロー

手順

  1. Difyで新しいワークフローを作成してください(2min)
  2. 以下の構成でノードを配置してください(15min)
    • 開始ノード: テキスト入力変数 question
    • ナレッジ検索ノード: Sec05で作成したナレッジベースを接続
    • LLMノード: 検索結果を文脈として質問に回答
    • テンプレートノード: 回答をレポート形式にフォーマット
    • 終了ノード: フォーマット済み回答を出力
  3. テンプレートノードに以下を設定してください
## FAQ回答レポート **質問:** {{question}} **回答:** {{llm_answer}} **検索ヒット数:** {{search_count}}件 --- このレポートはAIが自動生成しました。内容の正確性は確認の上ご利用ください。
  1. 5つの質問でテスト実行してください(8min)
  2. うち1つは「ナレッジベースに存在しない質問」を投げ、適切に処理されるか確認してください(5min)
Section 06 -- 60min(講義25 + ハンズオン35)

外部連携

Difyの3つの外部連携方式

Webhook

外部サービスからDifyを呼び出す / Difyから外部に通知する仕組み。LINE BotやSlack Botの構築で使用します。

HTTP Requestノード

ワークフロー内から外部APIにリクエストを送信。Google Sheets API、Slack API、社内APIなど任意のREST APIを呼び出せます。

Dify API

Dify自体がAPIを公開しており、外部プログラムからチャット実行やワークフロー実行を呼び出せます。curlやPythonスクリプトで統合可能。

連携パターン

パターン方向仕組み用途例
LINE → Dify → 回答外部 → DifyWebhook受信LINE Bot経由のFAQ回答
Dify → Slack通知Dify → 外部HTTP Request / Webhook送信処理完了通知、アラート
Dify → Google SheetsDify → 外部HTTP Request (Sheets API)回答ログの自動記録
外部アプリ → Dify API外部 → DifyREST API自社アプリへのAI統合

API認証とセキュリティ

Dify APIではAPIキーによる認証が必須です。キーは「設定」→「APIキー」で生成でき、漏洩した場合は即座にローテーション(再生成)してください。外部APIを呼び出す際も、APIキーをハードコードせずDifyの「環境変数」機能を使って管理することを推奨します。

レート制限に注意
Dify APIにはレート制限があります(クラウド版のデフォルトは100リクエスト/分程度)。大量のリクエストを送る場合はキューイングやリトライロジックの実装を検討してください。
ハンズオン: 外部連携の実践 35min
目標: Dify APIを使った外部連携と、HTTP Requestノードによる外部API呼出しを体験する

演習1: Dify APIでチャットを実行(10min)

  1. Sec03で作成したチャットボットの「APIアクセス」画面を開いてください
  2. APIキーを生成してください
  3. 以下のcurlコマンドでチャットを実行してください(APIキーとURLは自分のものに置き換え)
curl -X POST 'https://api.dify.ai/v1/chat-messages' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "inputs": {}, "query": "パスワードを変更する方法を教えてください", "response_mode": "blocking", "user": "test-user-001" }'
  1. JSON形式の応答が返ることを確認してください
  2. response_mode"streaming" に変更し、ストリーミング応答を確認してください

演習2: HTTP Requestノードで外部API呼出し(10min)

  1. Sec04で作成したワークフローを複製してください
  2. LLMノードの後にHTTP Requestノードを追加してください
  3. テスト用の公開API(JSONPlaceholder)を使います
URL: https://jsonplaceholder.typicode.com/posts/1 メソッド: GET ヘッダー: なし
  1. HTTP Requestの結果をテンプレートノードで整形して出力してください
  2. テスト実行し、外部APIのデータがワークフロー内で取得・加工されることを確認してください

演習3: Webhook受信の設定(10min)

  1. Difyの「APIアクセス」画面でWebhook URLを確認してください
  2. curl または webhook.site を使ってWebhookの送受信をテストしてください
  3. 送信側のペイロード形式とDify側の受信データの対応を確認してください

演習4: 連携テスト(5min)

  1. 演習1-3で構築した連携が正常に動作していることを確認してください
  2. エラーが発生した場合はDifyのログを確認し、原因を特定してください

参考リンク

Section 07 -- 55min(講義20 + ハンズオン35)

条件分岐と高度なワークフロー

質問分類 → 分岐 → 専門回答

ユーザーの質問を最初のLLMで「カテゴリ分類」し、その結果に応じて専門的なLLMノードに振り分ける設計パターンです。カスタマーサポートで「技術質問」「料金質問」「一般質問」を自動振り分けする場面を想像してください。各分岐先のLLMには専門のプロンプトとナレッジベースを設定できるため、汎用プロンプト1本で対応するより回答精度が大幅に向上します。

マルチステップ処理

1つの入力を複数のLLMで段階的に処理する手法です。例えば「長文の要約 → 英語翻訳 → 校正」という3段階。各ステップに専門のプロンプトを設定し、前段の出力を次段の入力にする。Sec04のワークフローノード連結の応用版です。

イテレーション(ループ処理)

Difyのイテレーションノードは、リスト型データの各要素に対して同じ処理を繰り返します。10個のFAQ質問を一括生成する、5つの文書を順に要約する、といった場面で活用します。

エラーハンドリング

ワークフロー実行中にLLMの応答が空だったり、HTTP Requestが失敗した場合の代替フローを設計する必要があります。条件分岐でエラー判定を行い、リトライやフォールバック応答に分岐させます。

ハンズオン: 高度なワークフロー構築 35min
目標: 質問分類、マルチステップ処理、エラーハンドリングを実装する

演習1: 質問を3カテゴリに自動分類(15min)

  1. 新しいワークフローを作成してください
  2. 以下の構成でノードを配置してください
    • 開始 → LLM(分類) → 条件分岐 → 3つのLLM(各カテゴリ専用) → 終了
  3. 分類用LLMに以下のプロンプトを設定してください
以下の質問を3つのカテゴリのいずれかに分類してください。 カテゴリ名のみを出力してください。 カテゴリ: - 技術: ソフトウェア、ハードウェア、設定、エラーに関する質問 - 料金: プラン、請求、支払い、解約に関する質問 - 一般: その他すべての質問 質問: {{#start.user_input#}}
  1. 条件分岐ノードで、分類結果に応じて3つのLLMに振り分けてください
  2. 各LLMに専門的なプロンプトを設定し、テスト実行してください

演習2: マルチステップ処理(10min)

  1. 新しいワークフローを作成してください
  2. 以下の3段階パイプラインを構築してください
    • LLM1: 入力テキストを200文字に要約
    • LLM2: 要約を英語に翻訳
    • LLM3: 翻訳の文法チェックと校正
  3. 各ステップの出力が次のステップに正しく渡されることを確認してください
  4. 日本語の長文を入力し、最終出力が校正済みの英訳になることを確認してください

演習3: エラーハンドリング付きワークフロー(10min)

  1. 演習1のワークフローを複製してください
  2. 分類LLMの出力が「技術」「料金」「一般」のいずれでもない場合の条件分岐を追加してください
  3. エラー時のフォールバックとして「申し訳ありません。質問を分類できませんでした。もう一度、具体的にお聞かせください。」を返す終了ノードを追加してください
  4. 意図的に分類しにくい質問(例: 「あああ」)を投げてフォールバックが動作することを確認してください
Section 08 -- 60min(講義25 + ハンズオン35)

エージェントモード

エージェントモードとは

ワークフローはあらかじめ人間がノードの順序を設計しますが、エージェントモードではAIが「どのツールをどの順番で使うか」を自律的に判断します。「今週のAIニュースを調べて要約して」と指示すると、AI自身がWeb検索ツールを選択→検索結果を取得→要約を生成、という一連の手順を自動で実行します。

ビルトインツール

ツール機能用途例
Web検索インターネット上の情報を検索リアルタイム情報の取得
計算機数値計算見積もり、統計計算
コード実行Python/JSコードを動的に実行データ加工、CSV解析
画像生成DALL-E等での画像生成アイキャッチ、イラスト
WikipediaWikipedia記事の検索・取得事実確認、背景調査

カスタムツール

OpenAPI(Swagger)仕様でAPIを定義し、Difyに「カスタムツール」として登録できます。社内APIや独自サービスのAPIをツール化すれば、エージェントが自律的にそれらを呼び出してタスクを遂行します。JSON Schemaでパラメータを定義するだけでDifyが自動的にツール呼出しのインターフェースを生成します。

カスタムツールのOpenAPI仕様書の書き方

カスタムツールの定義に必要なOpenAPI(Swagger)仕様の最小構成例です。この形式でJSONを書いてDifyに登録すれば、エージェントがAPIを呼び出せるようになります。

{ "openapi": "3.0.0", "info": { "title": "社内在庫API", "version": "1.0.0", "description": "社内の在庫管理システムから商品情報を取得するAPI" }, "servers": [ { "url": "https://api.example.com/v1" } ], "paths": { "/products/{productId}": { "get": { "operationId": "getProduct", "summary": "商品IDから在庫情報を取得する", "description": "商品の名前、在庫数、価格、最終入荷日を返す。在庫確認や発注判断に使用する。", "parameters": [ { "name": "productId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "商品ID (例: PROD-001)" } ], "responses": { "200": { "description": "商品情報", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "stock": { "type": "integer" }, "price": { "type": "number" }, "lastRestocked": { "type": "string", "format": "date" } } } } } } } } } } }

descriptionフィールドが特に重要です。LLMはdescriptionを読んで「このツールをいつ使うか」を判断します。「在庫を確認したいときに使う」「商品の価格を調べたいときに使う」など、利用場面を具体的に書いてください。

推論戦略の比較

Function Calling

LLMのFunction Calling機能を使ってツールを選択。GPT-4o、Claude 3.5以降が対応。呼出しが正確でレイテンシが低い。

ReAct

Reasoning + Acting。思考(Thought) → 行動(Action) → 観察(Observation)のループで問題を解く。Function Calling非対応のモデルでも使用可能。

Tips: エージェントの適用判断
エージェントは万能ではありません。処理の順序が固定的で予測可能ならワークフローの方が安定します。「何をすべきかが事前に決まっていない」タスク、例えば調査・分析・問題解決のように状況に応じて手順が変わる場面でエージェントが真価を発揮します。

ハンズオン: エージェント構築 35min
目標: ビルトインツール/カスタムツールを使ったエージェントを構築する

演習1: ビルトインツールを使ったエージェント(10min)

  1. Difyで「アプリを作成」→「エージェント」を選択してください
  2. 以下のシステムプロンプトを設定してください
あなたは万能リサーチアシスタントです。 ユーザーの質問に対して、利用可能なツールを駆使して正確な情報を提供してください。 【行動ルール】 - まず質問の意図を理解する - 必要なツールを選択して情報を収集する - 収集した情報を日本語で簡潔にまとめる - 情報源を明記する
  1. 「ツール」セクションでWeb検索と計算機を有効にしてください
  2. プレビューで「日本の人口と面積から人口密度を計算してください」と質問してください
  3. エージェントがWeb検索→計算機の順でツールを使うことを確認してください

演習2: Web検索ツール付きリサーチエージェント(10min)

  1. 演習1のエージェントのプロンプトを強化してください
あなたは技術リサーチャーです。 ユーザーから調査テーマを受け取り、以下の手順で調査レポートを作成してください。 1. Web検索で最新情報を3件以上収集する 2. 収集した情報を整理して要約する 3. 信頼性の高い情報と不確かな情報を区別する 4. 以下のフォーマットでレポートを出力する 【レポートフォーマット】 テーマ: [調査テーマ] 調査日: [今日の日付] 要約: [3行以内] 詳細: - ポイント1: ... - ポイント2: ... - ポイント3: ... 情報源: [URLリスト] 信頼度: 高/中/低
  1. 「2026年のノーコードAIプラットフォームのトレンドを調査してください」と質問し、レポートが生成されることを確認してください

演習3: カスタムツール(OpenAPI)の定義と接続(15min)

  1. 以下のサンプルOpenAPI定義をダウンロードしてください
エージェントツール定義サンプル(.json)をダウンロード
  1. Difyの「ツール」→「カスタムツール」→「作成」で、ダウンロードしたJSONをペーストしてください
  2. テスト用APIとして JSONPlaceholder のエンドポイントを使います
  3. エージェントの「ツール」にカスタムツールを追加してください
  4. 「投稿ID 1の内容を取得してください」と質問し、エージェントがカスタムツールを呼び出すことを確認してください
カスタムツールが呼び出されない場合

ツールの description が不十分だとLLMがツールを選択しません。descriptionに「この情報が必要な場合に使う」「投稿データを取得する際に使用」など、具体的な用途を明記してください。また、パラメータのdescriptionも充実させると精度が上がります。

参考リンク

自走チャレンジ
テーマ: 講師がビルトインツールでエージェントを作ったのと同じ方法で、Web検索ツールと計算ツールの2つを組み合わせたリサーチエージェントを自力で構築してください。
条件: テスト質問「日本の2025年のGDPは何兆円で、前年比何%成長か?」で動作確認。エージェントがWeb検索で数値を取得し、計算ツールで成長率を算出する流れになること。
ここで動画を一度止めて、7分間取り組んでください

ヒント: エージェントのシステムプロンプトに「まずWeb検索で最新データを取得し、次に計算ツールで数値を算出してください」と手順を明記すると、ツールの使い分けが安定します。

講師の解答例を見る
【エージェント設定】 アプリタイプ: エージェント モデル: GPT-4o(または使用可能なモデル) 【システムプロンプト】 あなたは経済リサーチアシスタントです。 ユーザーの質問に対し、以下の手順で回答してください: 1. Web検索ツールで最新の統計データを取得する 2. 必要な場合は計算ツールで数値を算出する 3. 出典URLを明記した上で、簡潔に回答する 【ツール設定】 - Web検索: SerpAPI(ビルトイン)を有効化 - 計算: Calculator(ビルトイン)を有効化 【期待される動作】 1. エージェントがWeb検索で「日本 2025年 GDP」を検索 2. 前年のGDPデータも取得 3. 計算ツールで成長率 = (今年 - 前年) / 前年 * 100 を算出 4. 出典とともに回答を生成

解説ポイント: エージェントは「どのツールをいつ使うか」をLLMが判断します。システムプロンプトに手順を書いておくと判断精度が上がりますが、書きすぎると柔軟性が失われます。ツール2-3個の場合は手順を明記する方が安定します。

Review Hands-on C -- 30min

復習ハンズオン C: 統合ワークフロー

Section 06-08の知識を組み合わせ、外部連携+条件分岐+エージェント機能の統合ワークフローを構築します。

課題: 外部連携+分岐+エージェントの統合ワークフロー 30min
成果物: 質問分類→カテゴリ別処理→エージェントフォールバック→HTTP通知の統合ワークフロー

手順

  1. 新しいワークフローを作成し、以下の構成を構築してください(20min)
    • 開始: テキスト入力
    • LLM(分類): 「FAQ」「技術調査」「その他」に分類
    • 条件分岐: 分類結果で振り分け
    • FAQ分岐: ナレッジベース検索 → LLM回答
    • 技術調査分岐: エージェントモード(Web検索ツール)で調査
    • その他分岐: 汎用LLMで回答
    • テンプレート: 共通フォーマットで出力整形
    • HTTP Request: 処理完了通知(webhook.siteにPOST)
    • 終了: フォーマット済み回答を返す
  2. 3種類の質問でテスト実行してください(10min)
    • FAQ質問: 「有給休暇の申請方法は?」
    • 技術調査: 「Difyの最新バージョンの新機能を調べてください」
    • 一般質問: 「お疲れ様です」
構成のヒント

ノード数が多いので、まずFAQ分岐だけ動作させ、次に技術調査分岐を追加、最後にHTTP通知を追加する段階的アプローチがおすすめです。全体を一度に作ろうとするとデバッグが困難になります。

Section 09 -- 45min(講義25 + ハンズオン20)

本番運用とセキュリティ

監視とログ

Difyはアプリごとに実行ログを自動記録します。各メッセージの入出力、使用トークン数、レイテンシ、エラーの有無をダッシュボードで確認可能。運用開始後に最初に見るべきは「エラー率」と「平均応答時間」の2つです。エラー率が5%を超えたらプロンプトかナレッジベースの見直しが必要。応答時間が5秒を超えるならモデルのダウングレードかワークフローの簡素化を検討します。

コスト管理

LLM APIのコストはトークン消費量に比例します。Difyのログからアプリごとのトークン消費量を集計できるため、月次でコスト予測が可能。GPT-4oとGPT-4o-miniの価格差は約30倍。分類や簡単な応答にはminiを使い、複雑な推論にのみ上位モデルを使う「モデルルーティング」がコスト最適化の定番手法です。

モデル入力(1Mトークン)出力(1Mトークン)用途の目安
GPT-4o$2.50$10.00複雑な推論、長文分析
GPT-4o-mini$0.15$0.60分類、簡易応答、フォーマット
Claude 3.5 Sonnet$3.00$15.00日本語品質重視、コード生成
Claude 3.5 Haiku$0.80$4.00高速応答、軽量処理

アクセス制御とバックアップ

チームメンバーの権限管理(管理者/編集者/閲覧者)、APIキーのローテーション(月1回推奨)、DSLエクスポートによるワークフローのバージョン管理。これらは運用開始前に設定を済ませてください。

セキュリティ対策

ハンズオン: 運用設定の実践 20min
目標: ログ確認、DSLバックアップ、アクセス制御、コスト見積もりを体験する

演習1: ログダッシュボードの確認(5min)

  1. これまで作成したアプリの「ログと注釈」画面を開いてください
  2. 過去の実行ログから、トークン消費量と応答時間を確認してください
  3. エラーが記録されているログがあれば、原因を特定してください

演習2: DSLエクスポートでバックアップ(5min)

  1. Sec07で作成した質問分類ワークフローを開いてください
  2. 「エクスポート」→「DSL」をクリックし、YAMLファイルをダウンロードしてください
  3. 別のワークスペースまたは別アプリとして「インポート」し、復元できることを確認してください

演習3: アクセス制御設定(5min)

  1. 「設定」→「メンバー」画面を確認してください
  2. メンバーの権限レベル(管理者/編集者/閲覧者)の違いを確認してください
  3. APIキー画面でキーの一覧を確認し、不要なキーがあれば削除してください

演習4: コスト見積もりシートの作成(5min)

  1. 以下のテンプレートをダウンロードしてください
Dify運用チェックリスト(.md)をダウンロード
  1. ログから取得した平均トークン消費量 x 想定リクエスト数/月 x 単価 でコストを見積もってください
  2. チェックリストの該当項目を記入してください

参考リンク

Section 10 -- 130min(講義10 + 実践120)

総合ハンズオン: 社内FAQ RAGチャットボット + Slack連携

このコースで学んだすべてを統合し、実務で即利用できる社内FAQシステムを構築します。ナレッジベースによるRAG検索、質問分類と分岐、エージェントモードのフォールバック、外部連携、監視設定まで。持ち帰れる「本番稼働レベルの成果物」を目指してください。

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
graph TD
  A["ユーザー質問
(Slack/LINE/Web)"] --> B["質問分類
(LLM)"] B -->|FAQ| C["ナレッジベース
検索(RAG)"] B -->|技術調査| D["エージェント
(Web検索)"] B -->|回答不可| E["エスカレーション
(人間へ転送)"] C --> F["LLM回答生成"] D --> F E --> G["通知
(Slack/メール)"] F --> H["回答品質チェック"] H -->|OK| I["ユーザーに回答"] H -->|NG| E I --> J["ログ記録"] G --> J
総合ハンズオンの全体アーキテクチャ
総合演習: 10ステップで本番レベルのFAQシステムを構築 120min
成果物: 社内FAQ RAGチャットボット + 質問分類 + エージェントフォールバック + 外部連携 + 監視設定

Step 1: 要件定義(10min)

以下の項目を決めてください。

ワークフロー設計シート(.md)をダウンロード

Step 2: FAQナレッジベース作成(15min)

  1. サンプルFAQデータ(Sec05でダウンロード済み)を使用してください。自分の業務のFAQがあればそちらを優先
  2. Difyの「ナレッジ」でナレッジベースを作成してください
  3. チャンク設定をカスタムに変更し、チャンクサイズ500、オーバーラップ50で設定してください
  4. 検索テストで5つの質問を試し、適切なチャンクがヒットすることを確認してください

Step 3: RAGチャットボット構築(15min)

  1. チャットボットを作成し、Step 2のナレッジベースをコンテキストに追加してください
  2. 以下のシステムプロンプトを設定してください
あなたは社内FAQアシスタントです。 【基本ルール】 - コンテキスト情報に基づいて正確に回答する - 推測や一般知識での補足はしない - 敬語で丁寧に対応する - 回答は300文字以内で簡潔に - 該当情報がない場合は正直に伝え、問い合わせ先を案内する 【回答フォーマット】 回答: [具体的な回答] 参照: [参照元のQ&A番号や文書名] 【エスカレーション】 回答できない場合: 「申し訳ございません。こちらの件はFAQに該当する情報がございませんでした。お手数ですが、[問い合わせ先]までお問い合わせください。」
  1. 5つのテスト質問で回答品質を確認してください

Step 4: 質問分類と分岐ワークフロー追加(15min)

  1. ワークフローアプリとして再構築してください(チャットボットからワークフローへ移行)
  2. 開始 → LLM(分類) → 条件分岐(FAQ/技術調査/一般/不明)→ 各処理ノード → テンプレート → 終了 の構成を作成してください
  3. FAQ分岐にはナレッジベース検索+LLM回答を配置してください

Step 5: エスカレーションフロー(10min)

  1. 条件分岐の「不明」カテゴリと、FAQ検索でヒットなしの場合のフォールバックを構築してください
  2. エスカレーション時にHTTP Requestノードで通知を送る設定を追加してください(webhook.siteでテスト)

Step 6: エージェントモードでWeb検索フォールバック(10min)

  1. 「技術調査」分岐にエージェントモード(Web検索ツール)を配置してください
  2. ナレッジベースで回答できない技術質問をWeb検索で補完する設計にしてください

Step 7: Slack/LINE連携設定(15min)

  1. Dify APIのエンドポイントとAPIキーを確認してください
  2. curl でAPI経由のチャットが動作することを確認してください
  3. Slack Incoming Webhook のURLをHTTP Requestノードに設定し、回答をSlackに通知する構成を作ってください(Slack未使用の場合はwebhook.siteで代替)

Step 8: テスト(10min)

以下の10質問で精度チェックを行ってください。

  1. 有給休暇の申請方法は?(FAQ)
  2. リモートワークのルールを教えてください(FAQ)
  3. 経費精算の締め日は?(FAQ)
  4. Difyの最新バージョンの新機能は?(技術調査)
  5. お疲れ様です(一般)
  6. 社長の名前を教えてください(FAQ - 存在しない情報)
  7. パスワードを忘れました(FAQ)
  8. LangChainとDifyの違いは?(技術調査)
  9. あああ(不明 - エスカレーション)
  10. 来週の天気は?(一般 - FAQに無い)

Step 9: 監視・ログ設定(10min)

  1. アプリのログダッシュボードを確認してください
  2. Step 8のテスト実行のログから、トークン消費量と応答時間を確認してください
  3. エラーが発生したログを確認し、原因を特定してください

Step 10: ドキュメント整備(10min)

  1. 以下のテンプレートに成果物をまとめてください
RAGチューニングチェックリスト(.md)をダウンロード API連携設定テンプレート(.md)をダウンロード

記録すべき項目:

Tips: 研修後の運用
この成果物はそのまま社内で運用開始できます。週1回ナレッジベースのFAQを更新し、月1回ログを分析して回答品質を改善するサイクルを回すことで、継続的に精度が向上します。最初から完璧を目指す必要はありません。使いながら育てるのが正攻法です。

最終チェック

Q3. RAGの検索精度を上げるために最初に調整すべき設定は?

正解: B。チャンクサイズが大きすぎると検索精度が落ち、小さすぎると文脈が不足します。Top-Kとの組み合わせで最適値を探ってください。

Q4. エージェントモードとワークフローの使い分けで正しいのは?

正解: B。ワークフローは事前設計された処理を確実に実行し、エージェントはタスクの不確実性が高い場面で自律的に判断します。