ローカル環境に Dify を構築して軽く触ってみる

# 環境構築

## ローカル環境に Dify を構築する

Dify の GitHub にアクセスし、「Code」から「Download ZIP」をクリックする。

https://github.com/langgenius/dify

![スクリーンショット 2025-03-08 15.50.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/fa51ab53-3ec8-4a3f-b03a-d05d8f5563a2.png)

VSCode などで開き、docker で、Dify を起動する。

```
docker compose up -d
```


## Dify の初期設定

ローカル環境にアクセスすると、次のような画面になるので、「メールアドレス」「ユーザー名」「パスワード」を入力し、「セットアップ」します。

`http://localhost/install`

![スクリーンショット 2025-03-08 16.09.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/5fe8696b-a770-43e6-adfa-03f3c455ac64.png)

「メールアドレス」「パスワード」を入力し、「セットアップ」します。　
![スクリーンショット 2025-03-08 16.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/90665cd8-589a-48cc-8df7-9d25138ca34f.png)


## Gemini の API キー の作成

次の Google AI Studio の画面で「キー API キーを作成」をクリックし、API キーを作成します。
`https://aistudio.google.com/apikey`
![スクリーンショット 2025-03-08 16.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/2e4aa1c5-5ffe-4b75-a62e-e41a04c9bd9f.png)


## モデルプロバイダーの設定

「設定」をクリックします。
![スクリーンショット 2025-03-08 16.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/9fccd6f8-374e-439f-8bbe-e4a6b56def71.png)

「モデルプロバイダー」から Gemini の「インストール」をクリックし、プラグインをインストールします。
![スクリーンショット 2025-03-08 16.42.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c271d6e8-6368-48c5-a6c6-c60c3f8acd88.png)

プラグインのインストールが完了したら、Gemini の「セットアップ」をクリックします。
![スクリーンショット 2025-03-08 16.49.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/4dcdcd0f-fe25-46b2-bc08-419ce8e0258c.png)

「Gemini の API キー の作成」の手順で作成した、「API key」を入力し、「保存」をクリックします。
![スクリーンショット 2025-03-08 16.59.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/558d08b0-25e9-4af4-8191-bb26f6fad1fb.png)


# チャットボット

## RAG の登録

RAG として登録するデータはお任せします。

「ナレッジ」から「ナレッジを作成」をクリックする。
![スクリーンショット 2025-03-08 17.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c51d81be-eab1-4a0c-9186-e74d31a563e0.png)

今回は「テキストファイルからアップロード」から行い「次へ」をクリック。
![スクリーンショット 2025-03-08 17.08.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/b190ec87-57ac-4306-bc1f-da98197050c2.png)

チャンク戦略など細かい設定ができますが、一旦今回は「保存して終了」します。
![スクリーンショット 2025-03-08 17.13.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/b04c775b-c94f-4114-ace0-b51a1814b621.png)


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

「スタジオ」で「最初から作成」をクリックする。
![スクリーンショット 2025-03-08 17.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/7ad0df88-06ae-4431-bd68-5512062af7dd.png)

「チャットボット」を選択し、適当な「アプリのアイコンの名前」を入れ、「作成する」をクリックする。
![スクリーンショット 2025-03-08 17.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/5ccfbc64-b746-4208-b08d-a9ae527471eb.png)


## 動作確認

「手順」には AI アシスタントの役割を入力します。
「コンテキスト」には [RAG の登録] で作成した RAG を指定します。
モデルは「Gemini Pro」とします。なお、細かいパラメータは一旦設定しないものとします。
![スクリーンショット 2025-03-08 17.26.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c9307b79-bd17-4ad3-a422-8a6b83b60042.png)

質問を投げてみると、RAG の情報を元に回答してくれたのが確認できました。
![スクリーンショット 2025-03-08 23.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0d5ec776-1a72-49eb-81d4-31ec4c3cd92a.png)

「公開する」で「アプリを実行」より公開することができ、自社の API に組み込むことも可能となります。
![スクリーンショット 2025-03-08 23.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/093c1bbb-4b6b-480e-b480-d06e787fcca6.png)


# テキストジェネレーター

## テキストジェネレーターの作成

「テキストジェネレーター」を選択し、適当な「アプリのアイコンの名前」を入れ、「作成する」をクリックする。
![スクリーンショット 2025-03-14 2.18.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/cc9e2cb8-69a8-4133-8b99-8610ef3c3415.png)

## 動作確認

「自動」をクリックするといくつか接頭辞プロンプトが用意されていますので、今回は「翻訳」を利用してみたいと思います。
プロンプトに変数を埋め込むことができ、「target_language」に翻訳したい言語（今回は日本語）、「text」に翻訳したい英語を入力し、「実行」をクリックすることで出力テキストが得られました。

![スクリーンショット 2025-03-14 2.26.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ff6c37c0-da10-424f-8f8a-95253ce9c321.png)


# エージェント

## Dify でサポートしているツール

https://docs.dify.ai/ja-jp/guides/tools#fsutoptitsruno

## エージェントの作成

「エージェント」を選択し、適当な「アプリのアイコンの名前」を入れ、「作成する」をクリックする。
![スクリーンショット 2025-03-15 20.14.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c46ad20a-948b-4d47-b6e1-5ba1c26a94d3.png)

ツールの「追加」より「CurrentTime」「convert time to equivalent time zone」をクリックする。こちらはタイムゾーンを変換してくれるツールのようです
![スクリーンショット 2025-03-15 20.12.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/4f757dad-d391-439f-9e74-0d2659faedb0.png)

## 動作確認

「オーケストレーション」に 「{{utctime}}」を変数にし、utctime に UTC の時刻を入力すると、日本時刻に変換してくれました。
![スクリーンショット 2025-03-29 19.30.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/eefef96d-97b7-4683-8009-eb0ee80dee85.png)


# ワークフロー

## ワークフローの作成

「ワークフロー」を選択し、適当な「アプリのアイコンの名前」を入れ、「作成する」をクリックする。
![スクリーンショット 2025-03-28 19.55.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0d01f37a-a038-485a-9bea-52a1f68601dd.png)

[開始] 
「入力フィールド」に、sys_url と入力する。（なんでも良い）
![スクリーンショット 2025-03-29 1.16.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f9e3d1b1-6e6e-4abc-8caf-b2446573eb3c.png)

[Web Scraper] 
「入力変数」の「URL」にひとつ前の手順の sys_url を渡すように設定する。
![スクリーンショット 2025-03-29 1.25.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/5fd88015-b103-424b-aefa-adcead8a77ee.png)

[LLM] 
「SYSTEM」に AI の役割、「USER」にはひとつ前の手順の Web Scraper の text を渡すように設定する。
![スクリーンショット 2025-03-29 1.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/69f4dc94-db57-4a0f-a997-ad573699d8fb.png)

[終了]
「出力変数」は text とし、ひとつ前の手順の LLM text(String) を渡すように設定する。
![スクリーンショット 2025-03-29 1.25.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f975684a-b2ca-4d7a-9709-759b68115d65.png)

## 動作確認

sys_url に LLM の「SYSTEM」で記載した指示通り問題を作成したい URL を入力し、「Execute」を投下すると問題を作成してくれます。

![スクリーンショット 2025-03-29 19.35.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/97352b27-c41f-4013-b293-e672a0bfaaff.png)