Vector Retrieval Service for Milvus (Milvus) と Dify プラットフォームを使用して、検索拡張生成 (RAG) システムを構築します。
背景情報
RAG の原則
大規模言語モデル (LLM) は、内部知識が限られている場合、誤った情報を生成する「ハルシネーション」を起こす可能性があります。検索拡張生成 (RAG) は、モデルを外部のナレッジベースに接続することで、この問題に対処します。効率的な RAG システムには、強力なベクトルデータベースが必要です。
本トピックでは、Milvus と Dify を統合してエンタープライズグレードの RAG アプリケーションを構築する方法を説明し、AI における「ラストマイル」問題の解決におけるベクトルデータベースの価値を実証します。
Dify
Dify は、ローコードのワークフローを備えたオープンソースの AI アプリケーション開発プラットフォームです。Backend as a Service (BaaS) と LLMOps を統合することで、AI アプリケーションの構築プロセスを簡素化します。
Dify はバックエンドインフラストラクチャ (API サービス、データ管理) を提供するため、開発者はゼロから構築する必要がありません。視覚的なプロンプトオーケストレーションインターフェイスにより、プロンプトエンジニアリングが簡素化されます。組み込みの RAG エンジンは、企業のドキュメントやデータベースなどのプライベートナレッジベースに接続し、LLM がドメイン固有の正確で追跡可能な回答を生成できるようになり、ハルシネーションを低減します。
前提条件
-
Milvus インスタンスが作成済みであること。詳細については、「Milvus インスタンスの作成」をご参照ください。
-
Alibaba Cloud Model Studio が有効化され、API キーが取得済みであること。詳細については、「App ID と Workspace ID の取得」をご参照ください。
-
Docker と Docker Compose がインストール済みであること。詳細については、「Docker と Docker Compose のインストールと使用」をご参照ください。
操作手順
ステップ1:Dify のインストール
-
オープンソースの Dify プロジェクトを GitHub からローカルマシンにクローンします。
git clone https://github.com/langgenius/dify.git -
デプロイメントディレクトリに移動し、.env 設定ファイルをバックアップします。
cd dify/docker/ cp .env.example .env -
.env ファイルで以下の設定を変更します。
# ベクトルストレージエンジンの設定 VECTOR_STORE=milvus # Milvus をベクトルストレージエンジンとして指定 # Milvus 接続情報 MILVUS_URI=http://YOUR_ALIYUN_MILVUS_ENDPOINT:19530 MILVUS_USER=YOUR_ALIYUN_MILVUS_USER MILVUS_PASSWORD=YOUR_ALIYUN_MILVUS_PASSWORDプレースホルダーの値を実際の情報に置き換えます。
パラメーター
説明
MILVUS_URIMilvus インスタンスのエンドポイント。形式は
http://<パブリック IP アドレス>:<ポート>です。-
<パブリック IP アドレス>:Milvus インスタンスの Details ページで確認できます。 -
<ポート>:Milvus インスタンスの Details ページで確認できます。デフォルトは 19530 です。
MILVUS_USERMilvus インスタンスの作成時に設定したユーザー名。
MILVUS_PASSWORDMilvus インスタンスの作成時に設定したユーザーのパスワード。
-
-
Dify を起動します。
docker compose up -d --build[root@xxx /docker]# docker compose up -d --build [+] Running 15/15 ✔ Network docker_default Created ✔ Network docker_milvus Created ✔ Network docker_ssrf_proxy_network Created ✔ Container docker-db-1 Healthy ✔ Container docker-redis-1 Started ✔ Container docker-sandbox-1 Started ✔ Container milvus-etcd Started ✔ Container milvus-minio Started ✔ Container docker-ssrf_proxy-1 Started ✔ Container docker-web-1 Started ✔ Container docker-plugin_daemon-1 Started ✔ Container docker-worker-1 Started ✔ Container docker-api-1 Started ✔ Container milvus-standalone Started ✔ Container docker-nginx-1 Started -
ブラウザで
http://127.0.0.1/を開き、Dify にアクセスします。管理者アカウントとパスワードを設定し、ログインします。説明Dify がリモートサーバー (ECS インスタンスまたは仮想マシン) 上で実行されている場合は、
127.0.0.1をサーバーのパブリック IP アドレスまたはドメイン名に置き換えてください。サーバーがパブリックにアクセス可能であることを確認してください。[Email]、[Username]、[Password] (8 文字以上で、英字と数字の両方を含む) を入力し、[Set up] をクリックします。
ステップ2:モデルの設定
-
右上のプロフィール写真をクリックし、[Settings] を選択します。
-
左側のナビゲーションペインで [Model Provider] を選択します。Qwen を探し、[Install] をクリックします。
-
モデルがインストールされたら、それを選択し、Alibaba Cloud Model Studio から取得した API キーを入力します。
-
[System Model Settings] パネルで、[System Inference Model]、[Embedding Model]、[Rerank Model]、[speech-to-text model]、[text-to-speech model] を設定し、[Save] をクリックします。
ステップ3:ナレッジベースの作成
-
ページの上部にある [Knowledge] をクリックし、次に [Create Knowledge] をクリックします。
-
[Data source] で [Import Existing Text] を選択します。サンプルデータ (README.md) をダウンロードしてアップロードします。
-
必要に応じてパラメーターを変更し、[Save & Process] をクリックします。
主要なパラメーターにはデフォルト値を使用します:インデックス作成方式は [High quality]、検索設定は [vector retrieval]、リランクモデルで [gte-rerank] を有効にし、Top K は 3、スコアのしきい値は 0.5 です。
この例では、次のパラメーターを変更します:
-
[最大チャンク長]:1024 に設定します。
-
[埋め込みモデル]: text-embedding-v1 を選択します。
処理が完了すると、ナレッジベースが作成されます。
概要では、チャンキングモードが [Custom]、テキストの前処理で連続するスペース/改行/タブを置換、インデックス作成方式が [High quality]、検索設定が [vector retrieval] であることが確認できます。[Go to Documentation] をクリックして詳細を表示します。
-
ステップ4:ベクトル検索の検証
Vector Retrieval Service for Milvus コンソールにログインします。Milvus インスタンスを選択し、右上の [Attu マネージャ] をクリックします。Attu ページで、対応するコレクションが作成されていることを確認します。詳細については、「Attu ツールの管理」をご参照ください。
ステップ5:RAG パフォーマンスの検証
-
ページ上部の [Studio] をクリックし、[Create from Template] を選択します。
-
[Knowledge Retrieval + Chatbot] テンプレートを検索して選択します。
-
ダイアログボックスで [Create] をクリックします。
-
[Knowledge Retrieval] ノードを選択し、前のステップで作成したナレッジベースを設定します。
ワークフローは、START → [KNOWLEDGE RETRIEVAL] → [LLM] (qwen-max) → [ANSWER] の順でノードを接続します。クエリ変数は
sys.queryです。 -
[LLM] ノードを選択し、モデルを qwen-max に設定します。
-
右上の [Publish] をクリックし、次に [Publish Update] をクリックします。
-
[Run] をクリックしてテストページを開きます。ナレッジベースの内容に関連する質問を入力して、回答を検証します。