本文へ移動

Milvusを接続する

Milvusは、大容量のベクトル検索に使用する外部ベクトルDBです。すでに組織でMilvusを運用している場合や、検索データが非常に多く、別のクラスターで管理したい場合に使用します。

Milvusを使用しても、元のファイルと文書のテキストはSpaceBuilderにそのまま残ります。Milvusには、検索に必要なベクトルと最小限の情報だけが保存されます。


始める前に

  • 必要な権限:Workspace管理者と、Milvusのコレクションを管理する権限
  • SpaceBuilderサーバーから、Milvusのエンドポイントにアクセスできる必要があります。
  • 使用する埋め込みモデルの出力次元を確認します。

Milvusのインストール

SpaceBuilderは、Milvus 2.4以降のREST API(v2、デフォルトのポートは19530)を使用します。すべてのリクエストを/v2/vectordb/...のパスに送信するため、Milvus 2.3以前では動作しません。SpaceBuilderサーバーからこのポートで接続できるMilvusが必要です。すでに運用中のMilvusがある場合は、この節を飛ばしてコレクションを事前に作成するに進んでください。

Milvusには、単一サーバー向けのStandaloneと、大規模クラスター向けのDistributedの2つの方式があります。SpaceBuilderとの接続には、Standaloneで十分です。

準備

項目内容
サーバーLinuxサーバーにDockerがインストールされている必要があります。MilvusはQdrantより重いため、SpaceBuilderとは別のサーバーに置くことを推奨します。
メモリ最小8GB。ベクトルが100万個を超える場合は、16GB以上を推奨します。
ディスクデータとログをあわせて保存するため、余裕を持って確保してください。SSDを推奨します。
ポート19530(API)。SpaceBuilderはこのポートだけを使用します。9091は、状態の確認と管理画面用です。

実行

Milvusが提供するインストールスクリプトを使用すると、必要な構成要素を含む1つのコンテナで実行されます。

mkdir -p ~/milvus && cd ~/milvus
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh
bash standalone_embed.sh start
  • データは、スクリプトを実行したフォルダの下のvolumes/milvusに保存されます。このフォルダを削除すると、データが失われます。
  • 停止または再開するときは、同じフォルダでbash standalone_embed.sh stop / bash standalone_embed.sh startを実行します。
  • 設定を変更するときは、同じフォルダに作成されたuser.yamlを編集してから再起動します。

認証を有効にする

SpaceBuilderとは別のサーバーで運用する場合や、複数の人がアクセスできるネットワークの場合は、認証を有効にしてください。user.yamlに次の内容を追加して再起動します。

common:
  security:
    authorizationEnabled: true

認証を有効にすると、デフォルトのアカウントroot / パスワードMilvusで接続できます。デフォルトのパスワードは必ず変更し、SpaceBuilder専用のアカウントを別に作成することを推奨します。SpaceBuilderの接続設定には、APIキー(トークン、ユーザー名:パスワード形式)、またはユーザー名とパスワードを入力できます。両方を入力した場合は、APIキーが使用されます。

インストールの確認

curl http://localhost:9091/healthz

OKが返れば正常です。ブラウザーでhttp://<Milvusサーバーのアドレス>:9091/webui/を開くと、コレクションと状態を確認できる管理画面が表示されます(Milvus 2.5以降)。

運用のヒント

  • ファイアウォール:SpaceBuilderサーバーだけが19530ポートに接続できるように制限してください。9091は外部に公開しないでください。
  • バックアップ:ベクトルは、元の資料から作り直せる派生データです。別途バックアップがなくても、SpaceBuilderの既存の埋め込みを同期でベクトルDBにデータを入れ直すことができます。
  • アップデート:Milvusのバージョンを上げるときは、Milvus公式のアップグレード案内に従ってください。マイナーバージョンが変わると、データの移行が必要になる場合があります。

コレクションを事前に作成する

Qdrantとは異なり、Milvusのコレクションは自動的には作成されません。 接続設定を保存する前に、次の構造でコレクションを先に作成する必要があります。

