会社の資料を今すぐDifyで要約しよう！

![S__6570011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/dcef1846-b701-5708-898a-5dc1543a0385.jpeg)

# はじめに
最近、**Qiita**に投稿される記事を見ていると、「**Dify**」という単語をよく目にするようになりました。記事の内容から、自分のPC上で**ChatGPT**のような「チャットボット」を簡単に作成できるツールのようだと感じたため、今回は**Dify**の構築方法や操作感について確認してみることにしました。



# Difyのインストール
Difyのインストールと環境設定は、公式サイトの以下のページを参考に進めました。

https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/docker-compose

今回は`Windows OS`で**git**コマンドを実行できるように事前にインストールしておく必要があります。また、**Docker Desktop**もあらかじめインストールされていることが前提条件です。これらの手順については、多くのサイトで詳しく解説されているので、そちらを参考にしてください。

**事前に必要なこと：**
| 項目 | 説明 |
|:-:|:-|
| git  | コマンドプロンプトで`git`を実行する必要があるため、事前にインストールをお願いします。  |
| Docker Desktop  | `Dify`のサーバ構成はコンテナ環境で提供されているため、一括インストールに**Docker Desktop**が必要です。  |


### Difyのインストール手順
まず、`git`を使って**Dify**に関連するモジュールをクローン（ダウンロード）します。
```dosbatch:
git clone https://github.com/langgenius/dify.git
```

クローンが完了すると、`dify`フォルダがカレントディレクトリに作成されます。その中の`docker`フォルダに移動します。
```dosbatch:
cd dify/docker
```

次に、デフォルトで用意されている`.env.example`ファイルを`.env`として複製し、環境設定ファイルを作成します。
```dosbatch:
cp .env.example .env
```

以下のコマンドを実行して、`Docker`で「イメージ」と「コンテナ」を作成します。
```dosbatch:
docker compose up -d

git pull origin main

docker compose down

docker compose pull

docker compose up -d
```
**Docker Desktop**で確認すると、複数のサーバが一斉に起動しているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/36c479e8-8386-f62f-afbb-0fdb68483398.png)

ここまでで**Dify**がPC上で起動し、Webブラウザから操作できるようになります。




# Difyの起動と設定

ここでは、**Dify**の起動方法と設定手順について解説します。

## Difyの起動

まず、**Dify**の起動を確認します。Webブラウザで以下のURLにアクセスしてください。

