跳到主要内容

Google Cloud Vertex AI 排序 API

简介

Google Cloud Vertex AI 排序 API 是一个强大的工具,通过提高检索文档与给定查询的相关性来增强搜索结果。与传统搜索方法不同,它利用先进的机器学习算法来理解查询和文档的语义上下文,提供更精确和相关的结果。通过分析查询与每个文档之间的语义关系,API 可以根据计算出的相关性分数重新排序候选文档,确保最相关的结果出现在搜索结果页面的顶部。

Maven 依赖

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

使用方法

要配置模型,您需要指定:

  • Google Cloud 项目 ID,
  • 项目编号,
  • 位置(例如 us-central1europe-west1),
  • 以及您想要使用的模型。

注意:您可以在 Google Cloud 控制台中找到项目编号,或者通过运行 gcloud projects describe your-project-id 命令。

您可以通过 score(text, query)score(segment, query) 方法对单个字符串或 TextSegment 进行评分。

也可以使用 scoreAll(segments, query) 方法对多个字符串或 TextSegment 进行评分:

VertexAiScoringModel scoringModel = VertexAiScoringModel.builder()
.projectId(System.getenv("GCP_PROJECT_ID"))
.projectNumber(System.getenv("GCP_PROJECT_NUM"))
.projectLocation(System.getenv("GCP_LOCATION"))
.model("semantic-ranker-512")
.build();

Response<List<Double>> score = scoringModel.scoreAll(Stream.of(
"天空呈现蓝色是由于一种称为瑞利散射的现象。" +
"阳光包含彩虹的所有颜色。蓝光的波长比其他颜色短," +
"因此更容易散射。",

"白日横跨的画布,\n" +
"阳光学会舞蹈和嬉戏。\n" +
"蓝色,散射光的色调,\n" +
"一种轻柔明亮的低语。"
).map(TextSegment::from).collect(Collectors.toList()),
"为什么天空是蓝色的?");

// [0.8199999928474426, 0.4300000071525574]

如果您传递具有特定 title 键的 TextSegment,排序模型可以在计算中考虑这些元数据。 要指定自定义标题键,您可以使用 titleMetadataKey() 构建器方法。

您可以将评分模型与 AiServices 及其 contentAgregator() 方法一起使用, 该方法接受一个可以指定评分模型的 ContentAggregator 类:

VertexAiScoringModel scoringModel = VertexAiScoringModel.builder()
.projectId(System.getenv("GCP_PROJECT_ID"))
.projectNumber(System.getenv("GCP_PROJECT_NUM"))
.projectLocation(System.getenv("GCP_LOCATION"))
.model("semantic-ranker-512")
.build();

ContentAggregator contentAggregator = ReRankingContentAggregator.builder()
.scoringModel(scoringModel)
...
.build();

RetrievalAugmentor retrievalAugmentor = DefaultRetrievalAugmentor.builder()
...
.contentAggregator(contentAggregator)
.build();

return AiServices.builder(Assistant.class)
.chatLanguageModel(...)
.retrievalAugmentor(retrievalAugmentor)
.build();