使用最佳化函式加快查詢速度

最佳化函式可讓您使用較小且速度較快的 Proxy 模型處理大部分查詢,只有在必要時才改用較大的 LLM。這種做法可降低作業成本,並提升查詢回應速度。最佳化函式會盡量減少使用 LLM 執行逐列分類或篩選工作,這類工作更適合由 Proxy 模型處理。

由於會遠端呼叫大型語言模型 (LLM),AlloyDB AI 函式 (例如 ai.if()) 可能會出現高延遲問題。最佳化函式會使用較小的本機訓練 Proxy 模型處理查詢,解決延遲問題。這些模型會使用 LLM 的輸出內容做為事實來源,並根據資料樣本進行訓練。

系統會在執行階段使用 LLM,對部分資料列執行準確度檢查。為執行這項檢查,AlloyDB 會使用 LLM 為樣本資料列產生標籤,並與 Proxy 模型的預測結果進行比較,以驗證準確度。如果準確度檢查失敗,查詢會改用 LLM。

使用最佳化函式時,AlloyDB 會執行下列動作:

  1. 訓練 Proxy 模型:AlloyDB 會根據資料樣本訓練輕量型 Proxy 模型。當您使用 PREPARE 陳述式搭配 ai.if() 函式訓練模型,以取得最佳化查詢時,系統會在背景執行這項作業。
  2. 執行查詢:使用 EXECUTE 陳述式時,AlloyDB 會使用訓練好的 Proxy 模型在本機處理查詢。
  3. 改用 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_support
    • google_ml_integration.enable_ai_query_engine
    • google_ml_integration.enable_cost_optimized_ai_functions
  • 為要查詢的資料表生成嵌入項目。詳情請參閱「為表格產生及管理自動嵌入內容」。

  • 請考量下列事項:

    • 來源資料欄必須是 TEXTVARCHAR 類型。
    • 提供最佳化 AI 函式輸入內容的嵌入資料欄必須為 REAL[]VECTOR 型別。
    • 只有在可使用 Agent Platform 生成模型的區域,才能使用最佳化函式。如需可用地區的清單,請參閱「部署和端點」。

使用最佳化函式

如要使用最佳化函式,請搭配 ai.if() 函式使用 PREPAREEXECUTE 陳述式。以下範例說明如何使用最佳化函式:

  1. 建立 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)
    );
    
  2. 使用 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;
    
  3. 使用 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 會傳回警告。

  4. 選用。如要停用整個資料庫環境的準確度驗證檢查 (這是必要步驟,因為模型訓練期間也會執行準確度檢查),請執行下列指令。

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;
    

    DATABASE_NAME 替換成您的資料庫名稱。

重新訓練 Proxy 模型

如果基礎資料表資料有顯著變化,您可以再次執行 PREPARE 陳述式,重新訓練 Proxy 模型。重新準備查詢會啟動新的訓練要求,取代現有的 Proxy 模型。

限制

如果變更來源內容資料欄、嵌入資料欄或提供給 ai.if() 函式的提示,就必須發出新的 PREPARE 陳述式。AlloyDB 會訓練最佳化函式,以近似於提示和輸入資料的獨特組合行為。

後續步驟