
また同じ質問が来た...
あのドキュメントどこにあったっけ...
最新テクノロジーがクラウドベースのものが多くて、社内で使えない...
こんな課題を抱えているITエンジニアは少なくないはずです。社内のナレッジ管理や検索に悩みを抱えている方、特に高セキュリティ環境で働くエンジニアの方々にとって、効率的な情報活用は解決したい課題の一つだと思います。ChatGPTや、社内AIチャットなどで情報要約を行う場面が多くなり、大量の情報に目を通すことが嫌になってきてしまいますよね。
本記事では、ローカル環境で完結する高性能なナレッジ検索チャットボットを「Dify」を使って構築する方法を解説します。クラウドを使わずにオンプレミスで構築できるため、厳しいセキュリティ要件がある環境でも導入可能です。
社内ナレッジ検索の課題とDifyによる解決
多くの企業では、膨大な量のマニュアル、技術文書が日々蓄積されています。しかし、これらの情報を必要なときに素早く取り出せなければ、宝の持ち腐れです。
特にSIerや金融機関などの高セキュリティ環境では、以下のような課題があります。
- 社内ドキュメントが分散していて検索に時間がかかる
- 技術マニュアルの中から必要な情報を見つけるのが困難
- セキュリティポリシーの制約でクラウドサービスが使えない
- 機密情報を含むデータを外部に出せない
これらの課題を解決するのが「Dify」です。Difyはオープンソースのローカル完結型LLMアプリケーション開発プラットフォームで、クラウドに頼らずに高性能なナレッジ検索チャットボットを構築できます。
Difyとは?ローカル完結型チャットボット構築の強み
Difyは中国のLangGenius社が開発したオープンソースになります。公式には「LLMアプリケーション開発プラットフォーム」と位置づけられており、単なるチャットボットフレームワークではなく、より包括的なLLMアプリケーション構築環境を提供しています。
Dify公式サイトによれば、以下の特徴があります。
- オープンソース: コードが完全に公開されており、無料で利用可能
- ローカル完結型: オンプレミス環境で完全に動作可能
- ナレッジ検索機能: 独自のドキュメントを取り込み、検索できる機能
- 柔軟なLLM連携: OpenAI、Azure OpenAI、Anthropicなど様々なLLMと連携可能
- 日本語対応: 基本的なUIや機能が日本語にも対応
クラウド型のチャットボットサービスと比較した時のDifyの最大の強みは「ローカル完結型」で構築可能ということです。つまり、機密情報を外部に送信することなく、安全に利用できるため、厳格なセキュリティポリシーが求められる環境にも導入可能です。また、インターネット接続がない環境でも問題なく利用でき、導入後のランニングコストも低く抑えることができます。
詳細な機能や仕様については、Dify公式ドキュメントを参照することをお勧めします。
Windows環境でのDify構築手順
ここからは、Windows環境でWSL2を利用してDifyをローカル環境に構築する具体的な手順を解説します。WSL2とDockerを使うことで、Windowsでも簡単にLinux環境を構築でき、Difyを動作させることができます。
環境準備:WSL2のセットアップ(既にインストール済みの方は読み飛ばしてください)
まず、WSL2をインストールします。PowerShellを管理者権限で開き、以下のコマンドを実行します。
wsl --install
インストール完了後、再起動を求められるので再起動します。再起動後、Ubuntuが自動的に起動し、ユーザー名とパスワードの設定を求められるので設定します。
Ubuntuが起動したら、パッケージを最新にアップデートしておきましょう。
sudo apt update
sudo apt upgrade -y
Dockerのインストール(既にインストール済みの方は読み飛ばしてください)
WSL2上にDockerをインストールします。以下のコマンドを順に実行してください。
# 必要なパッケージのインストール
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Dockerの公式GPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Dockerのリポジトリを追加
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# パッケージリストを更新
sudo apt update
# Dockerをインストール
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Dockerサービスを起動
sudo service docker start
# 現在のユーザーをdockerグループに追加(sudoなしでdockerコマンドを実行できるようにする)
sudo usermod -aG docker $USER
# Docker Composeのインストール
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
一度ターミナルを閉じて再度開くか、以下のコマンドでグループの変更を反映させます:
newgrp docker
Difyのインストールと初期設定(ここからが本番)
Dockerのインストールが完了したら、Difyをインストールします。
# Difyのリポジトリをクローン
git clone https://github.com/langgenius/dify.git
# Difyのディレクトリに移動
cd dify/docker
# Difyを起動
docker-compose up -d
初回起動時には、必要なDockerイメージのダウンロードに時間がかかる場合があります。起動が完了したら、Webブラウザで「http://localhost:3000」にアクセスすると、Difyの管理画面が表示されます。
しかし、ここでアクセスができない事例が発生するようです。
私の環境でもアクセスできない状態になりました。
以下の内容で解決できましたので、対応してみてください。
vim docker-compose.yaml
以下を参考にyamlファイルを修正してみてください。
追加、修正点のみ記載をしておりますので、各自の環境に反映させてください。
services:
api:
ports:
- "5001:5001" #追加
web:
ports:
- "3000:3000" #追加
environment:
NEXT_PUBLIC_API_PREFIX: "http://localhost:5001" #追加
API_URL: "http://api:5001" #追加
APP_API_BASE_URL: "http://api:5001" #追加
#CONSOLE_API_URL: ${CONSOLE_API_URL:-} #コメントアウト
CONSOLE_API_URL: "http://localhost:5001" #追加
#APP_API_URL: ${APP_API_URL:-} #コメントアウト
APP_API_URL: "http://api:5001" #追加
初回アクセス時には、管理者アカウントの設定を求められるので、メールアドレスとパスワードを設定します。
ここでは適当なメールアドレスでも大丈夫ですが、次回以降のログイン時に入力が必要になりますので、メモを忘れないように注意してください。

