Qdrant
このセクションでは、ドキュメントの埋め込みを保存し、類似性検索を実行するための Qdrant VectorStore
のセットアップについて説明します。
Qdrant (英語) は、オープンソースの高性能ベクトル検索エンジン / データベースです。
前提条件
Qdrant インスタンス: Qdrant ドキュメントのインストール (英語) 手順に従って、Qdrant インスタンスをセットアップします。
必要に応じて、EmbeddingModel が
QdrantVectorStore
によって保存される埋め込みを生成するための API キー。
QdrantVectorStore
を設定するには、Qdrant インスタンスから次の情報が必要になります: Host
、GRPC Port
、Collection Name
、API Key
(必要な場合)。
Qdrant コレクションは、適切なディメンションと構成を使用して事前に作成する (英語) ことをお勧めします。コレクションが作成されていない場合、QdrantVectorStore は、Cosine の類似性と構成された EmbeddingModel のディメンションを使用してコレクションを作成しようとします。 |
自動構成
次に、Qdrant Boot スターターの依存関係をプロジェクトに追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-qdrant-store-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-qdrant-store-spring-boot-starter'
}
ベクトルストアの実装では必要なスキーマを初期化できますが、適切なコンストラクターで initializeSchema
ブール値を指定するか、application.properties
ファイルで …initialize-schema=true
を設定することによってオプトインする必要があります。
これは重大な変更です。Spring AI の以前のバージョンでは、このスキーマの初期化はデフォルトで行われていました。 |
ベクトルストアでは、ドキュメントの埋め込みを計算するために EmbeddingModel
インスタンスも必要です。利用可能な EmbeddingModel の実装のいずれかを選択できます。
たとえば、OpenAI EmbeddingModel を使用するには、次の依存関係をプロジェクトに追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。マイルストーンやスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。 |
Qdrant に接続して QdrantVectorStore
を使用するには、インスタンスのアクセス詳細を提供する必要があります。単純な構成は、Spring Boot の application.properties を介して提供できます。
spring.ai.vectorstore.qdrant.host=<host of your qdrant instance>
spring.ai.vectorstore.qdrant.port=<the GRPC port of your qdrant instance>
spring.ai.vectorstore.qdrant.api-key=<your api key>
spring.ai.vectorstore.qdrant.collection-name=<The name of the collection to use in Qdrant>
# API key if needed, e.g. OpenAI
spring.ai.openai.api.key=<api-key>
デフォルト値と構成オプションについては、構成パラメーターのリストを確認してください。 |
これで、Qdrant ベクトルストアをアプリケーションに自動接続して使用できるようになりました。
@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 Qdrant
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
構成プロパティ
Spring Boot 構成で次のプロパティを使用して、Qdrant ベクトルストアをカスタマイズできます。
プロパティ | 説明 | デフォルト値 |
---|---|---|
| Qdrant サーバーのホスト。 | localhost |
| Qdrant サーバーの gRPC ポート。 | 6334 |
| Qdrant サーバーでの認証に使用する API キー。 | - |
| Qdrant で使用するコレクションの名前。 | - |
| TLS(HTTPS) を使用するかどうか。 | false |
| バックエンドスキーマを初期化するかどうか | false |
メタデータのフィルタリング
Qdrant ベクトルストアでは、汎用的でポータブルなメタデータフィルターを活用できます。
例: 次のいずれかのテキスト式言語を使用できます。
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()));
これらのフィルター式は、同等の Qdrant フィルター (英語) に変換されます。 |
手動構成
Spring Boot 自動構成を使用する代わりに、QdrantVectorStore
を手動で構成できます。このためには、spring-ai-qdrant-store
依存関係をプロジェクトに追加する必要があります。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-qdrant-store</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-qdrant'
}
アプリケーションで Qdrant を構成するには、QdrantClient を作成します。
@Bean
public QdrantClient qdrantClient() {
QdrantGrpcClient.Builder grpcClientBuilder =
QdrantGrpcClient.newBuilder(
"<QDRANT_HOSTNAME>",
<QDRANT_GRPC_PORT>,
<IS_TSL>);
grpcClientBuilder.withApiKey("<QDRANT_API_KEY>");
return new QdrantClient(grpcClientBuilder.build());
}
Spring Boot OpenAI スターターをプロジェクトに追加して、OpenAI の埋め込みと統合します。これにより、埋め込みクライアントの実装が提供されます。
@Bean
public QdrantVectorStore vectorStore(EmbeddingModel embeddingModel, QdrantClient qdrantClient) {
return new QdrantVectorStore(qdrantClient, "<QDRANT_COLLECTION_NAME>", embeddingModel);
}