ElcamyTECH
Articles
Dify

【Difyで作るシリーズ 2】会社情報Q&Aチャットボット

Tech生成AIDifyDify2024/11/08

更新日: 2025-07-10

はじめに

Dify というサービスを聞いたことがあるけれど、「何ができるかわからない」、「どう使うのかわからない」などの理由で使ったことがない方は多いのではないでしょうか。

そのような方のために、「Dify で何ができるのか?」や Dify を使った活用事例を紹介する記事をシリーズ化していきます。

今回は第2回目で、会社のWebページをもとに、会社情報について回答するチャットボットを作ります。

メモ

この記事の対象者

  • Dify という言葉を聞いたことがあるが、何ができるのかがわからない方
  • Dify を業務に取り入れたいと検討している方
メモ

事前準備

  • Dify へのサインアップ
  • OpenAI APIまたはGemini APIのAPIキーの取得
    • Gemini APIの場合
      1. ここにアクセスし、「APIキーを作成」を選択します。
      2. 「新しいプロジェクトでAPIキーを作成」を押します。
      3. APIキーをコピーします。
        • OpenAI APIの場合
        • サインアップした後、こちらからAPIキーを作成し、保存します。
        • APIキーのセットアップ

環境

  • Dify v1.15.1(2025年07月10日時点)フリープラン

作成するAIアプリの概要

完成イメージ

まずは、今回作成するアプリの完成イメージについてです。 このアプリは、ブラウザからAIアプリにアクセスして使用します。

メモ

イメージ

  1. 「Talk to Bot」欄に質問したい内容を入力すると、回答が返ってきます。

  2. 左側サイドバーに会話履歴を残すことができます。

    image

作成するワークフロー

上記のアプリを構築するためにワークフローを作る説明をします。

メモ

ワークフローとは 一つ一つの処理を小さな**ブロック(ノード)**としてつなぎ合わせて、一連のプロレスを自動化する機能です。

今回作成するワークフローのDifyの画面です。

image このワークフローは、下記のブロックで構成されます。

flowchart LR
    A[開始] --> B[知識取得]
    B[知識検索] --> Z[LLM]
    Z --> C{IF/ELSE}
    C -- IF --> D[LLM]
    C -- ELSE --> E[テンプレート]
    D --> F[変数集約器]
    E --> F
    F --> G[回答]
 
  1. 開始:ユーザーの質問を受け付けるノードです。
  2. 知識取得:ユーザーの質問に対して,事前に取得したデータから関連する情報を検索します。
  3. LLM,IF/ELSEで質問が会社情報に関連しているかどうかを判定します。
  • 関連ありの場合:取得したデータをもとに,LLMが回答を生成します。
  • 関連なしの場合:設定したテンプレートを使用して対応します。
  1. 変数集約器:変数をまとめて、後続の処理を簡素化します。
  2. 回答:最終的な回答をユーザーに出力します。

作業手順

ここからは、ワークフロー構築の手順について説明します。

手順

  1. ワークフローの新規作成
  2. ナレッジの登録作業
  3. ワークフロー作成画面上での作業
  4. ワークフローの動作確認

1. ワークフローの新規作成

  1. 最初の画面から「最初から作成」を選択します。

    image

  2. 「チャットボット」を選択し、「アプリのアイコンと名前」を記述してから「作成する」を選択します。

    image

2. ナレッジの登録作業

回答生成に使う「ナレッジ」の登録をします。

  1. 「ナレッジ」を選択し、「ナレッジを作成」を選択します。

    image

  2. 「ウェブサイトから同期」を選択し、「Firecrawl」を選択後、「設定」を選択します。

    image

  3. 「設定」を選択します。

    image

    image

  4. 「firecrawl.devからAPIキーを取得する」を選択します。

    image

    image

  5. 遷移先ページでサインアップした後、「API Keys」ページのAPI Keyを取得します。

    image

  6. Difyのページに戻り「API Key」を入力、「保存」を選択します。

    image

  7. **「ナレッジ」**ページに戻り、参照したいWebページのURLを入力し、「実行」を選択します。 今回は、https://elcamy.comを入力します。 (Difyのフリープランを使用している方は、「オプション」でクロール制限を1にしておきましょう。)

    image 完了したら、「次へ」を選択します。

    image

  8. **「保存して処理」**を選択します。 ナレッジデータのチューニングができますが、今回はデフォルトのままにします。 この時の埋め込みモデルは、「Gemini」のモデル系統を使うのがおすすめです。

    image

    image

  9. 処理が完了したあと、ナレッジベースがきちんとできているか確認をしましょう。 (レートエラーが起きてしまった場合は、埋め込みモデルを変更することによって正常に処理される可能性があります。)

    image ワークフローの画面に戻って、ワークフローを作成します。

