セルフホストでDify + ローカルLLM + RAG

今さらRAGやる。サクッと試すならDifyかなということで、またローカルLLMとローカルデータベースにこだわりを見せてやる。

目次

環境

  • M2 Pro Mac mini
    • 12コアCPU、19コアGPU
    • RAM 32GB
    • macOS Sonoma 14.7.7
  • LLM
    • ollama 0.12.5
      • deepseek-r1:14b
      • deepseek-r1:32b

ollamaは使っていること前提。

ollamaを別マシンで動かす場合、Macの場合は以下を実行する。(Integrate Local Models Deployed by Ollama - Dify Docs)

# M2 Pro Mac mini側でターミナル実行
launchctl setenv OLLAMA_HOST "0.0.0.0"

手順

インストール

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

環境変数を設定する。

# 新しいキーを生成
openssl rand -base64 42

# envを編集する
cp .env.example .env
emacs .env

# 生成された値を.envファイルの以下の行に設定
SECRET_KEY=<生成された値をここに貼り付>

# ポート変更する場合: デフォルトは80
EXPOSE_NGINX_PORT=好きなポートにする

Difyの起動。

docker compose up -d
docker compose ps

すべてのサービスがrunningになっていればOK。

セットアップからollama連携

ブラウザで以下にアクセス

http://localhost:設定したポート/install

(デフォで0.0.0.0で待ち受けるのでIPアドレスでもよい)

アカウントとか作成。

ollamaのほうも準備する。モデルは好きな物を使えばいいがたとえば以下。

# LLMモデル
ollama pull deepseek-r1:14b

# 埋め込みモデル(RAG用)
ollama pull nomic-embed-text

Dify側でOllamaを設定する。

  1. Difyにログイン
  2. 右上のアイコン → 設定
  3. モデルプロバイダー
  4. Ollama を選択
  5. 接続情報を入力(下図)

Mac/Windows (Docker Desktop):

http://host.docker.internal:11434

他マシンで開放している場合はIPアドレス

Linux:

http://172.17.0.1:11434
  1. モデル名を入力(例: deepseek-r1:14b
  2. 保存

埋め込みモデルも同様に設定する。

動作確認(LLM)

  1. スタジオより新しく作成
  2. チャットフロー選択
  3. hi

返事がきたらOK。

動作確認(RAG)

「ナレッジ」より新しくナレッジを追加する。どうするかなと思ったけど、とりあえず下記の記事をナレッジにする。

コイツをMarkdownにして登録する。

登録してからしばらく待つことになる。

待ったら使える。

整ったら、再びスタジオよりチャットを新規作成。

ブロックから「知識探索」を追加して、開始とLLMの間に置く。知識探索ブロックにさっき作ったナレッジを設定。LLMに繋いで、LLMで知識探索の結果を使うように「コンテクスト」と「プロンプト」の設定をする。

そしたらプレビューより「Androidでssh使いたい」と聞いてみる。頑張れ……!Mac miniがんばれ……!

頑張った。Mac mini頑張った。結果は微妙だけど一応ちゃんと使っている感ある。

内容的には、独自ドメインについて記述したconfigの設定すっ飛ばしているため、意味不明な回答となっている。意味不明だが、一応ナレッジを使っている、ということは言える。

所感

とりあえず動くことはわかった。ここから先はノウハウの世界になる。チャンクの粒度はどうするのか、そもそも元の文章に手を入れる必要があるんじゃないのか、どのナレッジを使うか選択するエージェントが必要なのか……。

……原理的には結局フレーム問題のような気がする。このナレッジのこの部分を使うべきだとわかればそりゃできるだろうが……。完全なFAQデータベースがあり、1つのFAQを引っ張ってくるだけなら、多分いけるんだろうけれど。

しかし先ず問題は、その整然とされたナレッジは誰がどうやって用意するのか。次の問題は、本当にユーザが求めているのはそのナレッジなのか。多くの場合、ユーザは自分の本当のQをわかっていない。

うーん、不毛な感じがあるが……まぁもうちょっといじるしかないか。

この記事をいいなと思っていただけた方、よければ高評価・チャンネル登録……はないので、コメント・SNSでシェア・ブックマーク、RSSフィード登録を、よろしくお願い致します。

コメント

コメントする

目次