最適化された関数のトラブルシューティング

AlloyDB for PostgreSQL で最適化された AI 関数を実行するときに、モデル トレーニング、クエリの準備、パフォーマンスのフォールバックの問題を解決するには、クエリから返された警告またはエラーに対して推奨される修正を適用します。

パフォーマンスの低下が予想されます。最適化された AI 関数は使用できません

説明

この警告は、クエリが LLM の使用にフォールバックしたことを示します。これは、最適化された関数がまだトレーニング中であるか、準備されていないか、ランタイム精度検証チェックに失敗した場合、または ai.if() 関数で参照されているコンテンツ列とエンベディング列が同じテーブルに属していない場合に発生します。小さなテーブルの場合、プロキシモデルが適切に一般化されず、精度が 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 はトレーニング済みのプロキシモデルを使用せず、次のようなエラーを生成します。

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 はトレーニング済みのプロキシモデルを使用してクエリを処理します。