跳到主要内容

Google Cloud SQL for PostgreSQL

Cloud SQL 是一款全托管的关系型数据库服务,提供高性能、无缝集成和出色的可扩展性。Cloud SQL 与 PostgreSQL 100% 兼容。利用 Cloud SQL 的 Langchain 集成,可将数据库应用扩展以构建 AI 驱动的体验。

本模块实现了基于 Cloud SQL for PostgreSQL 数据库的 EmbeddingStore

开始前的准备

使用本库之前,需要完成以下步骤:

  1. 选择或创建一个 Cloud Platform 项目。
  2. 为项目启用计费功能。
  3. 启用 CloudSQL API。
  4. 配置认证。

Maven 依赖

<dependency>
<groupId>dev.langchain4j</groupId>
<artificatId>langchain4j-community-cloud-sql-pg</artificatId>
<version>${latest version here}</version>
</dependency>

PostgresEmbeddingStore 使用方法

使用向量存储来存储文本嵌入数据并执行向量搜索。PostgresEmbeddingStore 实例通过配置提供的 Builder 创建,需要以下参数:

  • PostgresEngine 实例
  • 表名
  • schema 名(可选,默认:"public")
  • 内容列(可选,默认:"content")
  • 嵌入列(可选,默认:"embedding")
  • ID 列(可选,默认:"langchain_id")
  • 元数据列名(可选)
  • 附加元数据 JSON 列(可选,默认:"langchain_metadata")
  • 忽略的元数据列名(可选)
  • 距离策略(可选,默认:DistanceStrategy.COSINE_DISTANCE)
  • 查询选项(可选)

示例用法:

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);
// 搜索 "cat"
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(embeddings.get(0))
.maxResults(10)
.minScore(0.9)
.build();
List<EmbeddingMatch<TextSegment>> result = store.search(request).matches();
// 删除 "cat"
store.removeAll(singletonList(result.get(0).embeddingId()));