跳到主要内容

Oracle

Oracle 嵌入存储与 Oracle 数据库的 AI 向量搜索功能 集成。

Maven 依赖

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-oracle</artifactId>
<version>1.0.0-beta3</version>

</dependency>

API

  • OracleEmbeddingStore

示例

使用

可以通过配置构建器创建此存储的实例。构建器 要求提供 DataSource 和嵌入表。两个向量之间的距离 使用 余弦相似度 计算,它测量两个向量之间角度的余弦值。

建议配置一个池化连接的 DataSource,例如 通用连接池或 Hikari。连接池将避免重复创建新数据库连接的延迟。

如果您的数据库中已经存在嵌入表,请提供表名。

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();

默认情况下,嵌入表将具有以下列:

名称类型描述
idVARCHAR(36)主键。用于存储嵌入存储生成的 UUID 字符串
embeddingVECTOR(*, FLOAT32)存储嵌入
textCLOB存储文本段
metadataJSON存储元数据

如果您现有表的列与预定义的列名不匹配 或者您想使用不同的列名,可以使用 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。

IVFIndexBuilder 允许在 EmbeddingTable 的嵌入列上配置 IVF(倒排文件平面) 索引。

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();

JSONIndexBuilder 允许在 EmbeddingTable 的元数据列的键上配置 基于函数的索引

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.jsonIndexBuilder()
.createOption(CreateOption.CREATE_OR_REPLACE)
.key("name", String.class, JSONIndexBuilder.Order.ASC)
.key("year", Integer.class, JSONIndexBuilder.Order.DESC)
.build())
.build();

有关 Oracle AI 向量搜索的更多信息,请参阅 文档