近年、ChatGPTをはじめとする生成AI(大規模言語モデル:LLM)の活用が企業内で急速に広がっています。しかし、これらのAI技術を実際のビジネスで活用しようとすると、専門的な知識や開発スキルが必要となり、多くの企業で導入の障壁となっているのが現状です。

そこで注目されているのが、プログラミング不要で生成AIアプリケーションを開発できる「Dify」というプラットフォームです。本記事では、Difyを使って社内向けQAチャットボットを作成する方法を、できるだけ詳しく解説していきます。

Difyとは

基本的な特徴と仕組み

Difyは、生成AI(LLM)を活用したアプリケーションを、プログラミングなしで開発できるオープンソースのプラットフォームです。通常、生成AIを活用したアプリケーションを開発するには、APIの理解やプログラミング、インフラの知識が必要です。しかしDifyを使えば、ブラウザ上の操作だけで、以下のようなアプリケーションを簡単に作成できます。

  • 社内向けのナレッジベース検索チャットボット
  • 文章の要約や翻訳を行うテキストジェネレーター
  • 定型的なタスクを自動化するAIエージェント
  • 複数のAI処理を組み合わせた高度なワークフロー

提供形態と選択肢

Difyには2つの利用方法があります。

クラウドサービスとして利用

  • すぐに利用開始可能
  • インフラの管理不要
  • 月額料金が発生

セルフホストで利用

  • 完全無料で利用可能
  • データを自社で管理可能
  • インフラの準備と管理が必要

活用のメリット

Difyを活用することで、以下のようなメリットが得られます:

  • 開発コストとリソースの大幅削減
    • プログラミング不要でAIアプリケーションを開発可能
    • 既存のLLMを簡単に統合
    • 開発期間の短縮
  • 柔軟なカスタマイズと拡張性
    • 様々なビジネスニーズに対応可能
    • 独自の知識ベースを簡単に追加
    • APIを通じた外部システムとの連携
  • 運用管理の容易さ
    • 直感的な管理画面でのモニタリング
    • リアルタイムでの動作確認と調整
    • コンテキストの追加や更新が簡単

開発環境のセットアップ

必要な環境と前提知識

Difyをセルフホストで利用する場合、以下の環境が必要です。

  • Docker:コンテナ化されたアプリケーションを実行するためのプラットフォーム
  • Git:ソースコードのバージョン管理システム
  • 基本的なコマンドライン操作の知識

特にDockerについては、インストールされていない場合、以下の手順で準備する必要があります:

  • Docker Desktopのインストール
    • Docker公式サイトからインストーラーをダウンロード
    • OSに応じたインストール手順に従って設定
  • Dockerの動作確認
    • ターミナルでdocker --versionを実行し、バージョン情報が表示されることを確認

インストール手順の詳細

  • ソースコードの取得
git clone git@github.com:langgenius/dify.git

このコマンドで、DifyのソースコードをGitHubからローカル環境にダウンロードします。

  • 設定ファイルの準備
cd dify/docker
cp .env.example .env

.env.exampleファイルを.envとしてコピーします。必要に応じて、このファイル内の設定値を編集できます。

  • Dockerコンテナの起動
docker compose up -d

このコマンドでDifyの実行に必要なDockerコンテナが起動します。-dオプションにより、バックグラウンドで実行されます。

  • 初期セットアップの実行
  • ブラウザでhttp://localhost/installにアクセス
  • 画面の指示に従って管理者アカウントを作成
  • 基本設定を完了

ここまでの手順で、Difyの基本的な開発環境が整います。

社内QAチャットボットの作成手順

プロジェクトの作成とアプリケーションタイプの選択

Difyにログインすると、最初に表示されるダッシュボード画面から新規プロジェクトを作成できます。以下の手順で進めていきましょう。

新規プロジェクトの作成

  • ダッシュボードの「新規作成」ボタンをクリック
  • 表示されるモーダルで「チャットボット」を選択

基本情報の設定

  • タイプ:チャットボット
    • 質問応答形式でユーザーとやり取りする形式を選択します
  • オーケストレーション:基本
    • 複雑なワークフローが不要な場合は「基本」で十分です
  • 名前:社内ボット(任意の名前を設定可能)
    • 後から変更することもできます

