AIプラットフォームDifyでチャットボットを作ってみた

# Difyとは？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/08e17087-351e-b9f3-1acf-3bf45d2e3249.png)

読み方は「ディファイ」
AIアプリケーションを簡単に開発できるオープンソースのプラットフォームです。
ノーコードでAIチャットボットなどAIアプリケーションを短時間で開発できるツールです。


## Difyの特徴
1. ノーコード開発:
プログラミング知識がなくても、直感的なインターフェースを使って視覚的にAIアプリを構築できます。

2. 多様なAIモデル対応:
OpenAI、Anthropic、Azure OpenAI、Llama2など、様々なAIモデルプロバイダーをサポートしています。

3. RAG(Retrieval-Augmented Generation)機能:
独自のドキュメントやデータを活用して、精度の高いチャットボットなどを作成できます。

4. 外部ツール・API連携:
Google検索、Slack、DALL-E、Stable Diffusionなどの外部ツールやAPIと連携し、高度な機能を実現できます。

5. オープンソース:
GitHubで公開されており、無料で利用可能です。また、コミュニティによる継続的な改善が行われています。

6. 豊富なテンプレート:
様々な用途に対応したテンプレートが用意されており、開発の効率化が図れます。

7. 商用利用可能:
一定の条件下で商用利用が許可されています。
日本語対応:
インターフェースが日本語化されており、日本語での開発がスムーズに行えます。

# Difyの競合サービス
Difyの競合サービスをしてLangChainが挙げられます。
実際、新規のAIサービスを開発する際に、DifyとLangChainは最後まで候補に残りました。
主に、
**① OSSで自由に拡張機能が追加できる**
**② プログラミングの知識が不要で一般ユーザへも導入しやすい**
という理由でDifyでのサービス開発が決まりました。

DifyとLangChainの詳細な比較は以下の通りです！
LangChainが主にエンジニアを対象としたサービスであるのに対し、Difyは非エンジニアも対象に含めている点が、最大の違いです。

| **特徴** | **Dify** | **LangChain** |
| --- | --- | --- |
| アプローチ | ローコードのAI統合プラットフォーム | 開発者向け生成AIフレームワーク |
| 対象ユーザー | 非エンジニア、ローコード開発者 | Python開発者 |
| 使いやすさ | 直感的なUI、視覚的なワークフロー | Pythonコーディング能力が必要 |
| カスタマイズ性 | 限定的だが、設定やAPIを通じて可能 | Pythonコードで高度にカスタマイズ可能 |
| アーキテクチャ | Beehiveアーキテクチャ採用 | モジュラー設計 |
| 開発速度 | 迅速なプロトタイピングに適している | 学習曲線が急だが柔軟性が高い |
| モデル統合 | 多様なAIモデルとの簡単な統合 | 様々なNLPモデルとの統合をサポート |
| ワークフロー | 視覚的なインターフェースで構築 | Pythonコードでワークフローを定義 |
| スケーラビリティ | エンタープライズ向けの機能を提供 | 開発者が独自のスケーリング戦略を実装可能 |
| コミュニティ | 成長中のコミュニティ | 活発なコミュニティと豊富なリソース |
| 適用範囲 | 小規模から中規模のプロジェクトに適している | 複雑なAIソリューションに適している |

# Difyのプラン

Difyには、以下の4つのプランがあります。
- サンドボックスプラン（無料）
- プロフェッショナルプラン（月額$59）
- チームプラン（月額$159）
- エンタープライズプラン（要問い合わせ）

チームプランやエンタープライズプランは企業向けのプランとなるので、今回は割愛します。

**個人開発や試作品製作としてAIアプリを作る目的であれば、無料のサンドボックスプランで十分かと思います！**


ただ、サンドボックスプラン（無料）だと、メッセージクレジット(OpenAIモデルの無料利用枠)が200回までなので、クレジットが不足したタイミングで、プロフェッショナルプランに切り替えるか検討するのが良いかと思います。
もしくは、Difyのクラウドで使用せずに、Githubから自前で構築することも検討してみて良いかと思います！

Difyをローカルで動かす方法については下記の記事で詳しく解説されています↓

https://zenn.dev/minedia/articles/dify-docker-compose


無料プランとプロフェッショナルプランの詳細な比較は以下の通りです！