3. ワークフロー作成画面上での作業

  1. 「開始」ノードと「LLM」ノードの間の「+」ボタンを押します。**「知識検索」**を選択します。

    image

    :::message

    「知識検索」ノードとは ユーザーの質問に関連する情報を、「ナレッジ」で取得してきたデータ検索し、それを元にAIが回答を生成できるようにする機能です。

    :::

「ナレッジ」ノードの「+」ボタンを押した後、先程追加した知識(画面では「elcamy」)を選択し、「追加」を選択します。

image

  1. 「LLM」ノードを選択し、「コンテキスト」中の「知識検索」の「result」を選択します。

    :::message

    「LLM」ノードとは AIがユーザーの質問に基づいて会話や生成、分類など多様なタスクを処理するための機能を持つ機能です。

    :::

「SYSTEM」欄の「{x}」ボタンを押し、「コンテキスト」を選択します。

image 確認のため一度実行します。 「プレビュー」を選択し、任意の文章を入力します。

image 回答が返ってきました。 このままでもチャットボットとして機能しますが、以下のように取得した情報と関係のない質問にも回答してしまいます。

image そこで、取得した会社情報に関することのみ回答するよう設定します。

  1. 「知識検索」ノードと「LLM」ノードの間にまた別の「LLM」ノードを作成します。 (以下、このLLMノードを「LLM2」とする。)

    image 「LLM2」ノードには「知識検索」の内容と、質問者の内容が関連しているかどうかを判断してもらいます。以下の画像を参考にして「LLM2」ノードの中身を作ってみてください。 (この時の使用モデルには「Gemini 2.5 Flash」に設定すると迅速な解答がかえってきます。)

    image

  2. 「知識検索」ノードと最初に作成していた「LLM」ノードの間の「+」ボタンを押し、**「IF/ELSE」**を選択します。

    :::message

    「IF/ElSE」ノードとは 特定の条件に応じてチャットフローやワークフローを分岐させ、異なる処理を実行できる機能です。

    :::

    image 「条件を追加」を選択後、「LLM2」の「{x}text」を選択します。

    image 先ほどの「LLM」ノードでは、質問内容と取得した知識の関連性について「Yes」か「No」かで回答を出力しているため、条件式の意味は「LLMの出力のテキストにYesが含まれているか」となります。

  3. 「ELSE」の「+」ボタンを押し、**「テンプレート」**を選択します。

    :::message

    「テンプレート」ノードとは データやテキストを加工・変換して好きな形に整えるための機能です。

    :::

    image デフォルトで設定してある「入力変数」を削除します。「コード」欄に以下のように文章を入力します。

    申し訳ありませんが、その内容に関する情報がありません。
    

    image

  4. 「IF/ELSE」ノードの「IF」と「LLM」ノードをつなぎます。「LLM」ノードと「回答」ノードの間の「+」をクリックし、**「変数集約器」**を選択します。

    :::message

    「変数集約器」とは 複数ブランチの変数を一つにまとめて下流ノードで統一して利用できるようにする機能です。

    :::

    image 「テンプレート」ノードと「変数集約器」ノードをつなぎます。 「変数を代入する」の「+」ボタンを押し、「テンプレート」の「{x}output」と、「LLM」の「{x}test」を選択します。

    image

  5. **「回答」**ノードを選択し、既存の値を削除します。 「回答」の「{x}」ボタンをクリックし、「変数集約器」の「{x}output」を選択します。

    image 「プレビュー」を選択し、実行して確認します。

    image 以下のように、会社情報と関係ないことには回答しないようにすることもできました。

    image 以上でワークフローが完成しました。

4. ワークフローの 動作確認

  1. 「公開する」を選択し、「アプリを実行」選択します。

    image

  2. アプリで質問します。 無事に外部の情報を使った回答が返ってきました。

    image

応用

今回の記事では、弊社のホームページを使用しましたが、外部ナレッジのURLを変更すると、そのサイトに関するQ&Aチャットボットを作成することができます。例えば、自社のFAQページのURLを指定すれば、顧客対応ができるカスタマーサポートのチャットボットを作成することができます。

おわりに

今回の記事では、Difyを使ってホームページの情報をもとにユーザーの質問に回答するチャットボットのワークフローの作成手順を紹介しました。Difyのチャットボットを利用することで、用途に応じたAIチャットボットを作ることができます。 今後もDifyを活用したさまざまなユースケースを紹介していく予定です。ぜひ引き続きご覧ください。

関連記事

Elcamyについて

AI・データエンジニアリング・クラウドを中心に、技術で事業課題を解決しています。 お気軽にご相談ください。