初心者向け：Difyを使ったGPTアプリ開発のメリットと始め方

この記事は[NTTコムウェア AdventCalendar 2024](https://qiita.com/advent-calendar/2024/nttcomware) 10日目の記事です。

# はじめに

NTTコムウェアの管です！
システム設計から開発・運用まで幅広い経験を持つ、キャリア7年目のフルスタックエンジニアです。最新技術に強い関心を持ち、現在はWeb3.0技術検証ワーキンググループのリーダーを務めています。

## 記事向け対象
本記事は、GPTの開発初心者の方を対象としています。

## きっかけ
私は、AIとの共生が将来の時代のトレンドになると考えています。その流れに取り残されないためにも、AIに関する知識を深める必要性を感じています。特に開発分野に興味を持つフルスタックエンジニアとして、学習の記録として本記事を執筆することにしました。

# Difyとは？

Difyは、ChatGPTをはじめとするAIモデルを活用したアプリケーションを簡単に作成できるプラットフォームです。プログラミング経験が少ない方でも、直感的なUIと強力なツールを使ってAIアプリを構築できます。また、クラウド版とオンプレミス（ローカル）版の両方が提供されており、用途やニーズに応じて柔軟に選択できます。

公式サイト: [Dify公式サイト](https://dify.ai/)

# Difyのエコシステム

Difyは、初心者から上級者まで、幅広いユーザーがAI技術を活用できるエコシステムを提供しています。このエコシステムには以下のような機能が含まれています。

- アプリケーション設計ツール
  - 直感的なドラッグ＆ドロップインターフェースを使って簡単にアプリを設計可能です。
- AIモデル管理
  - OpenAIや他のプロバイダーのAIモデルを簡単に統合・管理できます。
- APIサポート
  - 他のアプリケーションやシステムとシームレスに統合することが可能です。
- [オープンソース](https://github.com/langgenius/dify)対応
  - ユーザーが独自にカスタマイズできる柔軟性を提供しています。

これにより、開発者はプロジェクトを迅速かつ効率的に開始でき、必要に応じて拡張性やカスタマイズ性を活用することができます。

# データプライバシーの取り組み

Difyは、ユーザーのデータプライバシーを最優先に考え、以下の方法でデータ保護を実現しています。

## オンプレミス環境でのホスティング

Difyは[オープンソース](https://github.com/langgenius/dify)として提供されており、ユーザーは自社のサーバーやオンプレミス（ローカル）環境にDifyをインストールして運用できます。
これにより、データが外部のクラウドサーバーに送信される心配がなく、内部でのデータ管理が可能です。これにより、機密情報や個人データの漏洩リスクを最小限に抑えることができます。

## データ収集時の法令遵守

Difyを使用してユーザーデータを収集する際には、現地の法令を遵守する必要があります。
具体的には、以下の点を守ることが推奨されます。

- **プライバシーポリシーの公開**
  ユーザーに対し、どのようなデータを収集・利用するかを明確に説明します。

- **ユーザーの明示的な同意**
  データ収集・利用前に、ユーザーから同意を得ることが求められます。

## ログとアノテーションの管理

Difyのログ機能は、アプリのユーザーインタラクションを記録し、サービスの運用改善に役立てるために使用されます。

- **ログの活用**
  ログは、チーム内で共有し、アプリのモデル精度向上や返信スタイルの改善に使用されます。

- **ユーザーの同意**
  ログやアノテーションを利用する際には、必ずユーザーの同意を得た上で活用します。

## 企業における機密データの保護

企業が機密データを守るためには、Difyのオンプレミス版の利用が推奨されます。

- **オンプレミス運用**
  自社サーバー上でDifyを運用することで、データが外部サーバーに送信されるリスクを排除し、厳格な内部管理が可能です。

- **オープンソースの活用**
  Difyはオープンソースで提供されているため、ソースコードを確認し、自社のセキュリティ要件に合わせたカスタマイズが可能です。

- **セルフデプロイの利点**
  クラウド版利用時のデータ漏洩リスクを回避するため、セルフデプロイ機能を活用することで、企業は完全に自社環境内でDifyを運用できます。

:::note info
これらの方法を組み合わせることで、Difyはユーザーデータや機密情報を保護しながら、柔軟かつ安全に活用できる環境を提供します。企業や個人が安心してDifyを導入・利用できるよう、徹底したデータプライバシー対策を講じています。
:::

---

# Difyの利用方法

1. **アカウント登録**
   - Difyの公式ウェブサイトにアクセスし、アカウントを作成します。
   - クラウド版の場合はそのまま利用を開始できます。
   - オンプレミス（ローカル）版を利用する場合は、Difyのリポジトリをクローンし、セットアップ手順に従います。

2. **プロジェクトの作成**

   - ログイン後、「新しいプロジェクト」を作成します。
   - プロジェクト名、説明、ターゲットユーザーなどを設定します。

3. **ChatGPTモデルの選択**

   - 使用したいAIモデル（ChatGPTや他のモデル）を選択します。
   - 外部AIサービス APIキーや他のAIプロバイダーの設定を入力します。

   :::note info
   外部APIサービスのクレジット残高を確認しましょうね。
   :::

   :::note alert
   残高が０の場合、設定エラーがでます。
   :::

3. **アプリケーションの設計**

   - Difyのドラッグ＆ドロップインターフェースを使用して、UIやフローを設計します。
   - 必要に応じてカスタムスクリプトを追加し、アプリの機能を拡張します。

4. **デプロイ**

   - クラウド版では「デプロイ」ボタンをクリックするだけで公開可能です。

:::note warn
セキュリティ面の手間がかかる
:::

   - オンプレミス（ローカル）環境では、自分のサーバーでデプロイ手順を実行します。

---

# オンプレミス（ローカル）環境とクラウド版の比較

| 特徴       | クラウド版         | オンプレミス（ローカル）環境     |
| -------- | ------------- | ---------- |
| セットアップ時間 | 非常に短い         | 中程度        |
| セキュリティ   | クラウドプロバイダーに依存 | 自社内で完全管理可能 |
| スケーラビリティ | 高い            | 自社サーバー次第   |
| カスタマイズ性  | 限定的           | 高い         |
| コスト      | サブスクリプションベース  | 初期投資＋運用コスト |

---

## クラウド版のメリットとデメリット

### メリット

- **簡単なセットアップ**: 初期設定やサーバー管理の必要がなく、すぐに利用可能。
- **スケーラビリティ**: サーバー負荷やトラフィックに応じた自動スケール。
- **アップデート管理**: 最新機能を自動的に利用可能。

### デメリット

- **データセキュリティ**: データが外部のクラウドに保存されるため、セキュリティポリシーに注意が必要。
- **カスタマイズの制約**: 一部の高度なカスタマイズはできない場合がある。

## オンプレミス（ローカル）環境のメリットとデメリット

### メリット

- **データコントロール**: データを完全に自社内で管理可能。
- **カスタマイズ性**: サーバーやコードベースを自由に変更できる。

### デメリット

- **セットアップの手間**: 初期設定やサーバー構築が必要。
- **メンテナンス負担**: セキュリティパッチやソフトウェアの更新を自社で管理する必要がある。

---



:::note info
理論的なシミュレーションはここまで、これからオンプレミス（ローカル）環境を立ち上げて試しておきます。
:::

# 実際の試し手順
今回は試したのはオンプレミス（ローカル）環境です。クラウド版の操作と同じです。

## オンプレミス（ローカル）環境のセットアップコマンド
        
```sh
# Difyのリポジトリをクローン
$ git clone https://github.com/langgenius/dify.git

# ディレクトリに移動
$ cd dify/docker

# 環境変数ファイルを設定
$ cp .env.example .env
# 必要に応じて.envファイルを編集
# 特に編集しなくても起動できる

# アプリケーションを起動
$ docker-compose up -d

# ブラウザでローカルホストにアクセス
http://localhost/install
# 起動時間がかかりますが。。。。

```
アプリをログインすると以下のように見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/b53ccaa5-711c-bc7c-b5b1-824aeeafdb6d.png)
出典：Dify, Dify・ローカル版（参照：2024/12/06）

ちなみに、Cloud版は以下の感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/307964f7-29f4-554a-9848-f2c470ec087b.png)
出典：Dify, Dify・クラウド版, https://cloud.dify.ai/apps （参照：2024/12/06）

どうですか。同じですね。

## モデル指定やAPIキー設定
「設定」ー＞「モデルプロバイダー」で、利用しているAIプロバイダーをセットアップする
![スクリーンショット 2024-12-05 13.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/ae883e80-9ace-47d2-1dfa-228590c3d9a6.png)

ここはAPIキーを入力するだけで十分です。
![スクリーンショット 2024-12-05 13.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/eb8f2749-517a-cbc7-de57-91e0f681a999.png)
出典：Dify, Dify・ローカル版（参照：2024/12/06）


多分気づいたかもしれませんが、実際にDifyは使えるAIサービスが盛り沢山ですね。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/ba528c12-b70a-c189-ed8a-e0bd71948899.png) |![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/221a62b1-0e9f-95aa-0d6f-a76d701b4b29.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/46533f01-94e3-9dde-920d-8caaac4ae66e.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626247/10d03620-8430-863f-6d90-272550fcd9ea.png)|
|-------|-------|-------|-------|

出典：Dify, List of Model Providers, https://docs.dify.ai/ja-jp/getting-started/readme/model-providers （参照：2024/12/06）

※Difyが利用できるプロバイダーにたいして、興味がある方は[Difyのドキュメント](https://docs.dify.ai/ja-jp/getting-started/readme/model-providers)までご確認くださいませ。

上記の設定が完了すると、独自のGPTsアプリ作成ができます。
個人的におすすめなのはワークフロー構築方法です。良ければ以下の記事を参考してみてください。
https://qiita.com/minorun365/items/4c5dba1de7977c386249?utm_source=chatgpt.com


---
# 最後
Difyを活用すれば、初心者でもChatGPTを利用した高度なアプリを構築できます。用途や要件に応じてクラウド版とオンプレミス（ローカル）環境を選択し、効率的にプロジェクトを進めましょう！

※本稿に記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。