AlloyDB for PostgreSQL 的最佳化函式可讓您使用較小、較快的 Proxy 模型,處理大多數使用 AI 函式的 SQL 查詢,僅在必要時才改用較大的大型語言模型 (LLM)。這種做法可盡量減少遠端 LLM 呼叫,避免逐列分類或篩選,進而降低營運成本並提高查詢回應速度。
AlloyDB AI 函式 (例如 ai.if()) 可能會因遠端呼叫大型語言模型 (LLM) 而產生高延遲。最佳化函式會使用在本機訓練的小型代理模型處理查詢,解決延遲問題。這些模型會使用資料樣本進行訓練,並以 LLM 的輸出內容做為可靠資料來源。
系統會在執行階段使用 LLM,對資料列樣本進行準確度檢查。為執行這項檢查,AlloyDB 會使用 LLM 生成範例資料列的標籤,並與代理模型的預測結果進行比較,藉此驗證準確度。如果準確度檢查失敗,查詢會改用 LLM。
使用最佳化函式時,AlloyDB 會執行下列操作:
- 訓練 Proxy 模型:AlloyDB 會使用資料樣本訓練輕量 Proxy 模型。當您使用
PREPARE陳述式搭配ai.if()函式訓練模型,以最佳化查詢時,系統會在背景執行這項操作。 - 執行查詢:使用
EXECUTE陳述式時,AlloyDB 會使用訓練好的代理模型,在本機處理查詢。 - 備用 LLM:如果模型準確度偏低,或 AlloyDB 找不到模型,AlloyDB 會自動改用 LLM。

事前準備
使用最佳化函式前,請先完成下列步驟:
- 使用 psql 或 AlloyDB Studio,以
postgres使用者或有權存取資料所在資料表的使用者身分,連線至資料庫。 確認已安裝
google_ml_integration擴充功能,且版本為 1.5.8 以上。SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.8 (1 row)設定 AlloyDB,以便與 Gemini Enterprise Agent Platform 搭配使用。詳情請參閱「將資料庫與 Agent Platform 整合」。
請確認下列資料庫旗標已啟用。詳情請參閱「設定執行個體的資料庫旗標」。
google_ml_integration.enable_model_supportgoogle_ml_integration.enable_ai_query_enginegoogle_ml_integration.enable_cost_optimized_ai_functions
為要查詢的資料表生成嵌入項目。詳情請參閱「生成及管理資料表的自動嵌入」。
請考量下列事項:
- 來源資料欄必須是
TEXT或VARCHAR類型。 - 為最佳化 AI 函式提供輸入內容的嵌入資料欄,必須是
REAL[]或VECTOR類型。 - 最佳化函式僅適用於提供 Agent Platform 生成模型的區域。如需可用區域清單,請參閱「部署作業和端點」。
- 來源資料欄必須是
使用最佳化函式
如要使用最佳化函式,請搭配 ai.if() 函式使用 PREPARE 和 EXECUTE 陳述式。以下範例說明如何使用最佳化函式:
建立
restaurant_reviews資料表。保留來源資料的review資料欄屬於TEXT類型,用於查詢的review_embedding資料欄則屬於VECTOR(768)類型。CREATE TABLE restaurant_reviews ( id SERIAL, name VARCHAR(64), city VARCHAR(64), review TEXT, review_embedding VECTOR(768) );請使用
PREPARE陳述式搭配ai.if()函式,表示查詢必須使用最佳化函式。這個陳述式會在背景觸發模型的非同步訓練。只有在符合下列條件時,系統才會訓練模型:
- 查詢中只有一個
ai.if()函式。 ai.if()不在子查詢中。
PREPARE positive_reviews_query AS SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;- 查詢中只有一個
使用
EXECUTE陳述式執行查詢。由於PREPARE陳述式僅適用於目前的工作階段,因此您必須在同一個連線上執行EXECUTE陳述式:EXECUTE positive_reviews_query;conn2=> SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;如果符合下列任一條件,系統就不會使用訓練過的代理模型:
ai.if()中參照的內容或嵌入資料欄有所變更。兩個資料欄必須屬於同一個資料表。- 提供給內容欄的提示會變更。
- 查詢結構會變更,導致
query_id不同。 - 查詢在開始時未達到準確度檢查門檻。
在這種情況下,查詢會改用 LLM,AlloyDB 則會傳回警告。
選用。如要停用整個資料庫環境的準確度驗證檢查 (模型訓練期間也會執行準確度檢查,因此必須停用),請執行下列指令。
ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_accuracy_check = off;將
DATABASE_NAME替換為資料庫名稱。
重新訓練代理模型
如果基礎資料表資料有大幅變更,您可以再次執行 PREPARE 陳述式,重新訓練 Proxy 模型。重新準備查詢會啟動新的訓練要求,取代現有的 Proxy 模型。
限制
如果變更來源內容欄、嵌入欄或提供給 ai.if() 函式的提示,則必須發出新的 PREPARE 陳述式。AlloyDB 會訓練最佳化函式,模擬提示和輸入資料獨特組合的行為。