排解最佳化函式問題

本文說明使用最佳化 AI 函式時可能遇到的錯誤。同時提供錯誤範例和建議的修正方式。

預期效能會降低。無法使用最佳化 AI 函式

說明

這項警告表示查詢已改用 LLM。如果最佳化函式仍在訓練中、從未準備完成、未通過執行階段準確度驗證檢查,或是 ai.if() 函式參照的內容和嵌入資料欄不屬於同一個資料表,就會發生這種情況。如果是較小的資料表,Proxy 模型可能無法妥善泛化,準確度通常低於 95%,因此 AlloyDB 預設會使用 LLM。

導致錯誤的查詢範例

EXECUTE positive_reviews_query;
  • 等待完成最佳化函式訓練。
  • 請確認使用 PREPARE 陳述式正確準備查詢。
  • 確認 ai.if() 函式參照的內容和嵌入欄屬於同一個資料表。
  • 最佳化函式 (預先發布版) 更適合用於較大的資料表。您也可以使用以陣列為基礎的 AI 函式來提升效能。
  • 如要略過執行階段準確度檢查 (例如在開發環境中),請將整個資料庫環境的 google_ml_integration.runtime_accuracy_check 設為 off

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;
    

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

查詢未處理任何資料列,或模型準備作業失敗

說明

如果查詢未處理任何資料列,主要原因是未產生嵌入內容,或是整個嵌入內容資料欄都含有 NULL 值。這會導致查詢準備作業失敗,因為系統不會對任何含有 NULL 嵌入內容的資料列進行取樣。

  • 使用最佳化函式前,請先為資料生成嵌入項目。
  • 確認嵌入資料欄不含 NULL 值。
  • 如果查詢只有 WHERE 子句中的常數值不同,可能仍會使用現有的訓練模型。

使用最佳化 AI 函式,但效能仍不佳

說明

請確認您未超過 Gemini Enterprise Agent Platform 配額。即使使用最佳化的 AI 函式,初始執行階段準確度檢查仍需針對部分資料列呼叫遠端 LLM。配額不足可能會導致這項初步檢查速度緩慢或失敗。

檢查 Agent Platform 配額,並視需要要求增加配額,確保初始執行階段準確率檢查能順利進行。

ERROR: function ai.if(prompt => text, embedding => vector) does not exist

說明

如果您在呼叫 ai.if() 函式時,一併傳遞 model_id 參數和嵌入資料欄,AlloyDB 就不會使用訓練過的 Proxy 模型,並產生類似下列的錯誤:

testdb=# select ai.if('Is the rating positive?' || review, review_embedding, 'gemini-2.5-pro') from restaurant_reviews;
ERROR:  function ai.if(text, vector, unknown) does not exist
LINE 1: select ai.if('Is the rating positive?' || review, review_embe...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

請確認您在呼叫 ai.if() 函式時,未傳遞 model_id 值。這樣可確保 AlloyDB 使用訓練好的 Proxy 模型處理查詢。