ノーコードLLM統合アプリのdifyでollamaと連携してみた

# はじめに

- **革新的な連携:** ノーコードプラットフォーム**Dify**とAIツール**Ollama**の連携により、開発プロセスが劇的に変革されます。
- **探求:** この記事では、両ツールの統合手順と開発者にとっての利点を詳しく探ります。Difyの直感的なインターフェースを通じて、OllamaのAIモデルを効果的に活用する方法を紹介します。

## Ollamaとは
Ollamaは、LLama3やLLava、vicunaやPhiなどのオープンに公開されているモデルを手元のPCやサーバーで動かすことの出来るツールです。

## difyとは

DifyはオープンソースのLLMアプリ開発プラットフォームです。 RAGエンジンを使用して、エージェントから複雑なAIワークフローまでLLMアプリを編成します。

https://dify.ai/jp

<iframe width="560" height="315" src="https://www.youtube.com/embed/A0w9JAUZwbk?si=9ofqlOM6d_lyQkA0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 前提の環境の説明
- OS: Windows 11
- ollamaはWinodowsのインストーラを使用する
- difyはDocker Desktopを使用して環境を構築する

# 導入のプロセス

## olllamaのインストール
-  ollamaはWinodowsのインストーラで導入する。ollamaのWindows版のインストールに関する情報は、以下のリンクから入手できます。
https://ollama.com/download/windows

-  次のモデルをollama pull コマンドであらかじめダウンロードしておく。

https://ollama.com/library/llama3

https://ollama.com/library/mxbai-embed-large

このデモで使用したのは、mxbai-embed-largeですが、nomic-embed-textのほうがパラメータ数などは大きいようなので、そちらもチェックしてみてください。
https://ollama.com/library/nomic-embed-text

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/85ffed75-ef3c-d6f3-632b-1ecb0c988b01.png)


## difyのDockerのインストール

-  公式サイトの手順にそってDocker Composeを使用してインストールします。

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

-  こんな感じで複数のコンテナが起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/145400ed-127e-e552-7610-8679047f474f.png)

# ollmaとdifyの連携のプロセス
- difyのWebサイト(http://localhost/apps)にアクセスする。初回は管理者アカウントの登録してログインする。
- difyの設定でolllamをモデルプロパイダーに追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/14d651dc-72d8-78a2-d6ff-3cf00b6c1fe9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3e80cd29-81aa-f418-9693-9b1fa3f8522e.png)

追加したあとの設定になっているが、+ADD MORE MODEL PROVIDERからOllamaを選択して、次に２つのモデルを追加した。

モデルプロパイダーとしては、その他にOpenAI, ANTHROPIC, Bedrock, Cohereなど選択できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/26a0f06b-f7a2-44f3-9bcd-ec0600e19ff1.png)
この環境ではollamaはWindows版でインストールしているので、Base URLを次のように定義した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/1f107679-2310-1ad7-4289-2f383d00691d.png)

RAGするときに必要なので、この設定も定義した。

モデルの説明を確認したところ、以下のようになっていたので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/37baa0d1-718b-aa93-f0cb-c89318804221.png)

Modelのコンテキストサイズは、4096ではなく、512以下のほうが良かったかもしれない・・・。(未確認
)

lamma3の設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fa00aaa0-f0bc-c9ef-01aa-68f6ef56549f.png)

text embedingのための設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/a3515b5c-d158-08ac-acde-12d80953c57a.png)

モデルプロパイダーの設定でシステムモデルをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fbe24ee4-d1ab-1e9c-cff4-18266cf02568.png)


# チャットボットを作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/a22b77f1-2720-0cbc-c8a4-4e2def5a1bea.png)
スタジオをクリックして移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/b24c7846-87b7-732c-8336-1b06fdcc7f58.png)
次を選択してシンプルなアプリを作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/06e10e49-cc7a-1e59-af03-916905cedb9f.png)

アプリのアイコンと名前を定義して、作成するをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3ae76a52-8a8c-56a0-1f18-5ac627eb051b.png)

次のような画面でアプリの定義をする。右上でまずは、モデルを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/05c6583e-5246-1e79-6f0a-4e18512f79b3.png)

モデルのPARAMETERSを設定したい場合には、上記の項目も確認して調整する。GPUを有効にして1に設定した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/dd62eaa6-0fbd-2ae2-41d5-71d258e4ee14.png)

