Weaviate
このセクションでは、ドキュメントの埋め込みを保存し、類似性検索を実行するために Weaviate VectorStore を設定する手順について説明します。
Weaviate (英語) は、お気に入りの ML モデルからのデータオブジェクトとベクトル埋め込みを保存し、数十億のデータオブジェクトにシームレスに拡張できるオープンソースのベクトルデータベースです。ドキュメントの埋め込み、コンテンツ、メタデータを保存し、メタデータのフィルタリングを含むそれらの埋め込みを検索するためのツールを提供します。
前提条件
実行中の Weaviate インスタンス。次のオプションが利用可能です。
Weaviate クラウドサービス (英語) (アカウント作成と API キーが必要です)
必要に応じて、EmbeddingModel が
WeaviateVectorStore
によって保存される埋め込みを生成するための API キー。
依存関係
プロジェクトに Weaviate ベクトルストア依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
構成
Weaviate に接続して WeaviateVectorStore
を使用するには、インスタンスのアクセス詳細を提供する必要があります。単純な構成は、Spring Boot の application.properties を介して提供できます。
spring.ai.vectorstore.weaviate.host=<host_of_your_weaviate_instance>
spring.ai.vectorstore.weaviate.scheme=<http_or_https>
spring.ai.vectorstore.weaviate.api-key=<your_api_key>
# API key if needed, e.g. OpenAI
spring.ai.openai.api-key=<api-key>
環境変数
export SPRING_AI_VECTORSTORE_WEAVIATE_HOST=<host_of_your_weaviate_instance>
export SPRING_AI_VECTORSTORE_WEAVIATE_SCHEME=<http_or_https>
export SPRING_AI_VECTORSTORE_WEAVIATE_API_KEY=<your_api_key>
# API key if needed, e.g. OpenAI
export SPRING_AI_OPENAI_API_KEY=<api-key>
またはそれらの組み合わせも可能です。
将来の作業を容易にするためにシェルスクリプトを作成することを選択した場合は、ファイル (つまり source <your_script_name>.sh ) を「ソース」してアプリケーションを開始する前に必ずシェルスクリプトを実行してください。 |
自動構成
Spring AI は、Weaviate ベクトルストア用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml
ファイルに次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
デフォルト値と構成オプションについては、ベクトルストアの構成パラメーターのリストを参照してください。
マイルストーンおよび / またはスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。 |
さらに、設定済みの EmbeddingModel
Bean が必要です。詳細については、"EmbeddingModel" セクションを参照してください。
必要な Bean の例を次に示します。
@Bean
public EmbeddingModel embeddingModel() {
// Can be any other Embeddingmodel implementation.
return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
これで、WeaviateVectorStore
をアプリケーション内のベクトルストアとして自動接続できるようになりました。
手動構成
Spring Boot 自動構成を使用する代わりに、ビルダーパターンを使用して WeaviateVectorStore
を手動で構成できます。
@Bean
public WeaviateClient weaviateClient() {
return new WeaviateClient(new Config("http", "localhost:8080"));
}
@Bean
public VectorStore vectorStore(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) {
return WeaviateVectorStore.builder(weaviateClient, embeddingModel)
.objectClass("CustomClass") // Optional: defaults to "SpringAiWeaviate"
.consistencyLevel(ConsistentLevel.QUORUM) // Optional: defaults to ConsistentLevel.ONE
.filterMetadataFields(List.of( // Optional: fields that can be used in filters
MetadataField.text("country"),
MetadataField.number("year")))
.build();
}
メタデータのフィルタリング
Weaviate ストアでは、汎用的でポータブルなメタデータフィルターも活用できます。
例: 次のいずれかのテキスト式言語を使用できます。
vectorStore.similaritySearch(
SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression("country in ['UK', 'NL'] && year >= 2020").build());
または、Filter.Expression
DSL を使用してプログラム的に次のようにします。
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression(b.and(
b.in("country", "UK", "NL"),
b.gte("year", 2020)).build()).build());
これらの (ポータブル) フィルター式は、フィルターが使用される (英語) 独自の Weaviate に自動的に変換されます。 |
例: この移植可能なフィルター式:
country in ['UK', 'NL'] && year >= 2020
独自の Weaviate GraphQL フィルター形式に変換されます。
operator: And
operands:
[{
operator: Or
operands:
[{
path: ["meta_country"]
operator: Equal
valueText: "UK"
},
{
path: ["meta_country"]
operator: Equal
valueText: "NL"
}]
},
{
path: ["meta_year"]
operator: GreaterThanEqual
valueNumber: 2020
}]
Docker で Weaviate を実行する
ローカル Weaviate インスタンスをすぐに使い始めるには、Docker で実行します。
docker run -it --rm --name weaviate \
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
-e QUERY_DEFAULTS_LIMIT=25 \
-e DEFAULT_VECTORIZER_MODULE=none \
-e CLUSTER_HOSTNAME=node1 \
-p 8080:8080 \
semitechnologies/weaviate:1.22.4
これにより、localhost:8080 でアクセス可能な Weaviate インスタンスが起動します。
WeaviateVectorStore プロパティ
Spring Boot 構成で次のプロパティを使用して、Weaviate ベクトルストアをカスタマイズできます。
プロパティ | 説明 | デフォルト値 |
---|---|---|
| Weaviate サーバーのホスト | localhost:8080 |
| 接続スキーマ | http |
| 認証用の API キー | |
| ドキュメントを保存するためのクラス名 | SpringAiWeaviate |
| 一貫性と速度の間の望ましいトレードオフ | ConsistentLevel.ONE |
| フィルターで使用できるメタデータフィールドを構成します。形式: spring.ai.vectorstore.weaviate.filter-field.<field-name>=<field-type> |