跳到主要内容

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>1.0.0-beta3</version>
</dependency>

PostgresEmbeddingStore 使用

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

  • PostgresEngine 实例
  • 表名
  • 模式名(可选,默认:"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()));