このドキュメントでは、最適化された 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 の割り当てを確認し、必要に応じて増加をリクエストして、最初のランタイム精度チェックが遅延なく続行できるようにします。
エラー: 関数 ai.if(prompt => text, embedding => vector) が存在しません
説明
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 はトレーニング済みのプロキシモデルを使用してクエリを処理します。