Windows環境でのLLM構築手順(LM Studio)
LM Studioのダウンロードとインストール
- 公式サイトhttps://lmstudio.aiへアクセス
- ご利用のOS(私はWindows)に対応するインストーラーをダウンロード
- ダウンロードした
.exe
ファイルを実行し、インストールの実行
モデル(elyza-japanese-llama-2-7b-instruct)のダウンロードと起動
今回は日本語に特化している「elyza-japanese-llama-2-7b-instruct」を使います。
- 左メニューの「開発」を開き、上段の「読み込むモデルを選択」から「elyza-japanese-llama-2-7b-instruct」を選択
- Settingより、 "Enable OpenAI Compatible API Server" をON
- "Status: Stopped" のトグルをONにして起動
起動後に、右側のReachable atに接続先URLが表示(ポート1234はデフォルト)

Dify設定 - ナレッジベースへのドキュメント登録方法
Difyをインストールしたら、次はナレッジベースにドキュメントを登録していきます。
今回は検証用として、Python3.13のドキュメントのPDFを使って、検証を進めてみようと思います。
実際にDLすると、そこそこのボリュームがあるPDFが35ファイル・・・これは普通に読んでいくのはつらい。
ナレッジの作成
- Difyの管理画面にログインします
- 上段のメニューから「ナレッジ」を選択します
- 「ナレッジを作成」ボタンをクリックします
- 「テキストファイルからインポート」を選択し、先ほどDLしたPythonのPDFを取り込み、次へ進みます
- 「チャンク設定」、「インデックス方法」はデフォルトのまま、「転置インデックス」は6で設定してください
- 「保存して処理」ボタンをクリックする事で作成が完了します
- 最後に、上段メニューの「ナレッジ」タブより、対象のナレッジの名称を変更しましょう



Chatアプリの作成
ナレッジを作成したら、チャットアプリを作成します。
- 上段メニューの「スタジオ」より、「チャットボット」を選択し、「最初から作成」を選択します
- 「チャットボット」を選択し、「アプリのアイコンと名前」を入力し、作成します


