对搜索结果进行排名和评分

本页介绍了如何使用在“模型端点管理”中注册的 Vertex AI 排名模型端点对应用的搜索结果进行排名或评分。

Vertex AI Ranking API 会接受文档列表,并根据文档与给定查询(搜索字符串)的相关性对这些文档进行排名。当您使用 ai.rank() 函数时,该函数会返回文档回答给定查询的准确程度得分。

如需使用本页中的说明,您必须了解 AlloyDB for PostgreSQL 并熟悉生成式 AI 概念。

AlloyDB 会预留 ai 架构,并在您安装 google_ml_integration 扩展程序时尝试创建此架构。如果架构创建失败,请在 google_ml 架构中使用具有相同名称的函数。

准备工作

对搜索结果进行排名

以下 SQL 查询展示了如何对搜索结果进行排名:

SELECT
  ai.rank(
    model_id => 'MODEL_ID',
    search_string => 'SEARCH_STRING',
    documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);

替换以下内容:

参数 说明
MODEL_ID 您定义的模型端点的唯一 ID。
SEARCH_STRING 用于对记录进行排名或评分的搜索字符串。
DOCUMENTS 用于标识记录的唯一字符串。

示例

如需使用已注册的排名端点对搜索结果进行排名,请运行以下查询:

SELECT index, score
FROM
  ai.rank(
    model_id => 'semantic-ranker-512-002',
    search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
    documents =>
      ARRAY[
        'Alloys are made from combination of metals',
        'The best enterprise-ready PostgreSQL database.',
        'You can feel the heat in Alloy apartments.']);

响应是一个表格,其中显示了每份文档以及与搜索查询的相关性得分。以下是示例响应:

 index | score
-------+-------
     1 |  0.03
     2 |  0.02
     3 |  0.01
(3 rows)

我们来看一个 AlloyDB 数据库示例,其中包含已转换为嵌入的评价说明列表。以下代码段示例展示了如何使用排名模型根据评价说明与查询的语义相似性检索排名靠前的商品的名称。该示例假定 text-embedding-005semantic-ranker-512@002 模型端点均已注册。

WITH
  initial_results AS (
    SELECT product_id, name, review, review_id,
            ROW_NUMBER() OVER () AS ref_number
    FROM user_reviews
    ORDER BY
      review_desc_embedding <=> google_ml.embedding(
        'text-embedding-005', 'good desserts')
    LIMIT 100
  ),
reranked AS (
    SELECT
      ai.rank(
        model_id => 'semantic-ranker-512@002',
        search_string => 'good desserts',
        documents => ARRAY_AGG(review ORDER BY ref_number))
    FROM initial_results
  )
SELECT product_id, name
FROM initial_results, reranked
WHERE initial_results.ref_number = reranked.index
ORDER BY reranked.score;

后续步骤