主题
Google Cloud SQL for PostgreSQL
Cloud SQL 是一项全托管的关系型数据库服务,提供高性能、无缝集成和出色的可扩展性。Cloud SQL 与 PostgreSQL 100% 兼容。扩展你的数据库应用,借助 Cloud SQL 的 Langchain 集成构建 AI 驱动的体验。
本模块实现由 Cloud SQL for PostgreSQL 数据库支撑的 EmbeddingStore。
开始之前
要使用本库,你需要先完成以下 步骤:
Maven 依赖
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artificatId>langchain4j-community-cloud-sql-pg</artificatId>
<version>${latest version here}</version>
</dependency>1
2
3
4
5
2
3
4
5
PostgresEmbeddingStore 用法
使用向量存储来保存已嵌入的文本数据并执行向量搜索。PostgresEmbeddingStore 的实例可通过配置所提供的 Builder 创建,它需要以下内容:
PostgresEngine实例- 表名
- schema 名(可选,默认:"public")
- content 列(可选,默认:"content")
- embedding 列(可选,默认:"embedding")
- id 列(可选,默认:"langchain_id")
- 元数据列名(可选)
- 额外的元数据 json 列(可选,默认:"langchain_metadata")
- 被忽略的元数据列名(可选)
- 距离策略(可选,默认:DistanceStrategy.COSINE_DISTANCE)
- 查询选项(可选)
示例用法:
java
import dev.langchain4j.data.document.Metadata;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingMatch;
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingSearchResult;
import dev.langchain4j.engine.EmbeddingStoreConfig;
import dev.langchain4j.engine.PostgresEngine;
import dev.langchain4j.engine.MetadataColumn;
import dev.langchain4j.store.embedding.cloudsql.PostgresEmbeddingStore;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
PostgresEngine engine = new PostgresEngine.Builder()
.projectId("")
.region("")
.instance("")
.database("")
.build();
PostgresEmbeddingStore store = new PostgresEmbeddingStore.Builder(engine, TABLE_NAME)
.build();
List<String> testTexts = Arrays.asList("cat", "dog", "car", "truck");
List<Embedding> embeddings = new ArrayList<>();
List<TextSegment> textSegments = new ArrayList<>();
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
for (String text : testTexts) {
Map<String, Object> metaMap = new HashMap<>();
metaMap.put("my_metadata", "string");
Metadata metadata = new Metadata(metaMap);
textSegments.add(new TextSegment(text, metadata));
embeddings.add(MyEmbeddingModel.embed(text).content());
}
List<String> ids = store.addAll(embeddings, textSegments);
// search for "cat"
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(embeddings.get(0))
.maxResults(10)
.minScore(0.9)
.build();
List<EmbeddingMatch<TextSegment>> result = store.search(request).matches();
// remove "cat"
store.removeAll(singletonList(result.get(0).embeddingId()));1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50