Oracle
Oracle Embedding Store 与 Oracle Database 的 AI Vector Search 功能集成。
Maven 依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-oracle</artifactId>
<version>1.18.1-beta28</version>
</dependency>
API
OracleEmbeddingStoreOracleChatMemoryStore
示例
用法
可通过配置构建器创建该存储的实例。构建器 要求提供 DataSource 和嵌入表。两个向量之间的距离 使用余弦相似度计算, 它测 量两个向量夹角的余弦值。
建议配置可池化连接的 DataSource,例如 Universal Connection Pool 或 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();
默认情况下,嵌入表将具有以下列:
| Name | Type | Description |
|---|---|---|
| id | VARCHAR(36) | Primary key. Used to store UUID strings which are generated when the embedding store |
| embedding | VECTOR(*, FLOAT32) | Stores the embedding |
| text | CLOB | Stores the text segment |
| metadata | JSON | Stores the metadata |
如果现有表的列与预定义列名不匹配, 或者你希望使用不同的列名,可以使用 EmbeddingTable 构建器来配置嵌入表。
OracleEmbeddingStore embeddingStore =
OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable(EmbeddingTable.builder()
.createOption(CREATE_OR_REPLACE) // use NONE if the table already exists
.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(Inverted File Flat) 索引。
OracleEmbeddingStore embeddingStore =
OracleEmbeddingStore.builder()
.dataSource(myDataSource)
.embeddingTable(EmbeddingTable.builder()
.createOption(CreateOption.CREATE_OR_REPLACE) // use NONE if the table already exists
.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) // use NONE if the table already exists
.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 Vector Search 的更多信息,请参阅文档。
聊天记忆
OracleChatMemoryStore 可用于在 Oracle Database 中持久化聊天记忆。
创建表:
CREATE TABLE chat_memory (
memory_id VARCHAR2(255) PRIMARY KEY,
content CLOB NOT NULL
);
在聊天记忆中使用:
ChatMemoryStore store = OracleChatMemoryStore.builder()
.dataSource(myDataSource)
.tableName("chat_memory")
.build();
ChatMemory chatMemory = MessageWindowChatMemory.builder()
.id("conversation-1")
.maxMessages(10)
.chatMemoryStore(store)
.build();
OracleChatMemoryStore 按 memory id 存储一行,所有消息以 JSON 形式序列化在 content 列中。