全部產品
Search
文件中心

ApsaraDB RDS:向量產生(rds_embedding)

更新時間:Aug 13, 2026

RDS PostgreSQL的rds_embedding外掛程式提供自訂模型配置和模型調用能力,支援在資料庫中直接將文本轉化為向量。該外掛程式因存在安全風險,已在所有版本中限制建立,本文內容僅適用於已建立該外掛程式的執行個體。

警告

rds_embedding外掛程式因存在安全風險,已在RDS PostgreSQL所有大版本及核心小版本中限制建立,升級核心小版本也無法建立。已建立該外掛程式的執行個體使用不受影響,本文內容僅供此類執行個體參考。

背景

嵌入(embedding)是指將高維資料對應為低維表示的過程。在機器學習和自然語言處理中,嵌入通常用於將離散的符號或對象表示為連續的向量空間中的點。

在產生嵌入時,向量資料的值取決於所參照的模型資料,RDS PostgreSQL支援使用rds_embedding外掛程式,將資料庫中的常值內容,基於引入的外部模型,產生對應的向量資料,還支援使用向量相似性運算子,計算資料庫內文本與模型中指定文本的相似性,實現更多業務情境。

前提條件

  • 執行個體大版本為RDS PostgreSQL 14或以上。

  • 執行個體已建立rds_embedding外掛程式。該外掛程式已在所有版本中限制建立,未建立過該外掛程式或建立後已刪除的執行個體無法再新建立,且升級核心小版本也無法建立。

  • 本文使用的模型為阿里雲百鍊提供的通用文本向量模型,請先前往阿里雲百鍊開通服務,並擷取API-KEY。具體操作,請參見擷取與配置 API Key

    說明

    除了本文使用的通用文本向量模型外,您還可以使用rds_embedding外掛程式提供的函數添加其他模型,具體請參見rds_embedding外掛程式提供的函數

  • RDS PostgreSQL資料庫預設不具備訪問外部網路的能力,因此,需要為RDS PostgreSQL執行個體所屬的VPC配置NAT Gateway,使其允許訪問外部模型。NAT Gateway相關資訊,請參見使用公網NAT GatewaySNAT功能訪問互連網

    NAT Gateway配置步驟

    1. 建立NAT Gateway。

      1. 登入NAT Gateway管理主控台

      2. 公網 NAT Gateway頁面,單擊建立NAT Gateway

      3. (可選)首次使用NAT Gateway時,在公網 NAT Gateway頁面關聯角色建立地區,單擊建立關聯角色,建立服務關聯角色。角色建立成功後即可建立NAT Gateway。

      4. 在建立公網NAT Gateway頁面,配置以下購買資訊,然後單擊立即購買

        說明

        下表僅列出關鍵參數,所有參數的具體資訊,請參見使用公網NAT GatewaySNAT功能訪問互連網

        配置

        說明

        地域

        選擇需要建立公網NAT Gateway的地區,需要與RDS PostgreSQL執行個體同一地區。

        網路及可用區

        選擇公網NAT Gateway執行個體所屬的VPC和交換器,需要與RDS PostgreSQL執行個體的VPC和交換器相同。

        您可以前往RDS管理主控台的資料庫連接頁面,查看目標RDS PostgreSQL執行個體的VPC。

        網路類型

        本文選擇公網 NAT Gateway

        Elastic IP Address

        本文選擇稍後配置

      5. 確認訂單頁面確認公網NAT Gateway的配置資訊後,並單擊立即開通

        建立成功後,您可以在公網 NAT Gateway頁面查看已建立的公網NAT Gateway執行個體。建立成功後,公網 NAT Gateway執行個體將顯示在執行個體列表中,執行個體狀態為待配置,規格/類型為增強型

    2. 為公網NAT Gateway綁定公網IP(EIP)。

      1. NAT Gateway管理主控台頁面,找到建立的公網NAT Gateway執行個體,單擊執行個體ID,進入基本資料頁。

      2. 切換至綁定的Elastic IP Address頁簽,單擊綁定Elastic IP Address

      3. 綁定Elastic IP Address彈窗中,選擇新購Elastic IP Address並綁定

      4. 單擊確定

        綁定成功後,在綁定的Elastic IP Address處查看已綁定的Elastic IP Address。綁定完成後,在綁定的Elastic IP Address頁簽下可查看已綁定的Elastic IP Address,狀態顯示為已指派條目關聯狀態顯示為未使用,表示該Elastic IP Address尚未關聯DNAT或SNAT條目。

    3. 建立SNAT條目。

      1. NAT Gateway管理主控台頁面,找到建立的公網NAT Gateway執行個體,單擊執行個體ID,進入基本資料頁。

      2. 切換至SNAT管理頁簽,單擊建立SNAT條目

      3. 建立SNAT條目頁面,配置以下參數,然後單擊确定创建

        配置

        說明

        SNAT條目粒度

        選擇SNAT條目的粒度。本文以選擇交換器粒度為例:指定交換器下的RDS PostgreSQL執行個體通過配置的公網IP訪問公網。

        選擇交換器

        在下拉式清單中選擇RDS PostgreSQL執行個體的交換器。

        選擇Elastic IP Address地址

        選擇用來提供公網訪問的公網IP。本文以選擇使用單個IP為例,在下拉式清單中選擇已綁定的EIP。

        建立成功後,在SNAT條目列表處查看已配置的SNAT條目。配置完成後,在SNAT管理頁簽下可查看已建立的SNAT條目,狀態顯示為可用