```dosbatch:
http://localhost
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/fe5bcb96-edf0-83bc-4da9-55796684cc60.png)

画面の下部に「管理者アカウントの設定」が表示されているので、そこをクリックしてください。



![login.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/f7eca411-4b9c-ddec-7ab4-5e0ba7a68630.jpeg)

初回は「メールアドレス」と「パスワード」を設定してサインインします。2回目以降は、登録済みの「メールアドレス」と「パスワード」でログインできます。



## APIキーの設定
今回は数ある**LLM**の中から**ChatGPT**を使ってチャットボットを構築するため、APIキーの設定が必要です。まず、画面右上の自分の名前をクリックし、「設定」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/29d5a2bb-1036-ca6b-0f8f-6e50d7a96b96.png)

すると、以下のような「設定画面」が表示されるので、左側の「モデルプロバイダー」をクリックしてください。**OpenAI**というタイルが表示されるので、そのタイルにカーソルを合わせると「セットアップ」ボタンが表示されます。それをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/7ce67e26-e6e1-f966-b1b1-3759e0004f9a.png)

次に、入力画面が表示されるので、指示に従って必要な情報を入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/2d61382c-bd12-109d-ca2a-ba4462bb6e40.png)

**主な入力項目**
| 項目 | 説明 |
|:-:|:-|
| API Key  | OpenAI APIのキーを入力します。  |
| Organization  | 個人利用の場合は、特に入力は不要です。  |

入力が完了したら、「保存」ボタンをクリックします。これでOpenAIのAPIが利用可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/af19469e-b69d-5a1a-db8f-a7b76b815583.png)

また、「35のモデル」と表示されている部分をクリックすると、利用可能な**LLM**モデルの一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/db6074c4-3f3a-8cc1-756d-45217f3bf2ff.png)


## ナレッジの登録

次に、「ナレッジ」を登録します。これは**RAG**と似たような機能です。「ナレッジ」として登録したファイルの情報をベクトル化し、そのファイルに特有の情報を検索できるようになります。まず、上部の「ナレッジ」をクリックしてください。すると、以下の画面が表示されると思いますので、「ナレッジを作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/e6f8bbcf-fe6b-2427-4b04-ef5dd1939657.png)

すると、以下のような画面が表示されますので、今回は「テキストファイルからインポート」をクリックして、PDFファイルをアップロードしてみます。「ファイルをドラッグ＆ドロップするか」というエリアに、ファイルをドロップしてください。今回は、私が4月から受講を希望している「SBI大学院大学の春学期募集要項」をアップロードし、さまざまな質問をしてみたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/e76cc41c-2514-5735-140f-b862f87ed23a.png)


ファイルをドロップすると、以下の図のように「次へ」ボタンが表示されるので、クリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/b7e67799-d65d-168f-6d71-30ac1720f5c8.png)


次に、以下の図のようにプレビューが表示されるので、画面の一番下にある「保存して処理」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/dc226b7e-2d28-7a63-b623-0bd8fb8a2a52.png)

「ドキュメントに移動」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/236751f3-9903-bf02-19a6-814928a30713.png)

今回は1つのドキュメントだけですが、一覧が表示され、「ステータス」が「利用可能」となっていれば、ベクトル化が完了したことを示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/bc8df379-80d2-ace2-96bd-1eb7a30cf62d.png)


## スタジオの作成

次に「スタジオ」を作成します。今回は、先ほどベクトル化した資料を使用して「チャットボット」を作成してみます。まず、上部の「スタジオ」をクリックし、左側にある「最初から作成」を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/a5617229-dded-7d13-2236-5872c99c1c03.png)

「アプリのアイコンと名前」で名前を入力して「作成する」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/35310d5e-e565-499f-8e86-f108f8da94cc.png)

画面が表示されたら、試しに右下の「ボットと話す」にプロンプトを入力してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/bde21f3a-e2d5-fafa-f975-50a27d9ae47a.png)

左下には「コンテキスト」という文字が見え、個別にベクトル化されたデータを設定できます。コンテキストの枠内にある「+ 追加」をクリックすると、すでにベクトル化されたドキュメントの一覧が表示されるので、選択して「追加」ボタンをクリックします。

既にベクトル化されているドキュメントが列挙されますので、選択して「追加」ボタンをクリックします。
扱いたいドキュメントの名前を必ず選び、ダイアログの左下に「1選択された知識」という表示が出ていることを確認して「追加」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/90a3de62-11cf-6124-6a47-5ff7eaea4f5e.png)

設定が完了すると、以下の図のように選択したドキュメントが設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/b8bea57f-aeaa-6545-09dd-1bd81aa11594.png)


## プロンプト実行
それでは、プロンプトを実行してみましょう。「願書出願の期限は？」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/bf943da4-0a17-2eb7-6ea4-cc6cf5532f7a.png)
なかなか良い結果ですね。

次に、「SBI大学院大学の学長は？」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/a4bc400d-b930-ec81-f600-7f1eb5f2672a.png)
これも良い結果です。参照した資料も掲載しています。

次は少し難しい質問をしてみますので、資料を参照しているかどうかが分かるでしょう。
「レポート課題等への対応のために必要なものは？」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/6093a69b-7531-efa5-aa8c-88c2b35b7e28.png)
パーフェクト！

これで**RAG**は実現できました。


## アプリを公開する

これまでの画面は開発者向けでしたが、今度は開発者以外の一般の方にも公開する必要があります。右上の「公開する」ボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/8a49e7e1-89b6-e60c-48a7-513ba258c41e.png)

上図のようになるので「アプリを実行」をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/c1db953a-3330-3bc1-26d3-73e9dd023efe.png)

「Start Chat」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/c23c05e5-f163-5efc-78f5-f2e1982cf897.png)

では、同じ質問をしてみたいと思います。「願書出願の期限は？」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/7420e7d9-34f0-948e-c449-bb501993776a.png)

これで、利用者もチャットボットが利用できるようになりました。


# ローカルLLMの利用

ローカルLLMである`Ollama`も利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/60b01cae-0de4-72bf-458e-9556c7b700f9.png)

`Ollama`のタイルにカーソルを合わせ、「+モデル追加」をクリックします。すると、以下のようなダイアログが表示されるので、「Model Name」と「Base URL」にそれぞれ入力します。今回は`llama3.2`を適用したいので、その名前を入力し、「Base URL」には「http://host.docker.internal:11434」と入力しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/fb391062-eab1-eed7-11d0-ceefd9a72163.png)

これにより、以下のように`Ollama`も登録されましたので、`OpenAI`と同様に**LLM**や**embedding**を利用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/d78e429d-cae4-0950-a986-11f53b4bc8b2.png)

# おわりに

今回は**Dify**を導入し、生成AIを手軽に使ってみることに挑戦しました。操作方法は簡単で、ある程度の知識があれば誰でも利用できそうです。また、この利用シチュエーションについて考えてみると、例えば会社で分厚いPPTやWordなどの資料を手渡されることはありませんか。もし上司から資料を受け取ったら、すぐに**Dify**でドキュメントをベクトル化し、さまざまな質問をすることができます。特に`Ollama`の**LLM**や**embedding**を適用することで、外部に重要な情報が漏れることもなく、安心して生成AIを利用できるでしょう。

長文を最後までお読みいただき、ありがとうございました。