如需解决在 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 使用经过训练的代理模型来处理查询。