外掛程式開啟與關閉

說明

請使用高許可權帳號執行如下命令。

  • 開啟外掛程式。該外掛程式已在所有版本中限制建立,以下命令僅適用於已建立該外掛程式的執行個體。

    開啟rds_embedding外掛程式前,需要先開啟vector 外掛程式,vector外掛程式提供了必要的向量資料類型支援和基礎向量操作能力(計算向量之間的距離、相似性等),rds_embedding外掛程式專註於將高維文本資料轉化為向量。

    CREATE EXTENSION vector;
    CREATE EXTENSION rds_embedding;
  • 關閉外掛程式。

    DROP EXTENSION rds_embedding;
    DROP EXTENSION vector;

使用樣本

本文以阿里雲大模型服務平台百鍊提供的通用文本向量模型text-embedding-v3版本為例。更多通用文本向量模型請參見模型介紹

  1. 建立測試表test。

    CREATE TABLE test(info text, vec vector(1024) NOT NULL);
  2. 添加模型。

    SELECT rds_embedding.add_model(
        'text-embedding-v3',
        'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding',
        'Authorization: Bearer sk-****',
        '{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}',
        '->''output''->''embeddings''->0->>''embedding'''
    );
    說明

    函數rds_embedding.add_model()的具體使用方法,請參見rds_embedding.add_model()

  3. 插入文本和其對應的向量資料。

    INSERT INTO test SELECT '風急天高猿嘯哀', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '風急天高猿嘯哀')::real[];
    INSERT INTO test SELECT '渚清沙白鳥飛回', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '渚清沙白鳥飛回')::real[];
    INSERT INTO test SELECT '無邊落木蕭蕭下', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '無邊落木蕭蕭下')::real[];
    INSERT INTO test SELECT '不盡長江滾滾來', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', '不盡長江滾滾來')::real[];
    說明

    函數rds_embedding.get_embedding_by_model()的具體使用方法,請參見rds_embedding.get_embedding_by_model()

  4. 計算文本不盡長江滾滾來與test表中各文本的向量相似性。

    SELECT 
        info, 
        vec <=> rds_embedding.get_embedding_by_model(
            'text-embedding-v3', 
            'sk-****', 
            '不盡長江滾滾來'
        )::real[]::vector AS distance 
    FROM 
        test 
    ORDER BY 
        vec <=> rds_embedding.get_embedding_by_model(
            'text-embedding-v3', 
            'sk-****', 
            '不盡長江滾滾來'
        )::real[]::vector;

    返回結果樣本:

          info      |      distance
    ----------------+--------------------
     不盡長江滾滾來 |                  0
     無邊落木蕭蕭下 | 0.42740682200152647
     風急天高猿嘯哀 | 0.5247695147991147
     渚清沙白鳥飛回 | 0.5161883811726116
    (4 rows)

相關參考

通過HTTP請求擷取文本的嵌入向量

使用curl命令,向text-embedding-v3模型的URL地址發送POST請求,擷取到對應文本的嵌入向量。

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v3",
    "input": {
        "texts": [
        "風急天高猿嘯哀",
        "渚清沙白鳥飛回", 
        "無邊落木蕭蕭下", 
        "不盡長江滾滾來"
        ]
    },
    "parameters": {
    		"text_type": "query"
    }
}'

