生成嵌入

选择文档版本:

google_ml_integration 扩展程序包含两个不同命名空间(publicgoogle_ml)中的嵌入函数。本页面介绍了如何使用这些命名空间中的函数生成文本嵌入。

public 架构中的 embedding() 函数可与任何 Vertex AI 嵌入模型搭配使用,而无需注册端点。如果您想传递任何自定义信息(例如任务类型),请注册端点,然后在 google_ml 架构中使用 google_ml.embedding() 函数。如需详细了解如何注册端点,请参阅注册模型

嵌入工作原理

假设某个数据库在 AlloyDB Omni 上运行,具有以下特点:

  • 该数据库包含一个表:items。此表中的每一行描述了您的企业销售的商品。

  • items 表包含一列:complaints。此 TEXT 列会存储针对每件商品记录的买家投诉。

  • 该数据库与 Vertex AI Model Garden 集成,因而可访问 gemini-embedding-001 英语模型。

尽管此数据库存储了与商品相关的投诉,但这些投诉以纯文本形式存储,因此很难进行查询。例如,如需查看哪些商品因为客户收到错误的商品颜色而受到最多投诉,则可以对表执行普通 SQL 查询,查找各种关键字匹配项。但是,此方法仅匹配包含这些精确关键字的行。

例如,SELECT * FROM item WHERE complaints LIKE "%wrong color%" 等基本 SQL 查询不会返回 complaints 字段仅包含 The picture shows a blue one, but the one I received was red 的行。

使用 LLM 支持的嵌入的 SQL 查询可以帮助针对此类查询返回语义上相似的回答。通过应用嵌入,您可以在此示例的表中查询其投诉与给定文本提示(例如 It was the wrong color)具有语义相似度的商品。

如需生成基本嵌入,请选择以下架构之一。

准备工作

如需让 AlloyDB Omni 生成嵌入,请执行以下操作:

  • postgres 用户身份运行并连接到 AlloyDB Omni
  • 验证 google_ml_integration 扩展程序是否已安装。

    CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

    如果您没有必要的权限,请与数据库管理员联系以执行更新。或者,您也可以等待系统自动将新版本发布到您的集群。

  • 验证 google_ml_integration.enable_model_support 标志是否已设置为 on
  • 您必须先将 AlloyDB Omni 配置为与 Vertex AI 搭配使用,然后才能通过 AlloyDB Omni 数据库生成嵌入。
  • 为数据库用户授予执行嵌入函数以生成嵌入的权限:

    \c 'DB_NAME';
    GRANT EXECUTE ON FUNCTION google_ml.embedding TO 'USER_NAME';

    请替换以下内容:

    • DB_NAME:应针对其授予权限的数据库的名称
    • USER_NAME:应为其授予权限的用户的名称

生成嵌入

使用 google_ml.embedding() SQL 函数调用文本嵌入模型。

如需调用模型并生成嵌入,请运行以下查询:

SELECT
 google_ml.embedding(
   model_id => 'MODEL_ID',
   content => 'CONTENT');

替换以下内容:

  • MODEL_ID:限定模型 ID,例如 gemini-embedding-001
  • CONTENT:要转换为向量嵌入的文本。

生成嵌入的示例

本部分列出了一些使用已注册模型端点生成嵌入的示例。

Gemini 嵌入模型

如需为已注册的 gemini-embedding-001 模型端点生成预测,请运行以下语句:

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

如果您的 AlloyDB Omni 集群和 Vertex AI 端点位于不同的项目中,请执行以下操作:

  1. 运行以下 CALL 语句。

       CALL
         google_ml.create_model(
           model_id => 'gemini-embedding-001',
           model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict',
           model_provider => 'google',
           model_type => 'text_embedding',
           model_auth_type => 'alloydb_service_agent_iam',
           model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
           model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform'
         );
    
  2. 如需为已注册的 gemini-embedding-001 模型端点生成预测,请运行以下语句:

      SELECT
        google_ml.embedding(
          model_id => 'gemini-embedding-001',
          content => 'AlloyDB is a managed, cloud-hosted SQL database service');
    

OpenAI 嵌入模型

如需为 OpenAI 注册的 text-embedding-ada-002 模型端点生成预测,请运行以下语句:

   SELECT
     google_ml.embedding(
       model_id => 'text-embedding-ada-002',
       content => 'e-mail spam');

如需为 OpenAI 注册的 text-embedding-3-smalltext-embedding-3-large 模型端点生成预测,请运行以下语句:

 SELECT
   google_ml.embedding(
     model_id => 'text-embedding-3-small',
     content => 'Vector embeddings in AI');

后续步骤