これでプロジェクトが作成され、チャットボットの設定画面に移動します。

LLMプロバイダーの設定と接続

チャットボットが実際に動作するためには、LLM(大規模言語モデル)との接続が必要です。今回は最も一般的なOpenAIを例に説明します。

OpenAI APIキーの準備

  • OpenAIのアカウントを作成
  • OpenAIのダッシュボードからAPIキーを取得
  • APIキーは安全に管理し、外部に漏洩しないよう注意

プロバイダー設定の手順

  • Model Type: LLM を選択
  • Model Name: gpt-4o-mini を選択
    • より高性能なgpt-4や、経済的なgpt-3.5-turboも選択可能
  • API Key: 取得したAPIキーを入力

接続テストの実施

  • 「テスト」ボタンをクリックして接続を確認
  • 正常に接続されると、緑のチェックマークが表示されます

そうすると、プロバイダーが設定され、チャットボットが使えるようになります。

知識ベースの構築:コンテキストの追加

チャットボットが社内の情報に基づいて回答できるよう、知識ベースを構築します。Difyでは、この知識ベースのことを「コンテキスト」と呼びます。

対応フォーマットと取り込み方法

Difyは以下のような多様なフォーマットからコンテキストを取り込むことができます:

  • ファイルアップロード
    • テキストファイル(.txt)
    • Markdownファイル(.md)
    • PDFファイル(.pdf)
    • HTMLファイル(.html)
    • Excelファイル(.xlsx, .xls)
    • Wordファイル(.docx)
    • CSVファイル(.csv)
  • Notionからの同期
  • Webサイトからの取り込み

今回はMonacaのPDFファイルを指定します。

インデックス設定の最適化

コンテキストの取り込み時には、以下の設定を適切に行うことで、より精度の高い回答を得ることができます:

テキスト前処理の設定

テキストの前処理では、チャンク数や識別子などの設定を行います。基本的には自動で良いですが、必要があれば指定します。

  • チャンクサイズ:
    • デフォルト:500
    • 長すぎると検索精度が下がり、短すぎると文脈が失われる
    • 日本語の場合、300-500程度が推奨
  • オーバーラップ:
    • デフォルト:50
    • チャンク間の重複を設定
    • 文脈の連続性を保つために重要

インデックスモードの選択

インデックスモードは「高品質」と「経済的」が選択できます。高品質の場合、ユーザーの入力に対してもLLMを利用します。経済的を選んだ場合には、オフラインのベクトルエンジンを利用します。日本語の場合、インデックス精度が悪い場合もあるので、高品質を選ぶのが良さそうです。

  • 高品質モード:
    • LLMを使用した高精度な検索
    • より正確な回答が可能
    • コスト高め
  • 経済的モード:
    • オフラインベクトルエンジンを使用
    • 応答が速い
    • コスト低め

検索方式の設定

検索設定では「ベクトル検索」「全文検索」「ハイブリッド検索」のいずれかが選択できます。基本はベクトル、全文検索の両方を用いるベクトル検索が良いようです。

  • ベクトル検索:意味的な類似性で検索
  • 全文検索:キーワードベースの検索
  • ハイブリッド検索:両方を組み合わせた検索(推奨)

チャットボットの動作確認とテスト

作成したチャットボットの動作を確認し、必要な調整を行います。

まず、コンテキストを指定せずに「Monacaの料金体系について教えてください」と質問します。

結果は以下のように、料金体系は分かりませんと返ってきます。

続いてコンテキストを指定します。同様の質問を行うと、PDFファイルに記載されている情報が返ってきます。

まとめ

本記事では、Difyを使用した社内QAチャットボットの作成から運用まで、詳細に解説してきました。Difyの特徴である:

  • ノーコードでの開発
  • 柔軟なカスタマイズ性
  • 充実した管理機能
  • APIによる拡張性

これらの要素を活用することで、プログラミングの専門知識がなくても、高度な生成AIアプリケーションを開発・運用することが可能です。

次回は、より具体的なユースケースとして、DifyのAPIを活用したチャットアプリケーションの開発について、実装手順を交えながら解説する予定です。