AlloyDB for PostgreSQL 的最佳化函式可讓您使用較小、較快的 Proxy 模型,處理大多數使用 AI 函式的 SQL 查詢,僅在必要時才改用較大的大型語言模型 (LLM)。這種做法可減少逐列分類或篩選工作,進而減少遠端 LLM 呼叫次數,降低營運成本並提升查詢回應速度。
由於會遠端呼叫大型語言模型 (LLM),AlloyDB AI 函式 (例如 ai.if()) 可能會有高延遲。最佳化函式會使用較小、在本機訓練的代理模型處理查詢,解決延遲問題。這些模型會使用 LLM 的輸出內容做為可靠資料來源,並根據資料樣本進行訓練。
系統會在執行階段使用 LLM,對資料列樣本進行準確度檢查。為執行這項檢查,AlloyDB 會使用 LLM 為樣本資料列產生標籤,並與 Proxy 模型預測結果進行比較,以驗證準確度。如果準確度檢查失敗,查詢會改用 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) );請在
ai.if()函式中使用PREPARE陳述式,表示查詢必須使用最佳化函式。這個陳述式會在背景觸發模型的非同步訓練。模型只會在符合下列條件時進行訓練:
- 查詢中只有一個
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;如果符合下列任一條件,系統就不會使用訓練過的 Proxy 模型:
ai.if()中參照的內容或嵌入資料欄有所變更。兩個資料欄必須屬於同一個資料表。- 提供給內容欄的提示會變更。
- 查詢結構會變更,導致
query_id不同。 - 查詢開頭的準確度檢查未達門檻。
在這種情況下,查詢會改用 LLM,AlloyDB 則會傳回警告。
選用。模型訓練期間也會執行準確度檢查,因此請執行下列指令,停用整個資料庫環境的準確度驗證檢查。
ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;將
DATABASE_NAME替換為資料庫名稱。
重新訓練代理模型
如果基礎資料表資料有大幅變更,您可以再次執行 PREPARE 陳述式,重新訓練 Proxy 模型。重新準備查詢會啟動新的訓練要求,取代現有的 Proxy 模型。
限制
如果變更來源內容欄、嵌入欄或提供給 ai.if() 函式的提示,則必須發出新的 PREPARE 陳述式。AlloyDB 會訓練最佳化函式,以逼近提示和輸入資料的獨特組合行為。