Milvus

Milvus (英語) は、データサイエンスと機械学習のフィールドで大きな注目を集めているオープンソースのベクトルデータベースです。その際立った機能の 1 つは、ベクトルのインデックス作成とクエリの強力なサポートにあります。Milvus は、検索プロセスを高速化するために最先端のアルゴリズムを採用しており、大規模なデータセットを処理する場合でも、同様のベクトルを非常に効率的に取得できます。

前提条件

依存関係

次に、Milvus VectorStore Boot スターターの依存関係をプロジェクトに追加します。

<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-milvus-store-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-milvus-store-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。マイルストーンやスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。

ベクトルストアの実装では必要なスキーマを初期化できますが、適切なコンストラクターで initializeSchema ブール値を指定するか、application.properties ファイルで …​initialize-schema=true を設定することによってオプトインする必要があります。

これは重大な変更です。Spring AI の以前のバージョンでは、このスキーマの初期化はデフォルトで行われていました。

ベクトルストア では、ドキュメントの埋め込みを計算するために EmbeddingModel インスタンスも必要です。利用可能な EmbeddingModel の実装のいずれかを選択できます。

MilvusVectorStore に接続して構成するには、インスタンスのアクセスの詳細を指定する必要があります。シンプルな構成は、Spring Boot の application.yml 経由で提供できます。

spring:
	ai:
		vectorstore:
			milvus:
				client:
					host: "localhost"
					port: 19530
					username: "root"
					password: "milvus"
				databaseName: "default"
				collectionName: "vector_store"
				embeddingDimension: 1536
				indexType: IVF_FLAT
				metricType: COSINE
デフォルト値と構成オプションについては、構成パラメーターのリストを確認してください。

これで、Milvus ベクトルストア をアプリケーションに自動接続して使用できるようになりました。

@Autowired VectorStore vectorStore;

// ...

List <Document> documents = List.of(
    new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
    new Document("The World is Big and Salvation Lurks Around the Corner"),
    new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));

// Add the documents to PGVector
vectorStore.add(documents);

// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));

手動構成

Spring Boot 自動構成を使用する代わりに、MilvusVectorStore を手動で構成できます。次の依存関係をプロジェクトに追加するには、次の手順を実行します。

<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-milvus-store</artifactId>
</dependency>
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

アプリケーションで MilvusVectorStore を構成するには、次のセットアップを使用できます。

	@Bean
	public VectorStore vectorStore(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) {
		MilvusVectorStoreConfig config = MilvusVectorStoreConfig.builder()
			.withCollectionName("test_vector_store")
			.withDatabaseName("default")
			.withIndexType(IndexType.IVF_FLAT)
			.withMetricType(MetricType.COSINE)
			.build();
		return new MilvusVectorStore(milvusClient, embeddingModel, config);
	}

	@Bean
	public MilvusServiceClient milvusClient() {
		return new MilvusServiceClient(ConnectParam.newBuilder()
			.withAuthorization("minioadmin", "minioadmin")
			.withUri(milvusContainer.getEndpoint())
			.build());
	}

メタデータのフィルタリング

Milvus ストアでは、汎用の移植可能なメタデータフィルターを利用できます。

例: 次のいずれかのテキスト式言語を使用できます。

vectorStore.similaritySearch(
    SearchRequest.defaults()
    .withQuery("The World")
    .withTopK(TOP_K)
    .withSimilarityThreshold(SIMILARITY_THRESHOLD)
    .withFilterExpression("author in ['john', 'jill'] && article_type == 'blog'"));

または、Filter.Expression DSL を使用してプログラム的に次のようにします。

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(SearchRequest.defaults()
    .withQuery("The World")
    .withTopK(TOP_K)
    .withSimilarityThreshold(SIMILARITY_THRESHOLD)
    .withFilterExpression(b.and(
        b.in("author","john", "jill"),
        b.eq("article_type", "blog")).build()));
これらのフィルター式は、同等の Milvus フィルターに変換されます。

