一、RAGFlowとは?
RAGFlowは、深層ドキュメント理解に基づいたオープンソースのRAG(Retrieval-Augmented Generation)エンジンです。RAGFlowは、企業や個人向けに簡潔なRAGワークフローを提供し、大規模言語モデル(LLM)と組み合わせることで、ユーザーの様々な複雑な形式のデータに対して信頼性の高いQ&Aと根拠のある参照を提供します。
二、RAGFlowのアーキテクチャ設計
検索プロセス
- まずQuestionsが問題を提示し、クエリーアナライザーがKeyword & Embeddingを実行し、AIネイティブデータベース(Infinity)で類似性検索を行い、Chunkデータを返します
- 次に、多路召回(マルチパスリコール)と融合重排序(フェージングリランキング)処理を基に、より正確で的確な回答を得ます
- 最後にLLMsを呼び出してコンテンツを生成し、ユーザーに回答を返します
知識ロード
- DocumentsのロードはTask Dispatchによってディスパッチされ、Task Exectorが実行します
- 深層ドキュメント理解(DeepDoc)に基づき、OCR、ドキュメント解析、ドキュメント階層分析、表構造認識などの処理が行われます
- 最後に、制御可能で解釈可能なテンプレートテキストスライシングに基づき、ChunkがAIネイティブデータベースに保存されます
三、RAGFlowの主な機能
Quality in, quality out
- 深層ドキュメント理解に基づき、様々な複雑な形式の非構造化データから真の洞察を抽出できます。
- 真の無限コンテキスト(トークン)環境下で高速な「大海釣り」テストを実行できます。
テンプレートベースのテキストスライシング
- インテリジェントであるだけでなく、制御可能で解釈可能であることが重要です。
- 多様なテキストテンプレートから選択可能です
根拠のある回答と幻覚(hallucination)の最小化
- テキストスライシングプロセスを可視化し、手動調整をサポートします。
- 根拠のある回答:回答は重要な参照のスナップショットを提供し、追跡可能です。
様々な異種データソースとの互換性
- Wordドキュメント、PPT、Excel表格、txtファイル、画像、PDF、複写、複写、構造化データ、ウェブページなど、豊富なファイルタイプをサポートします。
完全自動化されたRAGワークフロー
- 完全に最適化されたRAGワークフローは、個人アプリケーションから超大型企業のエコシステムまでをサポートできます。
- 大規模言語モデルLLMおよびベクトルモデルの両方を設定できます。
- 多路召回、融合重排序に基づきます。
- 多路召回:戦略とは、異なる戦略、特徴、または単純なモデルを採用し、関連タスクの特性に応じて適切なリコールルールを適用し、それぞれが候補セットの一部をリコールすることを指します。これは「計算速度」と「リコール率」の間でトレードオフを行い、マルチスレッド並行技術を使用して効率を向上させることができます。
- 融合重排序:多路召回によって得られた候補セットをさらに最適化して並べ替えます。複数の並べ替えアルゴリズムの長所を組み合わせて、新しい並べ替えアルゴリズムを形成し、並べ替えの正確性と速度を向上させることを目指します。
- 多路召回と融合重排序の推薦システムは、様々な戦略とアルゴリズムの長所を最大限に活用し、推薦の正確性と効率を向上させ、ユーザーエクスペリエンスを向上させます
- 簡単に使用できるAPIを提供し、様々な企業システムに簡単に統合できます。
四、ソースコードによるサービス起動
4.1 環境インストール
4.1.1 システムソフトウェアパッケージの更新
1.新規Ubuntuシステムを手に入れ、ゼロから構築し、MobaXtermを使用してUbuntuシステムをリモートで操作します。
2.ローカルパッケージリストを更新します:apt-get update;インストール済みソフトウェアパッケージを最新バージョンにアップグレードします:apt-get upgrade
4.1.2 conda、python3、git、pip3のインストール
Ubuntuシステムにconda、Python、git、pipをインストールする詳細な手順は以下の通りです:
4.1.2.1 condaのインストール
Condaは、複数バージョンのソフトウェアパッケージ及其依存関係をインストールし、それらの間で簡単に切り替えるためのオープンソースのパッケージ、依存関係、環境マネージャーです。以下はcondaをインストールする手順です:
- Anacondaのダウンロード:
- wgetコマンドを使用して、清华大学オープンソースソフトウェアミラーサイトからAnacondaインストールパッケージをダウンロードします(最新バージョンを例とし、URLのバージョン番号は実際の状況に応じて置き換えてください)。
# 最新のミラーソースをダウンロード
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
注意:現在の最新バージョンのURLを直接取得できないため、清华大学オープンソースソフトウェアミラーサイトにアクセスしてください
清华大学ミラーサイトでのインストール時にエラーが発生したため、ソースを変更してダウンロードしました。
成功したソースアドレスは以下の通りです:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
- Anacondaのインストール:
- ダウンロードしたシェルスクリプトを実行してインストールします。
bash Anaconda3-2024.06-1-Linux-x86_64.sh
- インストールプログラムのプロンプトに従い、ライセンス契約を読み、同意し、インストール場所を選択します。
- インストール完了後、condaを初期化します(任意ですが推奨されます)。
- 一路デフォルトで/root/anaconda3パスにインストールされました
- インストールの検証:
- インストール完了後、condaのbinファイルが環境変数に追加されます。このとき、bashファイルをsourceする必要があります
source ~/.bashrc
- 次に、
conda --versionを実行してcondaが正常にインストールされているか検証します。
4.1.2.2 Python3のインストール
Ubuntuシステムには通常Python3が事前にインストールされています。特定のバージョンのPython3をインストールする必要がある場合や、インストールされているか確認する場合は、以下の手順に従ってください:
1.Python3バージョンの確認:
- ターミナルで
python3 --versionと入力して、インストールされているPython3のバージョンを確認します。
2.Pythonのインストール(未インストールの場合):
- aptパッケージマネージャーを使用してPython 3をインストールします:
apt-get install python3。
4.1.2.3 gitのインストール
- Gitは、コード変更を追跡および管理するためのオープンソースの分散バージョンコントロールシステムです。以下はgitをインストールする手順です:
1.gitのインストール: - aptパッケージマネージャーを使用してgitをインストールします:
apt-get install git。
2.インストールの検証: git --versionを実行してgitが正常にインストールされているか検証します。
4.1.2.4 pip3のインストール
pipはPythonのパッケージインストーラーであり、Pythonパッケージのインストールと管理に使用されます。Ubuntuシステムには通常pipが事前にインストールされています。pipをインストールまたは更新する必要がある場合は、以下の手順に従ってください:
- pipのインストール(未インストールの場合):
- aptパッケージマネージャーを使用してpipをインストールします:
apt-get install python3-pip。
- pipの更新(必要な場合):
- pip自体を使用して更新します:
pip3 install --upgrade pip3。
- インストールの検証:
pip3 --versionを実行してpipが正常にインストールされているか検証します。
上記の手順により、Ubuntuシステムにconda、Python、git、pipを正常にインストールできます。これらのツールは、ソフトウェア開発とバージョン管理をより効率的に行うのに役立ちます。
4.1.3 RAGFlowのインストール
4.1.3.1 RAGFlowのソースコードのクローン
- Gitを使用してRAGFlowのGitHubリポジトリをクローンします。ターミナルを開き、以下のコマンドを実行します:
git clone https://github.com/infiniflow/ragflow.git
- ragflowディレクトリを開きます
cd ragflow
4.1.3.2 Python仮想環境の作成
依存関係の競合を避けるため、RAGFlow用に独立したPython仮想環境を作成することをお勧めします。condaを使用して作成します。
conda create -n ragflow_env python=3.12.4
conda activate ragflow_env
4.1.3.3 依存関係のインストール
- RAGFlowのソースコードディレクトリで、requirements.txtファイルを見つけ、pipを使用してすべての依存関係をインストールします。
依存関係リストは以下の通りです:
accelerate==0.27.2
aiohttp==3.9.5
aiosignal==1.3.1
annotated-types==0.6.0
anyio==4.3.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
Aspose.Slides==24.2.0
attrs==23.2.0
blinker==1.7.0
cachelib==0.12.0
cachetools==5.3.3
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
coloredlogs==15.0.1
cryptography==42.0.5
dashscope==1.14.1
datasets==2.17.1
datrie==0.8.2
demjson3==3.0.6
dill==0.3.8
distro==1.9.0
elastic-transport==8.12.0
elasticsearch==8.12.1
elasticsearch-dsl==8.12.0
et-xmlfile==1.1.0
filelock==3.13.1
fastembed==0.2.6
FlagEmbedding==1.2.5
Flask==3.0.2
Flask-Cors==4.0.0
Flask-Login==0.6.3
Flask-Session==0.6.0
flatbuffers==23.5.26
frozenlist==1.4.1
fsspec==2023.10.0
h11==0.14.0
hanziconv==0.3.2
httpcore==1.0.4
httpx==0.27.0
huggingface-hub==0.20.3
humanfriendly==10.0
idna==3.6
install==1.3.5
itsdangerous==2.1.2
Jinja2==3.1.3
joblib==1.3.2
lxml==5.1.0
MarkupSafe==2.1.5
minio==7.2.4
mpmath==1.3.0
multidict==6.0.5
multiprocess==0.70.16
networkx==3.2.1
nltk==3.8.1
numpy==1.26.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==8.9.2.26
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.19.3
nvidia-nvjitlink-cu12==12.3.101
nvidia-nvtx-cu12==12.1.105
ollama==0.1.9
onnxruntime-gpu==1.17.1
openai==1.12.0
opencv-python==4.9.0.80
openpyxl==3.1.2
packaging==23.2
pandas==2.2.1
pdfminer.six==20221105
pdfplumber==0.10.4
peewee==3.17.1
pillow==10.3.0
protobuf==4.25.3
psutil==5.9.8
pyarrow==15.0.0
pyarrow-hotfix==0.6
pyclipper==1.3.0.post5
pycparser==2.21
pycryptodome
pycryptodome-test-vectors
pycryptodomex
pydantic==2.6.2
pydantic_core==2.16.3
PyJWT==2.8.0
PyMySQL==1.1.1
PyPDF2==3.0.1
pypdfium2==4.27.0
python-dateutil==2.8.2
python-docx==1.1.0
python-dotenv==1.0.1
python-pptx==0.6.23
PyYAML==6.0.1
redis==5.0.3
regex==2023.12.25
requests==2.31.0
ruamel.yaml==0.18.6
ruamel.yaml.clib==0.2.8
safetensors==0.4.2
scikit-learn==1.4.1.post1
scipy==1.12.0
sentence-transformers==2.4.0
shapely==2.0.3
six==1.16.0
sniffio==1.3.1
StrEnum==0.4.15
sympy==1.12
threadpoolctl==3.3.0
tika==2.6.0
tiktoken==0.6.0
tokenizers==0.15.2
torch==2.2.1
tqdm==4.66.2
transformers==4.38.1
triton==2.2.0
typing_extensions==4.10.0
tzdata==2024.1
urllib3==2.2.1
Werkzeug==3.0.3
xgboost==2.0.3
XlsxWriter==3.2.0
xpinyin==0.7.6
xxhash==3.4.1
yarl==1.9.4
zhipuai==2.0.1
BCEmbedding
loguru==0.7.2
umap-learn
fasttext==0.9.2
volcengine==1.0.141
readability-lxml==0.8.1
html_text==0.6.2
selenium==4.21.0
webdriver-manager==4.0.1
cn2an==0.5.22
roman-numbers==1.0.2
word2number==1.1
markdown==3.6
mistralai==0.4.2
boto3==1.34.140
duckduckgo_search==6.1.9
google-generativeai==0.7.2
groq==0.9.0
pip3 install -r requirements.txt
注意:依存関係の競合が発生した場合は、パッケージバージョンの調整や競合するパッケージのアンインストールなどの手動解決が必要になる場合があります。
ここではragflowの元のrequirements.txtファイルを使用しており、合計151個の依存関係をインストールする必要があります。私がインストールしたpython3バージョンは3.12.4で、Aspose.Slides == 24.2.0のインストール時にエラーが発生しました。この依存関係のバージョンはpython3 >= 3.5,< 3.11をサポートしているため、インストールに失敗します
解決方法:
Aspose.Slides == 24.2.0の後のバージョンをAspose.Slides==24.6.0に変更してください。
-
すべてのインストールには2時間以上かかり、平均速度は約500Kでした
-
もしcuda > 12.0の場合、以下のコマンドを追加で実行する必要があります:(この依存関係で現在使用されているバージョンは12.1.105なので、この部分のコマンドを実行する必要があります)
$ pip uninstall -y onnxruntime-gpu
$ pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
4.1.3.4 エントリースクリプトのコピーと環境変数の設定
$ cp docker/entrypoint.sh .
$ vi entrypoint.sh
以下のコマンドを使用してpythonパスとragflowプロジェクトパスを取得します
$ which python
$ pwd
上記のwhich pythonの出力をPYの値として、pwdの出力をPYTHONPATHの値として使用します。
LD_LIBRARY_PATHが環境で既に設定されている場合は、コメントアウトできます。
# ここでの設定は実際の状況に応じて調整が必要です。2つのexportが追加された設定です
PY=${PY}
export PYTHONPATH=${PYTHONPATH}
# オプション:Hugging Faceミラーを追加
export HF_ENDPOINT=https://hf-mirror.com
4.1.3.5 サービスの起動
- 基本サービスの起動
$ cd docker
$ docker compose -f docker-compose-base.yml up -d
- 設定ファイルの確認 docker/.envの設定がconf/service_conf.yamlの設定と一致していることを確認し、service_conf.yamlの関連サービスのIPアドレスとポートは、ホストのIPアドレスとコンテナがマッピングしたポートに変更する必要があります。
- サービスの起動
$ chmod +x ./entrypoint.sh
$ bash ./entrypoint.sh
- WebUIサービスの起動
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ vim .umirc.ts
# proxy.targetをhttp://127.0.0.1:9380に変更
$ npm run dev
- WebUIサービスのデプロイ
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ umi build
$ mkdir -p /ragflow/web
$ cp -r dist /ragflow/web
$ apt install nginx -y
$ cp ../docker/nginx/proxy.conf /etc/nginx
$ cp ../docker/nginx/nginx.conf /etc/nginx
$ cp ../docker/nginx/ragflow.conf /etc/nginx/conf.d
$ systemctl start nginx