使用 AlloyDB AI 查询引擎执行智能 SQL 查询

本页面介绍了如何使用 AlloyDB AI 查询引擎提供的 AI 赋能的 SQL 运算符进行查询。您可以使用 ai.ifai.rankai.generate 运算符将自然语言与 SQL 查询相结合。

如需使用本页上的说明,您必须了解 AlloyDB 并熟悉生成式 AI 概念。

AlloyDB AI 会预留并创建 ai 架构。

准备工作

在 SQL 运算符中使用自然语言之前,请执行以下操作:

与 Vertex AI 集成并安装扩展程序

  1. 与 Vertex AI 集成
  2. 确保已安装最新版本的 google_ml_integration
    1. 如需检查已安装的版本,请运行以下命令:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. 如果未安装该扩展程序,或者安装的版本低于 1.4.3,请运行以下命令来更新该扩展程序:

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      如果您在运行上述命令时遇到问题,或者在运行上述命令后扩展程序未更新到 1.4.3 版,请与 AlloyDB 支持团队联系。

    3. 确保版本是最新的后,运行 upgrade_to_preview_version 过程来安装预览版功能:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

使用您所在区域支持的 Gemini 模型

如果您的 AlloyDB for PostgreSQL 集群位于不支持 gemini-2.0-flash 的区域,您可以使用 model_id parameter 在您所在的区域中使用其他可用的 Gemini 模型。

或者,您也可以注册 Gemini 模型端点,并将该模型 ID 提供给 AI 操作员。如需了解详情,请参阅使用模型端点管理注册和调用远程 AI 模型

以下示例展示了如何注册另一个 Gemini 端点。在此示例中,第二个 Gemini 端点是 gemini-2.0-flash 的全球端点。您可以通过传递 model_id =>gemini-2.0-flash-global` 作为附加实参,将此已注册的模型与 AI 运算符搭配使用。

CALL
  google_ml.create_model(
    model_id => 'gemini-2.0-flash-global',
    model_type => 'llm',
    model_provider => 'google',
    model_qualified_name => 'gemini-2.0-flash',
    model_request_url =>  'https://aiplatform.googleapis.com/v1/projects/<project_id>/locations/global/publishers/google/models/gemini-2.0-flash:generateContent',
    model_auth_type => 'alloydb_service_agent_iam'
);

在查询中使用过滤条件

AlloyDB AI 提供多项基于 AI 的 SQL 函数,可让您直接在数据库查询中使用自然语言处理和 LLM,包括 ai.ifai.rank 运算符。

过滤条件

如需评估以自然语言陈述的条件是否满足,请使用 ai.if/google_ml.if 运算符。该函数会返回布尔值 true 或 false,如果未明确检测到输出,则返回 false

- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool

以下示例展示了如何使用 ai.if 运算符作为过滤条件,查找好评数超过 500 且位于人口超过 10 万的城市中的餐厅。该示例使用 restaurant_reviews,其中包含评价和城市位置等数据。ai.if 运算符可帮助您了解评价情感,并将数据库中的位置与 Gemini 关于这些位置的人口的一般知识相结合。

SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
  AI.IF(r.location_city || ' has a population OF more than 100,000 AND the following is a positive review; Review: ' || r.review)
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;

以下示例展示了如何使用在使用您所在区域支持的 Gemini 模型中注册的模型。

SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
  AI.IF(r.location_city || ' has a population of more than 100,000 AND the following is a positive review; Review: ' || r.review, model_id => 'gemini-2.0-flash-global')
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;

对使用 if 运算符的查询执行联接

如需执行联接操作,请将 ai.if/google_ml.if 运算符与联接搭配使用。以下示例查询会查找餐厅菜单中提及每种菜单项的评价数量。

    SELECT item_name, COUNT(*)
    FROM menu_items JOIN user_reviews
      ON ai.if(
        prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
    GROUP BY item_name;

文本生成和总结

ai.generate 函数通过将提供的数据与用户的提示相结合来生成文本。

-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT

例如,您可以使用以下查询为每条用户评价生成简明摘要。

SELECT
  ai.generate(
    prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews

为查询结果评分

如果您需要使用自定义的自然语言指令对查询结果进行排序,请使用 ai.rank 运算符。此函数可让您提供描述排名条件的提示,并返回每个商品的得分。

-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real

例如,以下查询使用 LLM 的评分获取了 20 条最积极的餐厅评价。

SELECT review AS top20
FROM user_reviews
ORDER BY ai.rank(
  'Score the following review according to these rules:
  (1) Score OF 8 to 10 IF the review says the food IS excellent.
  (2) 4 to 7 IF the review says the food is ok.
  (3) 1 to 3 IF the review says the food is not good. Here is the review:' || review) DESC
LIMIT 20;

后续步骤