# ローカルLLMとDify
最近話題のAI技術ですが,初心者でもプログラムも作れるようになり回答も以前とは比べ物にならないくらい妥当なものが返ってくるようになりました.
ひとつの懸念は,機密情報を上げるのにはまだ抵抗があるという点です.
>> ローカルLLM
そこでローカルLLMを検証してみました.
といってもGPUを搭載したマシンが無いので仮想マシンに入れてみました.
導入は至って簡単なOllamaです.ダウンロードしてインストールするだけです.

>>> モデルの検索
モデルも簡単にインストール出来ます.
まず検索は先程のページの上部からモデル名で検索可能.
まず試してみたモデルは以下の通りです.
>>> インストールモデル
gemma2:2b | googleが開発したモデル |
gemma3:4b | googleが開発したモデル |
qwen2.5:3b | Alibabaが開発したモデル |
qwen2.5:latest | Alibabaが開発したモデル |
hf.co/eLyza/LLama-3-ELYZA-JP-8B-GGUF:Latest | ELYZA社がMeta 社の「Llama 3」シリーズをベースに日本語で追加学習を行なったもの |
「B」がパラメータ数を表すようで3bで30億パラメータのようです.
もちろん,大きい方がいいのですが比例してマシンスペックが必要です.GPU無しの仮想マシンでは3bくらいでないと普通には使えませんでした…
コマンド参考
# インストール&起動
ollama run gemma2:2b
# インストールされた一覧を表示
ollama list
# 削除
ollama rm gemma2:2b
>>> open-webui
コンソールでは利用出来るようになりましたが,これでは不便なのでフロントエンドを入れていきます.
こちらもOSSで提供されているopen-webuiを入れていきます.
インストールは以下を参考にさせて頂きました.
これで情報を気にせずにやりとりが出来るようになりました.
>> 次にDify
なんだか最近よく聞くようになったDify.といことで試してみます.
こちらはdockerで一発で起動します.
ということで,Difyを入れた目的でもあるRAG(Retrieval-Augmented Generation)を試していきます.
今回はナレッジのところでPDFをアップロードして見ました.

しばらくすると,チャンクといわれる文字を分割した区切りで格納されてました.
この区切りの調整が難しそうです.
>>> とりあずテスト
テンプレート[Retrieval-Augmented Generation]から作成.
こんな感じです.

あら簡単.引用された内容で回答されます.

Notionも連携してみようということで,notionのAPIキーを生成して設定ファイルへ書き込み.
ネットで検索すると「docker-compose.yaml」に書き込みと書いてあるサイトが多かったが実際には「.env」ファイルでした.
同期してナレッジを変更して実行. というところでしたがエラーで実行されません.
「rerankモデルが必須です」いやいやよく分かりません.
「rerankモデル」とは、情報検索や自然言語処理の分野において、初期の検索結果や生成候補に対して再評価を行い、より適切な順序に並べ替えるモデルのことです。特にRAG(Retrieval-Augmented Generation)やチャットボット、検索エンジンなどで重要な役割を果たします。
CahtGPTさんが回答してくれました.でもわかったようなわからないような,まぁでも利用するには必要ということで調べてみると,有償ではあるのですが無償となるとまた別のdockerが必要…
>>> Xinferenceを追加
Xinferenceというものみたいなので以下を参考にインストール.
設定していくとEmbeddingモデルというものもあるようで…
「embeddingモデル」とは、文章・単語・文書などのテキストをベクトル(数値の配列)に変換するモデルです。このベクトル表現によって、意味の類似性や検索可能性を高めることができ、自然言語処理や情報検索、RAG(Retrieval-Augmented Generation)などで広く活用されます。
とりあえず以下の2つをインストール
Embedding bge-m3
Rerankモデル bge-reranker-v2-m3
とりあえず以下のように設定してなんとか利用出来るようになりました.

>> 感想
とりあえずやってみた状態なので,ですがあまり精度が無いように思えます.
おそらくチャンクをいかに上手く生成するかをもっと工夫しないといけない感じですね.
ただ、単純なテキストファイルであればある程度制御も出来そうなので簡単に個別の情報を組み込むという点は素晴らしいシステムだと思いました.
n8nと連携も考えてもう少し便利なものを作ってみようかと思います.