LoginSignup
7
2

DifyとXinferenceを使ってローカルのみでrerankありRAGを試す

Last updated at Posted at 2024-05-22

はじめに

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)のモデルを追加します。

DifyModelProviders

まず、LLMを登録します。その際、各パラメータは以下の様に設定します。

  • Model Name: 任意の文字列
  • Server url: http://xinference:9997/ (docker-compose.ymlを上記の通り設定した場合)
  • Model uid: Xinferenceのモデル毎のID

XinferenceLLM

一つモデルを登録すると、Xorbits Inferenceが上に来るので、Add ModelからText EmbeddingモデルとRerankモデルを追加します。今回は使いませんが、画像にある様にSpeech2textモデルも設定できます。

XinferenceAdd

XinferenceEmbedding

XinferenceRerank

最後に、システムモデル設定を行います。上記登録後すぐだと、追加したモデルが出てこないかもしれません。その場合は、ページを開きなおしてみてください。

SystemModel

これで、DifyからXinferenceを通してローカルの各モデルが使える様になりました。

RAG

知識作成

まず、ナレッジから知識を作成します。
今回は、arXivからKANの論文を使用させていただきました。

  1. ドキュメントを選択

    DocSelect

  2. 検索設定はハイブリッド検索

    DocSetting

  3. ナレッジ作成完了

    DocComp

ローカルLLMなのでコストは$0です(電気代は除く)。

RAGアプリ作成

ナレッジを追加したら、RAGを構築します。

  1. 探索からRAGのテンプレートを選択

    RagTemplate

  2. Knowledge Retrievalブロックの知識を追加

    KnowledgeRetrieval

  3. Knowledge Retrievalブロックでマルチパスリトリーバルを選択

    MultiPathRetrievall

  4. LLMブロックのコンテキストを設定し、モデルを修正

    LLM

以上でRAGが構築できたので、実行してみます。

RAG

この程度の問いであればrerankを使うまでもありませんが、正しい回答が得られました。

まとめ

DifyとXinferenceを使ってローカルのみでrerankありのRAGを実行してみました。rerankなしとの比較や商用rerankモデルとの比較はしていないため、どの程度rerankが有効なのかは不明ですが、正しい回答が得られる事を確認できました。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2