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