アプリにナレッジを連携させ、デバッグ実行を行います
以下の手順を実行する事で、デバッグ実行を行うことができます。
- アプリ編集画面の「コンテキスト」より、作成したナレッジを選択します
- 右側のLLMプロバイダ設定から「モデルプロバイダー」を選択します
- 「OpenAI-API-compatible」を選択し、新しいプロバイダーを追加します
- 以下の情報を入力します
- Model Name:任意の名前(例:
lm-studio
) - API Key:空白のまま
- API endpoint URL:
http://<WindowsのIPアドレス>:1234/v1
(LM StudioのReachable atに記載されていた接続先URL) - Completion mode:
Chat
- Model context size:
2048
- Upper bound for max tokens:
2048
- Function calling:
Not Support
- Streaming function calling:
Support
- Vision Support:
Not Support
- Delimiter for streaming results:
\n\n
- Model Name:任意の名前(例:


QAテスト
実際に質問をして今回取り込んだPDFがRAGの位置づけで動作してくれるのか見てみましょう。
質問内容にもよりますが、しっかりと取り込んだPDFをベースに回答してくれています。

実際にやってみた感想:初期状態での課題と展望
実際にDifyを構築して使ってみた感想としては、セットアップ自体は想像以上に簡単でした。Dockerを使った環境構築は多少のLinuxの知識が必要ですが、手順通りに進めれば大きな問題なく導入できます。
一方で、初期状態での検索精度にはやや課題があります。特に以下の点が気になりました。
- 英語コンテンツと比べて日本語コンテンツの検索精度がやや劣る
- 専門的な技術用語の理解が不十分な場合がある
- ドキュメントの形式によっては適切に分割されないケースがある
これらの課題は、他のモデルの活用や、内部パラメータで調整が可能なので、次回以降の記事で検証してみようと思います。
運用上の注意点とよくある質問
運用上の注意点
Difyを導入する際の注意点をいくつか紹介します:
- アクセス制限: 社内の誰でもアクセスできる状態にするのではなく、適切なアクセス制限を設けましょう。特に機密情報を含むナレッジベースには、必要な人だけがアクセスできるようにすることが重要です。
- 利用促進: せっかく構築しても使われなければ意味がありません。社内での利用を促進するために、成功事例を共有したり、使い方のワークショップを開催したりしましょう。
- 社内ルール: どのようなドキュメントをナレッジベースに登録するか、どのような質問をしてよいかなど、社内でのルールを明確にしておきましょう。
よくある質問(FAQ)
Q: Difyの運用に必要なサーバースペックはどの程度ですか?
A: 最小構成では4GBのRAMと2コアのCPUがあれば動作しますが、快適に使用するには8GB以上のRAMと4コア以上のCPUをお勧めします。ナレッジベースのサイズが大きくなると、より多くのリソースが必要になります。
Q: 商用利用は可能ですか?
A: Dify自体はオープンソースで商用利用可能です。ただし、連携するLLM(OpenAIなど)の利用条件には別途従う必要があります。次回紹介する商用利用可能なオープンソースLLMを利用すれば、完全に商用利用可能な環境を構築できます。
Q: ドキュメントの更新はどのように反映されますか?
A: ナレッジベースのドキュメントを更新する場合は、古いドキュメントを削除して新しいドキュメントをアップロードする必要があります。現状では差分更新の機能はありません。
Q: 英語以外の言語(日本語など)のドキュメントも処理できますか?
A: 基本的にはマルチ言語対応していますが、英語以外の言語での検索精度は連携するLLMの性能に依存します。日本語文書を扱う場合は、次回紹介する日本語対応LLMの導入をお勧めします。
次回予告:社内利用を想定したアプリ化と展開方法に関して(応用編)
次回の記事(応用編)では、社内利用を想定したアプリ化と展開方法に関してまとめていきます。現状では、動作の確認がとれている状態なので、これから実際に活用するまでの流れを考察していく予定です。
まとめ:ローカル完結型チャットボットで業務効率化を
本記事では、Difyを使ったローカル完結型のナレッジ検索チャットボットの構築方法を解説しました。高セキュリティ環境でも利用できるオンプレミスのチャットボットは、特にSIerや金融機関などの機密情報を扱う企業において大きな価値を発揮します。
是非Difyを導入して、社内のナレッジ共有と業務効率化を推進してみてください。クラウドサービスを使えない環境でも、利用するための方法などは次回の記事でまとめていきます。
コメント