4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

RAGFlowは、OCR や TSR (Table Structure Recognition)を駆使して、様々な文章を深く理解することのできる RAG の Web アプリです。Rerank モデルが組み込まれているだけでなく、RAPTORSelf-RAG と言った RAG の改善技術も利用できます。また、Ollama と Xinference に対応しているので、ローカルLLM で動作させることができます。

セットアップ

インストール

公式ドキュメントに従い、まずは Linux のパラメータを変更します。
単発の場合(再起動すると元に戻る)は、

sudo sysctl -w vm.max_map_count=262144

恒久的に変更する場合は、

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

他のOSの場合は、公式ドキュメントをご確認ください。

次に、リポジトリからコードを取得して、ファイルに実行権限を付与します。

git clone https://github.com/infiniflow/ragflow
cd ragflow/docker
chmod +x ./entrypoint.sh

また、 docker-compose.yml に以下を追記して、Ollama と Xinference が同時に起動する様にすると便利です。

services:
  # ... (中略) ...
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - 11434:11434
    volumes:
      - $HOME/.ollama:/root/.ollama
    networks:
      - ragflow
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

  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"
    networks:
      - ragflow
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

設定が済んだら、起動します。

docker compose up -d

設定

docker logs -f ragflow-server

で実行ログを確認し、以下の様に表示されたら、http://localhost/ にアクセスします。

    ____                 ______ __
   / __ \ ____ _ ____ _ / ____// /____  _      __
  / /_/ // __ `// __ `// /_   / // __ \| | /| / /
 / _, _// /_/ // /_/ // __/  / // /_/ /| |/ |/ /
/_/ |_| \__,_/ \__, //_/    /_/ \____/ |__/|__/
              /____/

 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:9380
 * Running on http://x.x.x.x:9380
 INFO:werkzeug:Press CTRL+C to quit

ログイン画面が表示されるので、Sign up からアカウントを作ります。

ragflow_01

ローカルなので、メアドは適当で大丈夫です。

ragflow_02

アカウントを作成するとログイン画面に戻るので、Sign in します。

ragflow_03

右上のアイコンから設定画面に移動し、モデルを設定します。
今回は、Ollama の command-r(chat) と llava(Image2text)、 Xinference の bge-m3(embedding) を登録しました。

ragflow_04

ragflow_05

ragflow_06

登録が完了すると以下の様になります。初期に登録されていた Tongyi-Qianwen は使わないので、削除しました。

ragflow_07

右上の System Model Settings からデフォルトモデルを設定します。
Embedding model は、RAGFlow に組み込まれているモデルもありますが、多言語対応ではない (RAGFlowが組み込みに用いている FastEmbed多言語モデルにも対応しているけど...) ため、Xinference のモデル(bge-m3)を用います。

ragflow_08

Rerank model は、組み込みのモデル(BAAI/bge-reranker-v2-m3)を使います(Xinference の Rerank には未対応)。

ragflow_09

以上で、初期設定が完了です。

RAG実行

文章登録

まずは、RAGで使う文章を登録します。今回は下記の情報通信白書の全体版を使わせていただきました。

画面上部の Knowledge Base から知識ベース画面に遷移し、右上の Create knowledge base から 知識ベースを作成します。

ragflow_10

Knowledge base name を設定(何でもOK)、 LanguageEmbedding model などを選択します。Language は、英語と中国語しか選べないので、日本語に近いであろう中国語を選択しました。
Chunk method は文章の処理方法です(付録参照)。今回の場合、Paper か Manual のどちらかが良いと考え、Manual にしました。

ragflow_11

ここで、Use RAPTOR to enhance retrieval を on にすると、RAG の 改善技術である RAPTOR が使用できます。RAPTOR の詳細は元論文などを確認してください。

RAPTOR の Prompt は デフォルトでは英語なので、日本語へ翻訳したものに置き換えました。

以下の段落を日本語で要約してください。数字には注意してください。段落は以下の通り:
      {cluster_content}。
上記が要約すべき内容です。

ragflow_12

以上で知識ベースのパラメータ設定が完了したので、ファイルを追加します。

ragflow_13

追加すると、下記の様に表示されるので、Parsing Status を押して、知識ベースへの取り込み処理を行います。

ragflow_14

完了すると Parsing StatusSUCCESS になり、そこにカーソルを合わせると、処理のログが表示されます。RAPTOR 処理が実行されたことも確認できます。

ragflow_15

Retrieval testing から、テストします。Rerank Model から使用の有無が選択できます。

ragflow_16

チャット

上部の Chat からチャット画面に遷移し、左上の Create an Assistant から、設定を行います。

ragflow_17

Assistant Setting タブでは、 Assistant nameSet an opener などを設定します(何でもOK)。Knowledgebases で、使用する知識ベースを選択します。

ragflow_18

また、Self-RAG で、RAG の 改善技術である Self-RAG のon/offが選択できます。Self-RAG の詳細は元論文などを確認してください。

Prompt Engine タブでは、System でシステムプロンプトなどを設定します。デフォルトでは英語なので、日本語へ翻訳したものに置き換えました。

あなたは日本語で会話ができる知的なアシスタントです。質問に答えるために、知識ベースの内容を要約してください。知識ベースのデータを列挙し、詳細に答えてください。すべての知識ベースの内容が質問と無関係である場合、あなたの回答には "その質問に関する情報は知識ベースに含まれていませんでした!" という一文が含まれていなければなりません。回答はチャット履歴を考慮する必要があります。
      ここに知識ベースがあります:
      {knowledge}
      上記が知識ベースの内容です。

ragflow_19

Model Setting タブでは、Model などを設定します。Freedom は、Copilotなどにもある会話スタイルの選択です。

ragflow_20

以上で、アシスタントの設定は完了です。作成したアシスタントを選択すると、チャットが始まります。質問等を入力すると知識ベースを元に回答が得られました。

ragflow_21

情報源の確認もできます。

ragflow_22

これだと見にくいので、元のpdfの該当箇(p.76)所を確認してみました。

ragflow_23

比べてみると金額は合っていましたが、前の章の図表の文に引っ張られて、余計な文言「令和4年度の総務省の調査によると」が入ってしまいました。知識ベース作成時に章の区切りが上手くいかなかった事が原因の一つでしょう。Chunk method を Manual ではなく、Paper にした方が良かったのかもしれません。

なお、この例では回答が短いため問題なく動作している様に見えますが、回答がもう少し長くなると表示が途中で打ち切られる現象が発生しました。内容的には正しそうだったので、生成側ではなくアプリ側の問題な気がします。

まとめ

RAGFlowでRAPTORやSelf-RAGを試しました。今回の例ではこれらの有効性は確認していませんが、一般的な RAG だけでなく、その改善技術まで簡単に扱えるのはとても便利です。(日本語の README があるのに)英語・中国語以外の対応が不十分なのは残念ですが、日本語でも一応動作したので、色々と試すことはできそうです。今後、扱える文章に html が追加されたり、Web から直接文章を取得できたりする様になると更に便利になると感じました。

付録

RAGFlowの文章処理方法

  • General
    General
  • Q&A
    Q&A
  • Resume
    Resume
  • Manual
    Manual
  • Table
    Table
  • Paper
    Paper
  • Book
    Book
  • Laws
    Laws
  • Presentation
    Presentation
  • Picture
    Picture
  • One
    One
4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?