| **機能** | **サンドボックスプラン** | **プロフェッショナル** |
| --- | --- | --- |
| 料金 | 無料 | $59/月 |
| メッセージクレジット | 200回（使い切り） | 5,000回/月 |
| チームメンバー | 1人 | 3人 |
| アプリ作成数 | 10個 | 50個 |
| ベクトルスペース | 5MB | 200MB |
| ドキュメントアップロード | 50回 | 500回 |
| ドキュメント処理優先度 | 標準 | 優先 |
| ログ履歴 | 30日 | 無制限 |
| カスタムツール | 利用不可 | 10個 |
| サポート | コミュニティフォーラム | メールサポート |

# Difyデメリット
これまでDifyの良い面ばかりを書いてきましたが、Difyのデメリットについても触れておきます。

### 権限設定の不足
大規模な組織での利用時に、権限まわりの設定が不足しがちです。例えば、

- 作成したテンプレートを誰でも削除できてしまう
- 誰でもテンプレートを使用できてしまう
- 実行ログが誰でも閲覧可能

これらの問題は、機密情報の漏洩やリソースの無駄遣いにつながる可能性があります。

個人開発であれば、それほど問題になりませんが、ビジネス目的に利用する際には注意するポイントとなります。

:::note warn

**※ロードマップを確認すると、12月のアップデートで権限周りの実装が強化されるようです**

:::

https://roadmap.dify.ai/ja/roadmap/monthly

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/41d2e955-d01c-0fa2-3cb1-ba220c967a55.png)


# Difyを使ったアプリの具体例

| **アプリ名**               | **サンプル画像**                       | **リンク**           |
|----------------------------|--------------------------------|-----------------------------------|
| 台本生成AI                 | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/dfe17d2f-5fa2-bfc1-0cf9-243efb8c33d7.png)                  | https://udify.app/chat/8TzUd5YJe4IM9zfh   |
| YouTube要約チャットボット  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/57cea736-472b-9620-fb94-10f56a402a5b.png)                 | https://udify.app/chat/z9JVjXlRfl02POVO        |
| AIバナー生成アプリ         | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/fdcc1d06-0403-857b-7c43-1a5d144b5ce9.png)         | https://udify.app/chat/vCrE6waZ17w7Tm7P |



そのほか詳しい内容は下記のサイトにまとめられています。

https://walker-s.co.jp/ai/dify-case/

# Difyでのアプリの作成方法

Difyで作成できるアプリの使い分け

### チャットボット（初心者向け）

#### 特徴:
- 継続的な会話が可能
- ユーザーの質問に応じて情報提供
#### 使用例:
- カスタマーサポート
- 問い合わせ対応
- 見積り対応
#### 適している場面:
- 対話形式のコミュニケーションが必要な場合

### テキストジェネレーター（初心者向け）

#### 特徴:
- 一回限りの出力
- 長文やまとめの作成に適している
#### 使用例:
- ブログ記事作成
- SNS投稿文章生成
- マーケティングコンテンツ作成
#### 適している場面:
- 特定のテーマに基づいた一回限りの文章生成が必要な場合

### エージェント（初心者〜上級者向け）

#### 特徴:
- 外部ツールやAPIを利用可能
- 条件に応じて異なるタスクを連携
- 繰り返し処理が可能
#### 使用例:
- データ収集
- タスクの自動化
- 複合的な処理
#### 適している場面:
- 複数のタスクを自動で実行する必要がある場合

### ワークフロー（上級者向け）

#### 特徴:
- 複数のステップを連携
- バッチ処理や定期タスクに適している
#### 使用例:
- 大量データ処理
- 外部ツール連携
- 自動化プロセス
#### 適している場面:
- 複数のプロセスを統合し、自動化した一連の作業を管理する必要がある場合

## チャットボットの作成方法

「社内ナレッジアシスタント」を作りながら、Dify画面の操作を追っていきます。

### ① アプリケーションの作成
ダッシュボードの「スタジオ」画面から「最初から作成」をクリックします。

### ② アプリケーションの基本情報を設定
アプリタイプ: 「チャットボット」を選択
- オーケストレーション方法: 「基本」を選択
- アプリ名とアイコンを設定
- 簡単な説明を入力

「作成」をクリックしてアプリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/f05e7a7c-a1f5-644f-b4a9-a0e4c8602f7f.png)



### ③チャットボットの設定
プロンプトエディタで、チャットボットの振る舞いを定義します。
必要に応じて、「ナレッジ」タブからナレッジベースを追加します
今回は架空の社内規約をナレッジに登録しました。

<details>

<summary>登録した架空の社内規約</summary>

