瞭解如何使用 Vertex AI 排序模型 (例如 semantic-ranker-default-003) 排序及重新排序應用程式的搜尋結果。您可以使用 ai.rank() 函式,根據文件與查詢的關聯性為文件評分,並重新排序向量搜尋結果,以改善查詢順序。
Vertex AI 排序 API 會接收文件清單,並根據文件與指定查詢 (搜尋字串) 的相關程度,對這些文件進行排序。使用 ai.rank() 函式時,系統會傳回分數,指出文件回答特定查詢的程度。
如要使用本頁的說明,您必須瞭解 PostgreSQL 適用的 AlloyDB,並熟悉生成式 AI 概念。
AlloyDB 會保留並建立 ai 結構定義。
事前準備
請先完成下列事項,再對搜尋結果進行排序:
- 確認已安裝
google_ml_integration擴充功能。 - 確認
google_ml_integration.enable_model_support旗標已設為on。 - 與 Vertex AI 整合。
- 啟用 Discovery Engine API。
- 取得使用排名模型所需的角色。
啟用 Discovery Engine API
控制台
- 啟用 API
- 在「確認專案」步驟中,按一下「下一步」,確認要變更的專案名稱。
- 在「啟用 API」步驟中,按一下「啟用」,啟用 Discovery Engine API。如果先前已啟用這個 API,這裡就不會列出。
gcloud
如要使用排名模型,必須啟用 Discovery Engine API。
將 PROJECT_ID 替換為您的專案 ID,並將 Google Cloud PROJECT_NUMBER
替換為對應的專案編號。
# Enable Discovery Engine API gcloud services enable discoveryengine.googleapis.com --project=PROJECT_ID gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/discoveryengine.viewer"
Vertex AI 模型不需要註冊模型,即可用於排序。
您可以使用 Vertex AI 模型名稱做為 model_id,如下例所示。
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'])
語意排序器常見的用途是重新排序向量搜尋傳回的結果,以便更妥善地排序查詢。下列範例說明如何針對這個用途使用語意排序模型。這個範例會使用向量搜尋,擷取查詢 personal fitness
equipment 的初始結果集。然後重新排序這些結果,傳回前五個結果。
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;
如需可用模型和用途清單,請參閱「支援的型號」。
與 Vertex 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標記設為true。SQL
- 為目前工作階段啟用 AI 查詢引擎。
SET google_ml_integration.enable_ai_query_engine = true;
- 跨工作階段啟用特定資料庫的功能。
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- 為特定使用者啟用 AI 查詢引擎,適用於所有工作階段和資料庫。
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
控制台
如要修改
google_ml_integration.enable_ai_query_engine旗標的值,請按照「設定執行個體的資料庫旗標」一文中的步驟操作。gcloud
如要使用 gcloud CLI,可以安裝並初始化 Google Cloud CLI,也可以使用 Cloud Shell。
你可以修改
google_ml_integration.enable_ai_query_engine旗標的值。 詳情請參閱「設定執行個體的資料庫旗標」。gcloud alloydb instances update INSTANCE_ID \ --database-flags google_ml_integration.enable_ai_query_engine=on \ --region=REGION_ID \ --cluster=CLUSTER_ID \ --project=PROJECT_ID
- 為目前工作階段啟用 AI 查詢引擎。
必要的角色
如要取得使用 Discovery Engine 排序模型所需的權限,請要求管理員授予您 your project 的 Discovery Engine 檢視者 (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 資料庫,其中包含轉換為嵌入內容的評論說明清單。下列程式碼片段範例說明如何使用排名模型,根據產品評論說明與查詢的語意相似度,擷取排名最高的產品名稱。
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;