ローカル上でのAI駆動【Dify・Ollama】

# 1.はじめに
　AIアプリケーションを開発できるオープンソースのプラットフォームの「Dify」とローカル環境で自然言語処理（NLP）を行うためのオープンソースのツールの「Ollama」を使用してAI駆動アプリの開発環境を作成します。

# 2.前提条件

:::note info
CPU
- 最低: Intel Core i7（第10世代以降）または AMD Ryzen 7（Zen 3以降）
- 推奨: Intel Core i9（第12世代以降）または AMD Ryzen 9（Zen 4以降）
- LLMの推論には並列処理が重要なため、マルチスレッド性能が高いCPUが望ましい。
:::

:::note info
GPU
- 最低: NVIDIA RTX 3060（12GB VRAM）
- 推奨: NVIDIA RTX 4080（16GB VRAM）以上
- LLMの推論にはVRAM容量が必要
- 7Bモデルなら8GB、13Bモデルなら16GB以上のVRAM推奨
:::

:::note info
RAM
- 最低: 16GB DDR4以上
- 推奨: 32GB～64GB DDR5
- DifyはDockerコンテナを複数起動するため、メモリが多いほど快適
:::

:::note info
ストレージ
- 最低: 500GB SSD（NVMe推奨）
- 推奨: 1TB以上（M.2 NVMe SSD）
- LLMのモデルデータ（gguf形式など）やDockerのコンテナが容量を消費す
:::

:::note info
その他のポイント
- OS: Ubuntu 22.04 / Windows 11（WSL2推奨） / macOS（M1/M2以上）
- Dockerの動作環境: DifyはDockerコンテナを使うため、Docker Desktopが快適に動作する環境が必要
- 電源: 高性能GPUを搭載するなら850W以上の電源ユニット推奨（デスクトップの場合）
:::
# 3.Difyの環境構築(windowsの場合)

## 前提条件
:::note info
- windows11であること
- Python、Node.jsがインストールされている事
- Dockerがインストールされている事
- WSL2が使用できる状態であること
:::

## WSL 2 を使用するLinuxディストリビューションの作成

```shell:power shell
## 利用可能なLinuxディストリビューションを確認
wsl --list --online

## Ubuntuをインストール
wsl --install -d Ubuntu

## WSLのバージョンを確認
wsl --list --verbose
```

## Dockerの設定の確認
- 「Setting」>「Resources」>「WSL integratio」にて「Ubuntu」がonの状態にする

![img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/6432fb7b-c55e-414b-8732-55d8f20fb326.png)

## Dockerでの環境構築
:::note warn
作成したLinuxディストリビューション：Ubuntu内にて実施
:::
```shell:Ubuntu
# Difyのソースを置くディレクトリの作成
mkdir [任意]
cd [作成したディレクトリのパス]

# Difyのソースコードの取得
git clone https://github.com/langgenius/dify.git

# docker ディレクトリへの移動
cd dify/docker

# 環境変数の設定（そのままコピーするだけ）
cp .env.example .env

# Difyコンポーネント初回起動
docker compose up

=========================
# 以下：コマンドについて

# Docker の起動
cd /[作成したディレクトリのパス]/dify/docker
docker compose up -d

# 停止
cd /[作成したディレクトリのパス]/dify/docker
docker compose down

# ソースが更新されるので起動前に実施（DifyはUI変更など更新が多い）
cd /[作成したディレクトリのパス]/dify/docker
git pull origin main
docker compose down
docker compose pull
docker compose up -d
```

## アカウント作成
- 上記の「docker compose up 」を実行後、設定のログが流れるので、ある程度ログの動きが落ち着いたら、「 http://localhost/install 」にアクセス。下記の画面が表示されたら、Difyの環境構築は成功

![img2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/c08f3c26-8b10-47a2-8bf2-be2806faeae6.png)

- 「メールアドレス」・「ユーザー名」・「パスワード」を設定し、セットアップを押下

## ログイン
- http://localhost/signin にアクセス
- 設定した「メールアドレス」と「パスワード」でログイン
- 下記の画面が表示されればログイン成功
![img3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/2c4ed5d2-0f3d-41a1-8774-5ed1620d07f1.png)

# 4.Ollamaの設定
## Ollamaのサイトでダウンロード
https://ollama.com/download

- インストーラーを実行
- 実行後、ターミナルで下記のコマンドを叩く
```shell:terminal
ollama --version
```

## Phi-3モデルを使ってOllamaを動かす
- 下記のコマンドでPhi-3モデルをダウンロード
```shell:terminal
## Phi-3モデルをダウンロード
ollama pull phi3

## Phi-3モデルを実行
ollama run phi3
```

## モデルの実行状況・停止方法
```shell:terminal
## 実行状況の確認
ollama ps

## 停止方法 
ollama stop phi3:latest
```

# 5.Dify「モデルプロバイダー」を設定
- Ollama(Phi-3モデル)を動かした状態にする
- アカウント > 設定　> モデルプロバイダー　に移動
- モデルプロバイダーでOllamaをダウンロードする
![img4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/ce1bd724-3a5f-4e76-b389-f967db296f0b.png)

## Olamaの使用するモデルを設定
- 以下のようにモデル設定を行う
```markdown
Model Type : LLM
Model Name : phi3:latest
Base URL : http://host.docker.internal:11434
Completion model : Chat
Moel context size : 4096
Upper bround for max tokens : 4096
```

![img5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/d9b06844-b093-426d-8ded-153caccf340d.png)

- 設定後、緑のチェックマークが表示されたらOK（赤のマークはNG、設定を確認してください）

# 6.オーケストレーションにてプロンプト（手順）を設定してから会話を開始
- プロンプト（手順）を設定
- 設定後、chatGPTのように会話が実行できる
- 今回のモデルで間違いがありますが、より精度の高いモデルを使用すると良い答えが返ってきます
- OpenAIなどAPI経由でも精度が高いモデルを使用することができます（API経由だと料金発生する場合があります。使うモデルの料金設定を確認してください。）

![img6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247848/7a9dc0a7-d770-40a3-9ae4-c0e91ea52978.png)

# 7.参考

https://dify.ai/jp

https://ollama.com/library/phi3:3.8b

https://weel.co.jp/media/dify-local/