手順を追記する。

コンテキストを定義するまえに、ナレッジのページをもう一つのブラウザで開いてRAGしたいドキュメントを登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/e86fcf4d-5de3-4da2-e4aa-f17aff3e751a.png)

知識を作成をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7cc44c77-b1db-cd0c-8ec4-caeb7874e1d0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/72bc6e80-7d12-65a0-340e-0fed1fb35ff4.png)
Aさんの経歴はこんなファイル

登録したいいテキストファイルをドラッグして登録する。次へをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3460fa1d-918e-db00-0bbb-c9b750fbe632.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/773382f6-ea2a-888e-82dc-92bc4f185db4.png)

保存して処理をクリックして、ドキュメントが登録されるのを待つ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/ff38cdf4-c6d4-b69c-875b-c0f2cd5dc971.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/a338fd1b-8803-2aa6-38d5-99e6b4b3220a.png)

ナレッジを登録したあとにコンテキストの追加ボタンをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/76ae5586-1934-de18-ba58-4f3f4bb1c17e.png)

登録したい知識を選択して、追加ボタンをクリックする。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/afc28b3b-0561-9e39-e596-70a5aa37ed27.png)
画面したの機能追加で次の機能も追加する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3abec675-60b7-7a36-a535-4af20e3a0be6.png)
引用と帰属をチェックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7e72483b-1f43-6694-7b4d-826d542787c6.png)
右側でデバッグでチャットして確認することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/e139bc29-77bc-ca2d-5777-726f1a7d58b2.png)

右上の公開するをクリックして、更新をクリックする。設定が保存される。
アプリを実行をクリックすると、チャットボットの画面が開く。

# チャットボットを検証する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/34a25fed-d9e0-7c5a-97ad-a0872a8d04b5.png)

Start Chatをクリックして、チャットを開始する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c59cc672-0025-9568-3d07-35b0cf776286.png)

回答のソースもとも示してくれた。

# まとめ
- **Difyの利用:** 数時間でノーコード開発により、Ollamaと連携するRAGチャットボットを構築できました。
- **モデルの柔軟性:** ローカルLLMおよびクラウド環境ともに連携可能で、多様なモデルプロバイダーに対応しています。
- **ワークフローの拡張性:** 複雑なワークフローを設計することで、処理を柔軟に拡張し、回答の精度を向上させることが可能です。
- **APIの公開:** 構築したボットはAPIを公開できるため、他のプログラムや自律AIアプリケーションからの呼び出しが可能です。


# 参考文献
- [difyの公式サイト](https://dify.ai/jp)
- [Tips on how to use Dify](https://www.youtube.com/playlist?list=PL4w0-hOD9d6_sCHSQZjPxhmtVaHtN-9Ws)
- [How to use RAG (Retrieval Augmented Generation) - Short Tutorials](https://youtu.be/_LwIE_hRVY8?si=uBq2kSAlZ9iPUDEb)
- [Dify（独自AIサービスをローカル環境で簡単につくれる）を非エンジニアが試してみた](https://www.youtube.com/watch?v=XrFx6cKqqY4)
いつもチャンネルみてます、ありがとうございます。
- [OpenAIのGPTsより凄い！無料で使えるDifyを徹底解説してみた](https://youtu.be/O_bmmDWIjTc?si=rFgoJnkzMqvrHwEw)
いつもチャンネルみてます、ありがとうございます。
- [Dify の ワークフロー の概要](https://note.com/npaka/n/n74d706ea225b)
- [Dify で RAG を試す](https://note.com/npaka/n/nca849f1a23f1)
npakaさんまとめ
- [Dify公式: Ollamaが配置したローカルモデルを統合](https://docs.dify.ai/v/japanese/guides/model-configuration/ollama)

https://qiita.com/Tadataka_Takahashi/items/0e309bcdda0bf75bc6a5

# その他

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/4cbaa4e2-78f4-df51-0808-aa70f62344b4.png)

テンプレートからチャットボットを開発することもできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/42017fa4-0385-5f9a-e471-67884aaec65a.png)

拡張ツールとして、このようなものがある。カスタムツールも定義できる。

difyのwebサイトで登録してためせるので、大規模LLMのAPIを試すだけだったら、ローカルに環境構築しなくても試せます。