Oracle
Oracle埋め込みストアは、OracleデータベースのAIベクトル検索機能と統合されています。
Maven依存関係
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-oracle</artifactId>
<version>1.0.0-beta4</version>
</dependency>
API
OracleEmbeddingStore
例
使用方法
このストアのインスタンスは、ビルダーを設定することで作成できます。ビルダーには、DataSourceと埋め込みテーブルを提供する必要があります。2つのベクトル間の距離は、2つのベクトル間の角度のコサインを測定するコサイン類似度を使用して計算されます。
Universal Connection PoolやHikariなど、接続をプールするDataSourceを設定することをお勧めします。接続プールは、新しいデータベース接続を繰り返し作成する際の遅延を回避します。
データベースに埋め込みテーブルが既に存在する場合は、テーブル名を提供します。
EmbeddingStore embeddingStore = OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable("my_embedding_table")
.build();
テーブルがまだ存在しない場合は、ビルダーにCreateOptionを渡すことで作成できます。
EmbeddingStore embeddingStore = OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable("my_embedding_table", CreateOption.CREATE_IF_NOT_EXISTS)
.build();
デフォルトでは、埋め込みテーブルには以下の列があります:
名前 | 型 | 説明 |
---|---|---|
id | VARCHAR(36) | 主キー。埋め込みストアが生成するUUID文字列を格納するために使用されます |
embedding | VECTOR | 埋め込みベクトルを格納するために使用されます |
text | CLOB | 埋め込みに関連するテキストを格納するために使用されます |
metadata | JSON | 埋め込みに関連するメタデータを格納するために使用されます |
埋め込みテーブルの列名をカスタマイズするには、EmbeddingTableビルダーを使用します:
OracleEmbeddingStore embeddingStore =
OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable(EmbeddingTable.builder()
.createOption(CREATE_OR_REPLACE) // テーブルが既に存在する場合はNONEを使用
.name("my_embedding_table")
.idColumn("id_column_name")
.embeddingColumn("embedding_column_name")
.textColumn("text_column_name")
.metadataColumn("metadata_column_name")
.build())
.build();
ビルダーでは、Indexクラスのインスタンスを提供することで、EmbeddingTableの埋め込み列とメタデータ列にインデックスを作成できます。Indexクラスのインスタンスを作成するには、IVFIndexBuilderとJSONIndexBuilderの2つのビルダーが用意されています。
IVFIndexBuilderは、EmbeddingTableの埋め込み列に**IVF(Inverted File Flat)**インデックスを設定できます。
OracleEmbeddingStore embeddingStore =
OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable(EmbeddingTable.builder()
.createOption(CreateOption.CREATE_OR_REPLACE) // テーブルが既に存在する場合はNONEを使用
.name("my_embedding_table")
.idColumn("id_column_name")
.embeddingColumn("embedding_column_name")
.textColumn("text_column_name")
.metadataColumn("metadata_column_name")
.build())
.index(Index.ivfIndexBuilder().createOption(CreateOption.CREATE_OR_REPLACE).build())
.build();