フィールド型説明
idVARCHAR(64)、主キーベクトルID
instance_namespaceVARCHAR(64)インスタンス分離キー。インスタンス(個別にインストールして運用する1つのSpaceBuilder)ごとに異なる値です。
generation_idVARCHAR(64)インデックス作成の世代
chunk_idINT64文書チャンクの番号
space_flagVARCHAR(16)チームスペース(team)または個人スペース(client)
owner_idVARCHAR(64)所有者
source_pathVARCHAR元のファイルのパス
textVARCHAR検索結果に表示する文書チャンク
vectorFLOAT_VECTOR埋め込みベクトル。次元は埋め込みモデルと同じにする必要があります。
  • vectorフィールドの次元(dim)は、SpaceBuilderに設定するベクトル次元数と同じにする必要があります。(bge-m3は1024)
  • vectorフィールドのインデックスの距離計算方式(metric)は、COSINEにする必要があります。
  • SpaceBuilderは、textを4,096文字で切って保存します。UTF-8ではハングルは1文字あたり3バイト、絵文字は4バイトであるため、max_lengthを16384(4,096文字 × 4バイト)以上にしておくと、どの文書チャンクも長さの制限にかかりません。
  • source_pathは、ファイルパスが長く、ハングルが混ざる場合があるため、4096程度に余裕を持って設定してください。

次は、MilvusのREST API(v2)でコレクションを作成するコマンドです。<Milvusサーバーのアドレス>、認証情報、コレクション名、dimの値は、環境に合わせて変更してください。

  • Authorizationには、<ユーザー名>:<パスワード>を指定するか、その位置にAPIキー(トークン)を指定します。
  • 認証を有効にしていない場合は、Authorizationの行を削除してください。
curl -X POST "http://<Milvusサーバーのアドレス>:19530/v2/vectordb/collections/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <ユーザー名>:<パスワード>" \
  -d '{
    "collectionName": "setfn_knowledge_example",
    "schema": {
      "autoId": false,
      "enableDynamicField": false,
      "fields": [
        { "fieldName": "id", "dataType": "VarChar", "isPrimary": true, "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "instance_namespace", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "generation_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "chunk_id", "dataType": "Int64" },
        { "fieldName": "space_flag", "dataType": "VarChar", "elementTypeParams": { "max_length": 16 } },
        { "fieldName": "owner_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "source_path", "dataType": "VarChar", "elementTypeParams": { "max_length": 4096 } },
        { "fieldName": "text", "dataType": "VarChar", "elementTypeParams": { "max_length": 16384 } },
        { "fieldName": "vector", "dataType": "FloatVector", "elementTypeParams": { "dim": 1024 } }
      ]
    },
    "indexParams": [
      { "fieldName": "vector", "indexName": "vector", "metricType": "COSINE", "params": { "index_type": "AUTOINDEX" } }
    ]
  }'

"code":0を含む応答が返れば、コレクションが作成されています。

接続設定

ナレッジストレージ画面のベクトルDB構成で、次のように入力して保存します。

項目入力値説明
ドライバーMilvus外部のMilvusサーバーを使用します。
エンドポイントhttp://<Milvusサーバーのアドレス>:19530http://を省略すると自動的に付加されます。空欄にするとhttp://localhost:19530を使用します。
コレクション事前に作成したコレクションの名前インスタンスごとに異なる名前にすることを推奨します。画面には、このインスタンスの推奨名(setfn_knowledge_...)が表示されます。
APIキーMilvusのトークン認証を有効にしたMilvusにトークンで接続する場合にのみ入力します。保存済みの値はマスクされて表示され、変更しなければそのまま維持されます。空欄にして保存すると削除されます。
ユーザー名 / パスワードMilvusのアカウントアカウント認証を使用する場合に入力します。パスワードは変更するときにのみ入力し、空欄にすると保存済みの値を維持します。
ベクトル次元数コレクションのdimと同じ値異なる場合、接続はできますが、インデックス作成が保存の段階で失敗します。

Milvusはサービス型のストレージであるため、データパスの入力欄は表示されません。保存すると、インデックススケジューラーが新しい設定を確認し、必要な場合は元の資料全体の再インデックスを自動的に開始します。

接続の確認

ベクトルDBの運用状況で状態を確認します。

項目正常な場合
接続状態接続済み
コレクション設定正常(現在の設定と互換性あり)
保存済みベクトル数インデックス作成の進行に伴って増えます。このインスタンスが保存したベクトルだけを数えます。
コレクション数Milvusサーバーにあるすべてのコレクションの数です。

正常でない場合は、次の内容を確認してください。

表示原因と対処
コレクションがありません・先に Milvus でコレクションを作成してくださいコレクションをまだ作成していないか、名前が異なります。上記の構造でコレクションを作成するか、名前を合わせてください。
コレクション設定の確認が必要 + collection dimension is ..., expected ...コレクションの次元と、設定したベクトル次元数が異なります。次元が一致する新しいコレクションを作成して指定してください。
コレクション設定の確認が必要 + collection metric must be COSINEvectorインデックスのmetricがCOSINEではありません。インデックスをCOSINEで作り直してください。

関連ドキュメント