Milvus VectorStore のプロパティ

Spring Boot 構成で次のプロパティを使用して、Milvus ベクトルストアをカスタマイズできます。

プロパティ 説明 デフォルト値

spring.ai.vectorstore.milvus.database-name

使用する Milvus データベースの名前。

default

spring.ai.vectorstore.milvus.collection-name

Milvus ベクトルを格納するコレクション名

vector_store

spring.ai.vectorstore.milvus.initialize-schema

Milvus のバックエンドを初期化するかどうか

false

spring.ai.vectorstore.milvus.embedding-dimension

Milvus コレクションに格納されるベクトルの次元。

1536

spring.ai.vectorstore.milvus.index-type

Milvus コレクション用に作成されるインデックスの型。

IVF_FLAT

spring.ai.vectorstore.milvus.metric-type

Milvus コレクションに使用するメトリクス型。

COSINE

spring.ai.vectorstore.milvus.index-parameters

Milvus コレクションに使用されるインデックスパラメーター。

{"nlist":1024}

spring.ai.vectorstore.milvus.client.host

ホストの名前またはアドレス。

localhost

spring.ai.vectorstore.milvus.client.port

接続ポート。

19530

spring.ai.vectorstore.milvus.client.uri

Milvus インスタンスの URI

-

spring.ai.vectorstore.milvus.client.token

識別および認証の目的でキーとして機能するトークン。

-

spring.ai.vectorstore.milvus.client.connect-timeout-ms

クライアントチャネルの接続タイムアウト値。タイムアウト値はゼロより大きくなければなりません。

10000

spring.ai.vectorstore.milvus.client.keep-alive-time-ms

クライアントチャネルのキープアライブ時間の値。キープアライブ値はゼロより大きくなければなりません。

55000

spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms

クライアントチャネルのキープアライブタイムアウト値。タイムアウト値はゼロより大きくなければなりません。

20000

spring.ai.vectorstore.milvus.client.rpc-deadline-ms

サーバーからの応答を待つ期限。期限を設定すると、ネットワークの変動によって高速 RPC が失敗した場合、クライアントは待機します。期限の値はゼロ以上である必要があります。

0

spring.ai.vectorstore.milvus.client.client-key-path

TLS 双方向認証の client.key パスは、"secure" が true の場合にのみ有効になります。

-

spring.ai.vectorstore.milvus.client.client-pem-path

TLS 双方向認証の client.pem パスは、"secure" が true の場合にのみ有効になります。

-

spring.ai.vectorstore.milvus.client.ca-pem-path

TLS 双方向認証の ca.pem パスは、"secure" が true の場合にのみ有効になります

-

spring.ai.vectorstore.milvus.client.server-pem-path

TLS 一方向認証用の server.pem パス。"secure" が true の場合にのみ有効です。

-

spring.ai.vectorstore.milvus.client.server-name

SSL ホスト名チェックのターゲット名オーバーライドを設定します。"secure" が True の場合にのみ有効になります。注: この値は grpc.ssl_target_name_override に渡されます

-

spring.ai.vectorstore.milvus.client.secure

この接続の認証を保護します。TLS を有効にするには True に設定します。

false

spring.ai.vectorstore.milvus.client.idle-timeout-ms

クライアントチャネルのアイドルタイムアウト値。タイムアウト値はゼロより大きくなければなりません。

24 時間

spring.ai.vectorstore.milvus.client.username

この接続のユーザー名とパスワード。

ルート

spring.ai.vectorstore.milvus.client.password

この接続のパスワード。

ミルバス

Milvus ストアを開始します

src/test/resources/ フォルダー内から次を実行します。

docker-compose up

環境をきれいにするには:

docker-compose down; rm -Rf ./volumes

次に、http://localhost:19530 または管理用のベクトルストアに接続します。http://localhost:9001 (user: minioadmin、パス: minioadmin)

トラブルシューティング

Docker がリソースについて文句を言う場合は、次のコマンドを実行します。

docker system prune --all --force --volumes