はじめに
この記事では、Difyをコンテナとして導入し、ローカルで動作するLLM(Large Language Model)をモデルプロバイダとして設定する方法を解説する。また、Difyでクエリとしてファイルを渡す設定についても触れる。
Difyの導入
Difyを使用する際、最も簡単な方法はDockerコンテナを利用することである。以下の手順で導入する。
1. DockerとDocker Composeのインストール
Difyをコンテナとして動作させるには、あらかじめDockerとDocker Composeをインストールしておく必要がある。インストール方法は公式ドキュメントを参照する。
2. Difyコンテナの起動
以下のコマンドを使用してDifyを起動する。
git clone https://github.com/langgenius/dify.git
cd dify
docker-compose up -d
これで、Difyの各サービスが起動する。ブラウザでhttp://localhost/install
にアクセスし、管理者アカウントの設定を行う。
ローカルLLMをモデルプロバイダとして登録する
ローカルで稼働するOpenAI互換APIを持つLLMをDifyに登録する手順は以下の通りである。
- Difyの設定画面にアクセス
Difyの管理画面で、左側のメニューから「設定」を選択し、「モデルプロバイダー」をクリックする。
- 新しいモデルプロバイダの追加
「OpenAI-API-compatible」を選択し、「Add model」をクリックする。
- モデル情報の入力
以下の情報を入力する。
- Model Name: 任意のモデル名
- API Key: 必要に応じて入力(空欄でも可)
-
API endpoint URL: ローカルLLMのエンドポイントURL(例:
http://host.docker.internal:3000/v1
)
host.docker.internal
は、Dockerコンテナからホストマシンを参照するための特殊なホスト名である。これにより、コンテナ内からホスト上で稼働するLLMにアクセスできる。
逆に言うと、この設定を入れないとdifyコンテナ内部からローカルホスト上で動いている(今回の場合はopen-webuiコンテナが提供している)LLMサーバへの通信が通らない。
- モデルの保存
入力が完了したら、「保存」をクリックしてモデルを登録する。
うまく通信できたら保存に成功する。
※ローカルホスト上のLLMサーバのAPIのエンドポイントのポート番号(今回の場合はopen-webuiをデフォルト設定で使用するので3000)については、ubuntuの場合はufwでも通信を許可しておく必要がある。
Difyコンテナ設定の修正(host.docker.internal
の有効化)
host.docker.internal
を使用するためには、Dockerの設定を修正する必要がある。
docker-compose.yml
ファイルを開き、extra_hosts
セクションを追加してhost.docker.internal
を有効化する。これにより、コンテナ内からホストマシンのサービスにアクセスできるようになる。
具体的には以下のパスに格納されているdocker-compose.yamlファイルにおいて以下のようにAPIセクションの末尾にextra_hostsセクションを追記する。
dify/docker/docker-compose.yaml
services:
api:
# 既存の設定はそのまま
extra_hosts:
host.docker.internal: host-gateway
この状態でdocker compose up -d
を実行すれば、difyコンテナの内部からローカルホスト自身に向かって通信できるようになる。
クエリとしてファイルを渡すための設定
Difyでクエリとしてファイルをアップロードする機能を有効化する手順は以下の通りである。
機能設定画面にアクセス
Difyの管理画面で、左側のメニューから「設定」を選択し、「機能」をクリックする。
ファイルアップロード機能の有効化
「ファイルアップロード」の項目を見つけ、「有効化」ボタンをクリックする。
※この設定がデフォルトではoffになっているので、llama-visionのような画像認識できるLLMを使おうとした時に画像を渡すことができず、困惑する