```plaintext
株式会社サンプル 社内規約
第1章 総則
第1条（目的）
本規約は、株式会社サンプル（以下、「当社」という）の従業員が職務を遂行するにあたり、業務効率の向上、円滑なコミュニケーション、安全かつ快適な職場環境の実現を図ることを目的とする。

第2条（適用範囲）
本規約は、当社に勤務するすべての正社員、契約社員、派遣社員およびその他の労働者に適用する。

第2章 勤務規定
第3条（勤務時間）
標準勤務時間は午前9時から午後6時とする。ただし、業務上必要と認められる場合は、別途調整することがある。
休憩時間は1時間とし、原則として午後12時から午後1時とする。
第4条（遅刻・早退・欠勤）
遅刻、早退または欠勤する場合は、事前に直属の上司に連絡すること。
緊急時の場合は、速やかに連絡を行い、後日所定の手続きを行う。
第3章 情報セキュリティ
第5条（情報の取扱い）
当社の業務に関連するすべての情報は機密情報とみなし、許可なく第三者に開示してはならない。
個人情報および顧客情報の取り扱いについては、関連法令および社内ガイドラインに従うこと。
第6条（デバイスの利用）
業務に使用するデバイスは、会社支給のものを原則とする。
個人所有のデバイスを業務に使用する場合は、事前に許可を得ること。
第4章 行動規範
第7条（職場でのマナー）
互いに敬意を持ち、礼儀正しくコミュニケーションを行うこと。
差別的、侮辱的、またはハラスメントとなる発言や行為を禁止する。
第8条（コンプライアンス遵守）
社会的な責任を自覚し、関連法令、規則および本規約を遵守する。
不正行為、汚職、または利害関係に基づく行為は厳禁とする。
第5章 その他
第9条（規約の改定）
本規約は、必要に応じて改定することがある。その場合、従業員に速やかに通知するものとする。

第10条（附則）
本規約は2024年11月29日より施行する。
```

</details>

- 「ナレッジを作成」をクリック
- データソースをアップロード
- テキスト処理設定を行う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/fe3410d6-acd2-c114-862a-49dc887a2836.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/1276d101-f754-5999-22e9-60ebe90e7773.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/54c0c3e3-f69d-fb0c-5dbb-186c9cc3f8e1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/7d230a70-dec7-2a49-6305-dadb8ab1aa64.png)

プロンプトの自動生成機能と先ほど登録したナレッジを利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/b305f67c-b484-4c70-9ce8-63fcb57495bd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/0e92f7ee-e06b-31d4-aeec-4f859a30f062.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/b527ef10-2c88-aa10-4c29-2396e25228db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/0f99939d-b979-f011-d6d6-fe156cebd56e.png)


### ④テストと公開
右側のプレビュー画面でチャットボットをテストします。
満足できる結果が得られたら、「公開」ボタンをクリックしてアプリを公開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/b247eb71-2ba0-eeef-a54a-3deefb2143a4.png)


### ⑤アプリの実行
「アプリを実行」を選択して、作成したチャットボットを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554678/f8b0d553-2416-6ce1-6613-ade5157f1796.png)

[作成されたチャットボット](https://udify.app/chat/O7TnqTYiaMHn04Cb)

今回は簡単なチャットボットの作成でしたが、Difyではワークフローなどを用いればよりカスタマイズ性の高いAIアプリケーションが作ることができます。

公式ドキュメントに詳しい操作方法が乗っているので興味がある方はご参照ください！

https://docs.dify.ai/ja-jp/guides/workflow


# 最後に
Difyの基本的な使い方について、解説してきましたが、最後に私見を述べて終わりたいと思います。
Difyを使うことで、アプリケーション開発の方法が変わると感じました。
具体的には以下の2点です。
1. 専門知識がない人でもアプリ開発が可能
Difyは専門的なプログラミング知識を必要とせず、ドラッグアンドドロップで直感的に操作できます。
なので、エンジニア以外の人でもアプリ開発が手軽にでき、ビジネス・アイディアの精度がより求められると思いました。

2. 迅速なプロトタイピング
30分もあれば、新しいAIアプリを作成できるので、企画書などのドキュメントではなく、まずは動くアプリを作成して、売れそうかどうか判断するビジネスモデルになるのではないかと思いました。

一方で、公開アプリが誰でも閲覧できるなどセキュリティ上の問題があり大規模アプリの開発にはまだ対応していない印象でした。

この記事を見て、Difyを使ってみたいなと思ってもらえたら幸いです！

:::note info
Difyのアドベントカレンダーが開催中です！
最新のDifyの情報が記載されているので是非チェックしてみてください！

https://qiita.com/advent-calendar/2024/dify

:::