🦍

DifyとOllamaを使ってMacのローカルで動く業務用LLM-AIツールを作成する

2024/06/30に公開

はじめに

この記事はDifyを使った業務用AIツールの開発方法をまとめたものです。

Macのローカル環境上でテキスト分類器を作成することをゴールとしており、
環境構築から実装までを初心者向けに最初から解説しています。

環境構築

モデルの入手

モデルは商用利用可能なElyzaを利用します。
公式が量子化(軽量化)済みのGGUF版を提供してくださっているのでそちらを使用します。

以下のURLのFiles and Versionsからggufファイルをダウンロードしておいてください。

https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF

Ollamaの準備

LLMはollama上で動かします。以下の手順に従ってollamaのインストール後、elyzaを起動しておいてください。

ollamaのインストール

以下のURLよりollamaをインストールします。インストール後に起動するとステータスバーにllamaのアイコンが現れます。

ダウンロードURL

https://ollama.com/download

ollamaにelyzaを読み込む

elyzaをダウンロードしたディレクトリでターミナルを起動し、以下を実行します。

echo "FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf" > Modelfile
ollama create elyza -f Modelfile
ollama run elyza

この処理ではModelfileというollamaへのモデル読み込み用のファイルを作成し、ollama内への取り込みと起動を行っています。

これで、ollama上でelyzaが使えるようになりました。

おまけ:ollamaを使ってみる

ollama run elyzaを行ったターミナルではそのままLLMが使うことができます。
以下のように適当なテキストを入力するとLLMとして挙動します。

difyの準備

difyはdocker上で起動させます。事前にdocker desktopをインストールしておいてください。

以下の手順はdifyの公式ドキュメントに沿っています。
https://docs.dify.ai/v/japanese/getting-started/install-self-hosted/docker-compose

difyのインストールと起動

以下のコマンドを用いてdifyの関連ファイルをダウンロードし、dockerで環境を構築します。

git clone https://github.com/langgenius/dify.git

cd dify/docker
docker compose up -d

difyへのアクセス

difyの起動後、http://localhost へアクセスします。

アクセス後、idの作成を求められますがローカル環境なので適当な値を入力しても構いません。
※実運用環境を作る場合はID/パスワードともに適切なものを入れてください。

difyとollamaを接続する

difyの設定画面から モデル供給元 > Ollama を選択します。

選択後、以下の通りに設定値を入力してください。

※公式が案内している"http://localhost:11434"を入力しても動きません。dockerでdify環境を構築する場合は"http://host.docker.internal:11434"を使う必要があります。

業務用AIフローの作成

この章からは実際にollamaを用いてAIの実行フローを作っていきます。

空白のフローの作成

スタジオ > アプリを作成する(最初から作成) > ワークフロー を選択します。

作成後は以下の空白のフローが構築されます。

開始ブロックのカスタマイズ

開始ブロックでプロンプトの入力環境を用意します。

”入力フィールド”のプラスアイコンをクリックし、以下の値を入力します。

これで、Promptという変数にユーザの入力値を格納し、LLMに引き渡すことができるようになりました。

LLMブロックの作成

開始ブロックの+アイコンをクリックし、LLMブロックを追加します。

追加したLLMブロックの値を以下の通りに入力します。
この値やパラメータは目的に合わせてチューニングしても構いません。

設定値の補足

SYSTEM

LLMへの事前指示を入力します。
今回はインプットを「動物」「食べ物」「人名」に分類する分類器を作成するので、以下のテキストを入れてください。

あなたは優秀な分類器です。次のインプットを「動物」「食べ物」「人名」のいずれかに区分してください。
当てはまるものがない場合でも、最も近いものを選んでください。応答は区分名のみとしてください。

USER

LLMへのインプット部分です。
開始ブロックで作成したPrompt変数の値をLLMにいれるため、Promptを入力にしています。

終了ブロックの追加

LLMブロックの先に終了ブロックを追加します。

LLMの処理結果を受け取るため、出力変数を設定しLLMの出力(LLM/text)を設定します。

ツールの公開と起動

ツールを公開します。といっても、ローカル環境なのでPCの外部から見える状態にはなりません。
右上の”公開する”ボタンをクリックし、"アプリを実行"をクリックします。

起動後、以下の画面が出れば実装完了です!

この状態でもChatBotのように使うことができますが、RunBatchでcsvファイルをインプットとしてまとめて処理することもできるようになっています。
インプットファイルのフォーマットはDownload the template hereボタンで入手でき、手厚い仕様になっています。

まとめ

いかがだったでしょうか?
今回は話題のdifyで実際に業務用のツールを作る方法を解説しました。
LLMの業務利用にお困りの方は是非この機会を期にdifyでLLMを業務に導入してみるのはいかがでしょうか?

私のXではLLMに限らず、AIを活用した業務改善情報の発信をしておりますのでご興味のある方は是非フォローをお願いします。
https://twitter.com/Linus_lab

Discussion