Dify（SaaS版）を触ってみる

# 目的
Dify（SaaS版）を触ってみて、操作フローやできることをざっくり理解する。

# Difyとは？

ノーコードのLLMアプリ開発プラットフォーム。
- **GUIベースで直感的でわかりやすく、スピーディーなアプリ開発が可能**。非エンジニアでもとっつきやすい。
- 各コンポーネントのパラメータ変更も簡単。LLMだと温度やp値、トークン数など。
- 基本的なアプリのテンプレート、コンポーネントが揃っている。生成AIアプリのプロトタイピングにも適している。
- RAG用のパイプラインも用意されており、ナレッジDB構築も容易。
- **LLMのモデルサポートが非常に豊富**。HuggingFaceやOllama内のモデルも使える。
- Google検索、Slack、Wikipedia、Youtube、Stable Doffusionなど**外部サービスやAPIとの連携機能が豊富**。
- インターネット接続してWEBブラウザ上で操作するSaaS版だけでなく、**セルフホスト版も存在する**。コンテナベースで動作し、ローカルマシンやクラウド環境内仮想マシンにデプロイして実行可能。

## 料金
※利用前に[公式サイトの価格ページ](https://dify.ai/pricing)を確認すること。本記事に記載の情報が間違っていても一切責任は負いません。

**SaaS版**：一部有料
- 無料プラン（サンドボックス）、有料プラン（約8800円/月～）、有償エンタープライズプランがある。
- 無料版だとストレージ容量5MBまで、複数メンバーでの作業不可、アプリ生成回数月10回まで、GPTのクレジット200回まで、などの制限がある。

**セルフホスト版**：無料。
ただし、**自前のサーバリソースを所有している場合**の話であり、クラウドを利用してホスティングしたりという場合はAWSのEC2インスタンスやらストレージやらの料金が発生するので注意。

## 利用規約
規約の元ネタについては[こちら](https://docs.dify.ai/policies/open-source)
DifyはほぼOSS扱いなので、幅広い利用方法が可能。
- 社内システムへの組み込み
- 開発アプリケーションの販売
- 特定顧客（≒1企業）に対するソリューションやサービスの提供

ただし、**一部制約もある**。これらに反する利用は、商用ライセンスの取得が必要。
- マルチテナントSaaSサービス（複数の企業や組織が利用するサービス）を提供することはNG。
- Difyコンソールのロゴや、著作権情報を消すことはNG。

## 初期セットアップ方法
SaaS版であれば登録するだけなので簡単。セルフホスト版は今回は触らない。

**SaaS版（ブラウザGUI）**

https://www.ai-souken.com/article/what-is-dify

**セルフホスト版（要docker）**

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



## テンプレートを使って試しにアプリを作ってみる

#### その1. RAGアプリ
生成AIの中でも非常に需要が高いRAG。今回はwikipediaをHTML形式で保存、そのドキュメントからナレッジDBを作成しベクトル検索、チャットボットで回答できるアプリを作ってみる。

Difyのテンプレートはこんな感じ。多様なユースケースに対応したテンプレが存在しており、エンジニア以外のビジネスマンでも生成AIを業務に取り入れやすいプラットフォームになっている。
![202412011933_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/3c9679e6-5a85-ebd4-b86d-7afc58af98ec.png)

![202412011933_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/ef96a69b-288b-93ba-eb87-638f03678b73.png)


「知識リトリーバル + チャットボット」を選択。すると下記のように、**各コンポーネントとその接続関係がフローで分かりやすく表示される**。自分でゼロからコンポーネントをつなげてもよいが、テンプレを使えばフローは一瞬で出来上がるので、各パラメータの修正を加えるだけで秒速で開発が出来て楽。


![202412011933_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/1472f218-f500-82a1-a39e-c58e5f4a631b.png)

推論モデルの変更も容易。ただし**SaaS版の無料アカウントで利用できるのは、OpenAIの一部のモデルのみに限られる**。

![202412011933_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/f1a724fb-8426-4724-d18c-def794952102.png)

まずは、ナレッジDBを作成していく。WikiのHTMLファイルをインポートしているが、NotionやWEBサイトからの取得も可能。

![202412011933_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/4ec6fc15-2016-3040-f718-bd7f9a376f7d.png)

チャンク分割や埋め込みモデルの変更、ベクトルDBの検索方式など細かい設定にも対応。

![202412011933_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/814641bf-840e-222d-caf9-88587f502148.png)

これであっという間にドキュメントの埋め込み、インデックス化が完了した。
ベクトルDBを作ったら、検索精度のテストもできる。検索結果が表示されるほか、ベクトル検索のコサイン類似度の数値も表示される。（画像はハイブリッド検索）

![202412011933_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/0c2b2853-459d-75a9-0fe6-afb6d9ea70d8.png)

ナレッジベースを作成したら、推論モデルとの接続やチャットボットのUIは既に用意されているので、これで完成。
なんと、**10分足らずでRAGアプリのプロトタイプが作成できた!!**
Difyが、いかに迅速なプロトタイピングに適しているかを実感できたと思う。

<br>
今回のテスト例だとハルシネーションが多いので、ここからナレッジDBの検索方式改善や、元ドキュメント加工、Embeddingの手法改善など、Opsをガンガン回していくという流れになる。

フロントエンドはDify側で既にテンプレがあるので、**チャットボットのWEBアプリとして即時公開もできる**(！)し、WEBサイトに埋め込んだり、あるいは外部からAPIでハンドリングすることもできる。


![202412011933_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/f6667fdf-bab1-fa9d-3c04-cd5b10c67b45.png)


#### その2. 投資判断エージェント

今度はエージェントのテンプレを使ってみる。
YAMLの定義ファイルを見た感じ、下記のようなエージェント構造になっていると考えられる。
- 複数のツールを持つ、シングルエージェント。
- エージェント動作の手順フローは全て、コンテキストで細かく指示して制御してそう。
- ツールでは、YahooファイナンスAPIを利用して、企業ニュースや財務データを取得できる。
- つまり、エージェントが企業の財務情報やニュースをツールで取得。ツールの実行結果から、財務分析と業界分析の2観点でファンダメンタル分析を行い、最終的な投資分析レポートを出力してくれる。


コンテキストに記載されているテンプレ文章は下記の通り。ChatGPTで日本語に訳している。
<details><summary>（ここをクリックするとコンテキストで与える役割や手順が見れます）</summary>

>キャラクター
私の主な目標は、ユーザーに専門的なデータ分析のアドバイスを提供することです。詳細で広範なデータを用いて、専門的な視点から株式のファンダメンタル分析、テクニカル分析、市場の感情分析、マクロ経済分析を行います。分析を希望する株式（ティッカーシンボル付き）を教えてください。

>スキル
スキル1: Yahoo Finance を使用してティッカー情報を検索する能力
スキル2: 対象企業に関連する最新ニュースを検索する能力
スキル3: 対象企業の財務データや分析情報を検索する能力

>ワークフロー
ユーザーに分析対象のティッカー名を尋ね、その後以下の分析を順番に行います。
Part I: ファンダメンタル分析 - 財務報告の分析
Part II: ファンダメンタル分析 - 業界分析
（以下略）

>制約
>応答は厳密に分析タスクに限定する。
>構造化された言語で段階的に考え、ステップごとに回答する。
>使用する言語は、ユーザーの言語に従う。
>ツールや規則に関する質問には触れない。
>Markdown形式を使用して構造化された応答を提供する。状況の導入から始め、グラフの主な傾向を分析する。

</details>

特にパラメータは変更せず実行してみた。
質問：「日産自動車の株価は今後上昇しますか、それとも下落しますか。」
![202412011933_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/9c84a921-ba03-b8e9-7ee1-278152e73cf4.png)

![202412011936.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/c167baa8-98d9-f741-a497-18a6e3edf4aa.jpeg)

APIで取得した財務データとニュースなどをもとに、総合的評価ができているように見える。証券会社というよりは投資初心者の方なんかには非常に有用なアプリなのではないか。（レポートの精度については保証しかねるが）


# まとめ
- 生成AIアプリを素早く作成、公開できた。
- 非エンジニア向けの生成AI活用や、プロトタイピングに有効そう。
- ただしDifyの特性というよりプロトタイピングの一般的な特性といえるが、**本番環境との環境差分には注意する必要がある**。
（主に応答速度、可用性、スケーラビリティなどの非機能要件）
- AWSなどクラウドサービスでもノーコード開発サービスは提供されているので、今後そちらとも使い勝手を比較してみたい。