semantic-ranker-default-003)对应用的搜索结果进行排名和重新排名。
您可以使用 ai.rank() 函数根据与查询的相关性对文档进行评分,并通过对向量搜索结果进行重新排名来改进它们,以实现更好的查询排序。
Vertex AI Ranking API 会接收一个文档列表作为输入,然后根据这些文档与给定查询(搜索字符串)的相关程度对它们进行排名。使用 ai.rank() 函数时,它会根据文档回答与给定查询的匹配程度返回一个得分。
如需按本页面上的说明操作,您必须了解 AlloyDB Omni,并熟悉生成式 AI 概念。
AlloyDB Omni 会预留并创建 ai 架构。
准备工作
在对搜索结果进行排名之前,请先执行以下操作:
- 配置用户对 Vertex AI 模型的访问权限。
- 验证是否已安装最新版本的
google_ml_integration。如需检查已安装的版本,请运行以下命令:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
如果未安装该扩展程序,或者安装的版本低于 1.5.2,请更新该扩展程序。
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
如果您在运行上述命令时遇到问题,或者在运行上述命令后扩展程序未更新到 1.5.2 版,请与 Google Cloud 支持团队联系。
如需使用 AlloyDB AI 查询引擎功能,请将
google_ml_integration.enable_ai_query_engine标志设置为on。- 使用文本编辑器在用于 AlloyDB Omni 安装的
postgresql.conf配置文件中设置以下标志:google_ml_integration.enable_ai_query_engine = on
- 保存
postgresql.conf文件后,重启 AlloyDB Omni 服务以使更改生效。sudo systemctl restart alloydbomni18
- 使用文本编辑器在用于 AlloyDB Omni 安装的
启用 Discovery Engine API
<p>To use ranking models, you must enable the Discovery Engine API.<br>
Replace <code><var>PROJECT_ID</var></code> with your
Google Cloud project ID and <code><var>PROJECT_NUMBER</var></code>
with your corresponding project number.</p>
<pre class="prettyprint lang-terminal">
# Enable Discovery Engine API
gcloud services enable discoveryengine.googleapis.com --project=<var>PROJECT_ID</var>
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="serviceAccount:service-<var>PROJECT_NUMBER</var>@iam.gserviceaccount.com" \
--role="roles/discoveryengine.viewer"
</pre>
<p>Model registration for ranking isn't required for Vertex AI models.
You can use the Vertex AI model name as the
<code>model_id</code>, which is shown in the following example.
</p>
<pre class="prettyprint lang-sh">
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-default-003',
search_string => 'Affordable family-friendly vacation spots in Southeast Asia?',
documents =>
ARRAY[
'Luxury resorts in South Korea',
'Family vacation packages for Vietnam: Ha Long Bay and Hoi An',
'Budget-friendly beaches in Thailand perfect for families',
'A backpacker guide to solo travel in India'])
</pre>
<p>A common use case for the semantic ranker is to rerank the results returned
by vector search for better query ordering. The following example shows how to
use the semantic ranking model for this use case. The example retrieves an
initial result set for the query <code>personal fitness
equipment</code> using vector search. These results are then re-ranked to
return the top five results.
</p>
<pre class="prettyprint lang-sh">
WITH initial_ranking AS (
SELECT id, description, ROW_NUMBER() OVER () AS ref_number
FROM product
ORDER BY
embedding <=> google_ml.embedding(
'gemini-embedding-001', 'personal fitness equipment')::vector
LIMIT 10
), reranked_results AS (
SELECT index, score
FROM ai.rank(
model_id => 'semantic-ranker-default-003',
search_string => 'personal fitness equipment',
documents => (SELECT ARRAY_AGG(description ORDER BY ref_number) FROM initial_ranking),
top_n => 5)
)
SELECT id, description
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;
</pre>
<p>For a list of available models and use cases, see <a href="/generative-ai-app-builder/docs/ranking#models">Supported models</a>.</p>
与 Vertex AI 集成并安装扩展程序
如需了解详情,请参阅 配置 AlloyDB Omni 安装以查询云端模型。
所需的角色
如需获得使用
Discovery Engine 中的排名模型所需的权限,请让您的管理员为您授予 your project 的 AlloyDB Omni 服务帐号
Discovery Engine Viewer (roles/discoveryengine.viewer) Identity and Access Management (IAM)
角色。如需详细了解如何授予角色,请参阅
管理对项目、文件夹和组织的访问权限。
对搜索结果进行排名
以下 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 |
您要排名的唯一文本字符串数组。 |
如需查看受支持的 Vertex AI 排名模型列表,请参阅支持的模型。
示例
如需使用 Vertex AI 排名模型对搜索结果进行排名,请运行以下查询:
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-default-003',
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
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
假设有一个示例 AlloyDB Omni 数据库,其中包含已转换为嵌入的评价描述列表。以下示例代码段展示了如何使用排名模型根据评价描述与查询的语义相似度来检索排名最高的产品的名称。
WITH initial_ranking 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(
'gemini-embedding-001', 'good desserts')::vector
LIMIT 10
), reranked_results AS (
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-512',
search_string => 'good desserts',
documents => (SELECT ARRAY_AGG(review ORDER BY ref_number) FROM initial_ranking),
top_n => 5)
)
SELECT product_id, name
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;