POST傳入的參數如下:

參數

樣本值

說明

location

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

模型的URL地址。此處為向量與排序模型的HTTP請求URL地址。

header

  • Authorization: Bearer sk-****

  • Content-Type: application/json

  • POST請求關於Authorization的內容。

    格式:Authorization: Bearer <API-KEY>

    說明

    擷取API-KEY的具體操作,請參見擷取與配置 API Key

  • Content-Type:請求類型,固定為application/json

data

  • "model": "text-embedding-v3"
  • "input": {
        "texts": [
        "風急天高猿嘯哀",
        "渚清沙白鳥飛回", 
        "無邊落木蕭蕭下", 
        "不盡長江滾滾來"
       ]
    }
  • "parameters": {
        "text_type": "query"
    }

POST請求Body部分的內容。您可以前往向量與排序查看不同模型的Body部分。

  • model:調用模型名稱。

  • input.texts:常值內容。

  • parameters:請求的其他參數,不同模型參數不同。

rds_embedding外掛程式提供的函數

您可以通過psql命令\dx+ rds_embedding查詢該外掛程式支援的所有函數。

             Objects in extension "rds_embedding"
                      Object description
---------------------------------------------------------------
 function rds_embedding.add_model(text,text,text,text,text)
 function rds_embedding.del_model(text)
 function rds_embedding.get_embedding_by_model(text,text,text)
 function rds_embedding.get_response_by_model(text,text,text)
 function rds_embedding.show_models()
 function rds_embedding.update_model(text,text,text,text,text)
 schema rds_embedding
 table rds_embedding.models
(8 rows)

各函數作用:

  • rds_embedding.add_model():向rds_embedding.models表中添加模型。

    調用函數時,傳入的參數如下:

    參數

    參數類型

    樣本值

    說明

    mname

    text

    text-embedding-v3

    模型名稱。

    murl

    text

    https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

    模型的URL地址。

    此處為向量與排序的HTTP請求URL地址。

    mauth_header_template

    text

    Authorization: Bearer sk-****

    POST請求Authorization的內容。

    格式:Authorization: Bearer <API-KEY>

    說明

    擷取API-KEY的具體操作,請參見擷取與配置 API Key

    mbody_template

    text

    {
      "input":{
        "texts":["%s"]
      },
        "model":"text-embedding-v3",
        "parameters":{
           "text_type":"query"
        }
    }

    POST請求Body部分的內容。您可以前往向量與排序查看不同模型的Body部分。

    • input.texts:常值內容,使用%s預留位置,用於在實際使用時替換為具體的文本。

    • model:調用模型名稱。

    • parameters:請求的其他參數,不同模型參數不同。

    membedding_path

    text

    ->''output''->''embeddings''->0->>''embedding''

    從Response擷取embedding的路徑。

    樣本運算式用於從返回的JSON結果中提取嵌入向量的值。

    • output:表示JSON對象中的一個鍵,該鍵對應的值是一個對象。

    • embeddings:表示output對象中的一個鍵,該鍵對應的值是一個數組。

    • 0:表示embeddings數組中的第一個元素。

    • embedding:表示數組元素中的一個鍵,該鍵對應的值是一個字串。

    重要
    • 這個運算式在使用之前需要確保返回的JSON結果中有對應的路徑結構,否則可能會導致提取失敗或出現錯誤。

    • 具體返回的JSON結果可前往向量與排序文檔查看模型的響應樣本。

  • rds_embedding.del_model():刪除rds_embedding.models表中的模型。

    調用函數時,傳入的參數如下:

    參數

    參數類型

    樣本值

    說明

    mname

    text

    text-embedding-v3

    模型名稱。

  • rds_embedding.get_embedding_by_model():擷取指定文本的向量值。

    調用函數時,傳入的參數如下:

    參數

    參數類型

    樣本值

    說明

    mname

    text

    text-embedding-v3

    模型名稱。

    api-key

    text

    sk-****

    API-KEY。

    擷取API-KEY的具體操作,請參見擷取與配置 API Key

    texts

    text

    風急天高猿嘯哀

    待擷取向量值的指定文本。

  • rds_embedding.show_models:展示rds_embedding.models表中的模型。

  • rds_embedding.update_model:更新rds_embedding.models表中的模型。

    調用函數時,傳入的參數同rds_embedding.add_model。

說明

rds_embedding.get_response_by_model暫未開放。