Oracle データベース 23ai - AI ベクトル検索
Oracle データベース 23ai (23.4+) の AI ベクトル検索 [Oracle] (英語) 機能は、Spring AI VectorStore
として利用でき、ドキュメントの埋め込みを保存し、類似性検索を実行できます。もちろん、他のすべての機能も利用できます。
Oracle データベース 23ai をローカルで実行する付録では、軽量の Docker コンテナーを使用してデータベースを起動する方法を示します。 |
自動構成
まず、Oracle ベクトルストア Boot スターター依存関係をプロジェクトに追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-oracle-store-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-oracle-store-spring-boot-starter'
}
このベクトルストアを使用してスキーマを初期化する必要がある場合は、適切なコンストラクターで initializeSchema
ブールパラメーターに true を渡すか、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 をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。マイルストーンやスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。 |
OracleVectorStore
に接続して設定するには、データベースのアクセス詳細を提供する必要があります。簡単な設定は、Spring Boot の application.yml
を介して提供できます。
spring: datasource: url: jdbc:oracle:thin:@//localhost:1521/freepdb1 username: mlops password: mlops ai: vectorstore: oracle: index-type: IVF distance-type: COSINE dimensions: 1536
デフォルト値と構成オプションについては、構成パラメーターのリストを確認してください。 |
これで、アプリケーションで OracleVectorStore
をオートワイヤーして使用できるようになります。
@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 Oracle Vector Store
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
構成プロパティ
Spring Boot 構成で次のプロパティを使用して、OracleVectorStore
をカスタマイズできます。
プロパティ | 説明 | デフォルト値 |
---|---|---|
| 最近傍検索インデックス型。オプションは、 | NONE |
| 検索距離型は NOTE: ベクトルが正規化されている場合は、最高のパフォーマンスを得るために | COSINE |
| 挿入前および類似性検索のために、ベクトル正規化 (true の場合) を有効にできます。 CAUTION: これを true に設定することは、検索リクエストの類似性しきい値を許可する要件です。 NOTE: ベクトルが正規化されている場合は、最高のパフォーマンスを得るために | false |
| 埋め込みディメンション。明示的に指定されていない場合、OracleVectorStore は最大値 65535 を許可します。ディメンションは、テーブルの作成時に埋め込み列に設定されます。ディメンションを変更する場合は、テーブルを再作成する必要があります。 | 65535 |
| 起動時に既存のテーブルを削除します。 | false |
| 必要なスキーマを初期化するかどうか。 | false |
| インデックスが存在する場合にリクエストされる精度ターゲットを示します。デフォルトでは無効になっています。デフォルトのインデックス精度 (95) を上書きするには、[1,100] の範囲の整数を指定する必要があります。精度を低くすると、速度と精度のバランスが取れた近似類似検索が実現します。 | -1 ( |
メタデータのフィルタリング
OracleVectorStore
を使用すると、汎用的でポータブルなメタデータフィルターを活用できます。
例: 次のいずれかのテキスト式言語を使用できます。
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()));
これらのフィルター式は、同等の OracleVectorStore フィルターに変換されます。 |
手動構成
Spring Boot 自動構成を使用する代わりに、OracleVectorStore
を手動で構成できます。そのためには、プロジェクトに Oracle JDBC ドライバーと JdbcTemplate
自動構成の依存関係を追加する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-oracle-store</artifactId>
</dependency>
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
アプリケーションで OracleVectorStore
を構成するには、次の設定を使用できます。
@Bean
public VectorStore vectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) {
return new OracleVectorStore(jdbcTemplate, embeddingModel, true);
}