はじめに
DifyはRAGなどの様々なLLMアプリをノーコードで実現できますが、RAGで真価を発揮するにはrerankモデルが使いたくなります。しかし、rerankはCohereなど一部のサービスでしか提供されておらず(2024/5時点)、気軽に試す事が困難です。一方、Xinferenceはローカルでrerankモデルを動かす事ができ、DifyはモデルプロバイダーとしてXinferenceが使えます。そこで、DifyとXinferenceを使ってローカルのみでrerankありのRAGを実行してみました。
セットアップ
Xinference
で紹介した様に、Xinferenceをセットアップします。その後、モデルを起動します。今回は以下のモデルを使用しました。
- LLM: llama-3-instruct(8B-Q5_K_M)
- EMBEDDING: bge-m2
- RERANK: bge-reranker-v2-m3
なお、Difyから使用する前に、モデルを起動しておく必要があります。
Dify
基本的な使い方は各所で紹介されているので省略します。
今回、モデルプロバイダーにXinferenceを用いるので、Difyの起動に使うdocker-compose.ymlに以下を追加して、Xinferenceが同時に立ち上がる様にします。
services:
# ... (中略) ...
xinference:
image: xprobe/xinference
container_name: xinference
ports:
- 9997:9997
volumes:
- $HOME/.xinference:/root/.xinference
- $HOME/.cache/huggingface:/root/.cache/huggingface
- $HOME/.cache/modelscope:/root/.cache/modelscope
command: "xinference-local -H 0.0.0.0"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
Difyを起動させたら、http://localhost/ にアクセスし、モデルプロバイダーからXorbits Inference(Xinference)のモデルを追加します。
まず、LLMを登録します。その際、各パラメータは以下の様に設定します。
- Model Name: 任意の文字列
- Server url: http://xinference:9997/ (docker-compose.ymlを上記の通り設定した場合)
- Model uid: Xinferenceのモデル毎のID
一つモデルを登録すると、Xorbits Inferenceが上に来るので、Add ModelからText EmbeddingモデルとRerankモデルを追加します。今回は使いませんが、画像にある様にSpeech2textモデルも設定できます。
最後に、システムモデル設定を行います。上記登録後すぐだと、追加したモデルが出てこないかもしれません。その場合は、ページを開きなおしてみてください。
これで、DifyからXinferenceを通してローカルの各モデルが使える様になりました。
RAG
知識作成
まず、ナレッジから知識を作成します。
今回は、arXivからKANの論文を使用させていただきました。
ローカルLLMなのでコストは$0です(電気代は除く)。
RAGアプリ作成
ナレッジを追加したら、RAGを構築します。
-
探索からRAGのテンプレートを選択
-
Knowledge Retrievalブロックの知識を追加
-
Knowledge Retrievalブロックでマルチパスリトリーバルを選択
-
LLMブロックのコンテキストを設定し、モデルを修正
以上でRAGが構築できたので、実行してみます。
この程度の問いであればrerankを使うまでもありませんが、正しい回答が得られました。
まとめ
DifyとXinferenceを使ってローカルのみでrerankありのRAGを実行してみました。rerankなしとの比較や商用rerankモデルとの比較はしていないため、どの程度rerankが有効なのかは不明ですが、正しい回答が得られる事を確認できました。