排查优化函数问题

本文档介绍了在使用 优化型 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 使用训练的代理模型来处理查询。