すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ベクトル生成 (rds_embedding)

最終更新日:Nov 09, 2025

RDS PostgreSQL の rds_embedding 拡張機能は、データベース内で直接テキストをベクトルに変換します。この拡張機能は、カスタムモデル設定とモデル呼び出し機能を提供します。これにより、テキストからベクトルへの変換が簡素化および高速化され、データ処理のニーズに対応します。

背景

埋め込みとは、高次元データを低次元表現にマッピングするプロセスです。機械学習と Natural Language Processing (NLP) では、埋め込みは離散的な記号やオブジェクトを連続的なベクトル空間の点として表現します。

埋め込みを生成する際、ベクトルデータの値は参照されるモデルのデータに依存します。RDS PostgreSQL は rds_embedding 拡張機能をサポートしており、インポートされた外部モデルに基づいてデータベース内のテキストからベクトルデータを生成します。この拡張機能は、ベクトル類似性オペレーターを使用して、データベース内のテキストとモデル内の指定されたテキストとの類似性を計算することもサポートしています。この機能により、より多くのビジネスシナリオが可能になります。

前提条件

  • RDS インスタンスは PostgreSQL 14 以降を実行していること。

  • メジャーエンジンバージョンが要件を満たしているが、拡張機能がサポートされていない場合は、マイナーエンジンバージョンをアップグレードしてください。たとえば、PostgreSQL 17 を実行する RDS インスタンスの場合、マイナーエンジンバージョンは 20241030 以降である必要があります。詳細については、「マイナーエンジンバージョンをアップグレードする」をご参照ください。

  • このトピックでは、Alibaba Cloud Model Studio の text embedding model を使用します。Alibaba Cloud Model Studio をアクティブ化し、API キーを取得します。詳細については、「API キーを取得する」をご参照ください。

    説明

    このトピックで使用される text embedding model に加えて、rds_embedding 拡張機能が提供する関数を使用して他のモデルを追加できます。詳細については、「rds_embedding 拡張機能が提供する関数」をご参照ください。

  • デフォルトでは、RDS PostgreSQL データベースはインターネットにアクセスできません。外部モデルへのアクセスを許可するには、RDS PostgreSQL インスタンスが存在する VPC に NAT Gateway を設定します。NAT Gateway の詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。

    NAT ゲートウェイの設定手順

    1. NAT ゲートウェイを作成します。

      1. NAT Gateway コンソールにログインします。

      2. [インターネット NAT ゲートウェイ] ページで、[インターネット NAT ゲートウェイの作成] をクリックします。

      3. オプション。 [インターネット NAT ゲートウェイ] ページの [サービスリンクロールの作成] セクションで、[サービスリンクロールの作成] をクリックしてサービスリンクロールを作成します。インターネット NAT ゲートウェイを初めて作成する場合、このステップは必須です。サービスリンクロールが作成された後、インターネット NAT ゲートウェイを作成できます。

      4. 購入ページで、次のパラメーターを設定し、[今すぐ購入] をクリックします。

        説明

        次の表では、主要なパラメーターのみを説明します。すべてのパラメーターの詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。

        パラメーター

        説明

        リージョン

        インターネット NAT ゲートウェイを作成するリージョンを選択します。リージョンは RDS インスタンスのリージョンと同じである必要があります。

        VPC

        インターネット NAT ゲートウェイが属する VPC を選択します。VPC は RDS インスタンスの VPC と同じである必要があります。ApsaraDB RDS コンソールの [データベース接続] ページに移動して、RDS インスタンスの VPC を表示できます。

        VSwitch の関連付け

        インターネット NAT ゲートウェイが属する vSwitch を選択します。vSwitch は RDS インスタンスの vSwitch と同じである必要があります。ApsaraDB RDS コンソールの [データベース接続] ページに移動して、RDS インスタンスの vSwitch を表示できます。

        アクセスモード

        この例では、[後で設定] が選択されています。

      5. [確認] ページで情報を確認し、利用規約のチェックボックスを選択して、[確認] をクリックします。

        [インターネット NAT ゲートウェイ] ページでインターネット NAT ゲートウェイを見つけることができます。创建NAT网关

    2. EIP をインターネット NAT ゲートウェイに関連付けます。

      1. インターネット NAT ゲートウェイ ページで、新しいインターネット NAT ゲートウェイを見つけ、その ID をクリックして [基本情報] タブに移動します。

      2. [関連付けられた Elastic IP アドレス] タブで、[Elastic IP アドレスのバインド] をクリックします。

      3. [EIP の関連付け] ダイアログボックスで、[EIP の購入と関連付け] を選択します。绑定弹性公网IP

      4. [OK] をクリックします。

        EIP をインターネット NAT ゲートウェイに関連付けると、EIP が [関連付けられた Elastic IP アドレス] タブに表示されます。已绑定的弹性公网IP

    3. SNAT エントリの作成

      1. インターネット NAT ゲートウェイ ページで、新しいインターネット NAT ゲートウェイを見つけ、その ID をクリックして [基本情報] タブに移動します。

      2. [SNAT 管理] タブで、[SNAT エントリの作成] をクリックします。

      3. [SNAT エントリの作成] ページで、次のパラメーターを設定し、[OK] をクリックします。

        パラメーター

        説明

        SNAT エントリ

        VPC、vSwitch、ECS インスタンス、またはカスタム CIDR ブロックの SNAT エントリを作成するかどうかを指定します。この例では、[vSwitch の指定] が選択されています。このオプションは、指定された vSwitch にアタッチされている RDS インスタンスのみが、指定されたパブリック IP アドレスを使用してインターネットにアクセスできることを指定します。

        VSwitch の選択

        ドロップダウンリストから RDS インスタンスの vSwitch を選択します。

        EIP の選択

        インターネットにアクセスするために 1 つ以上の EIP を選択します。この例では、ドロップダウンリストから単一の 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;

使用例

このトピックでは、Alibaba Cloud Model Studio が提供する 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 'Windy high sky, apes cry sadly', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Windy high sky, apes cry sadly')::real[];
    INSERT INTO test SELECT 'Clear islet, white sand, birds fly back', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Clear islet, white sand, birds fly back')::real[];
    INSERT INTO test SELECT 'Boundless falling leaves rustle down', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Boundless falling leaves rustle down')::real[];
    INSERT INTO test SELECT 'Endless Yangtze River rolls on', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Endless Yangtze River rolls on')::real[];
    説明

    rds_embedding.get_embedding_by_model() 関数の詳細については、「rds_embedding.get_embedding_by_model()」をご参照ください。

  4. テキスト Endless Yangtze River rolls on と test テーブルの各テキストエントリとの間のベクトル類似性を計算します。

    SELECT 
        info, 
        vec <=> rds_embedding.get_embedding_by_model(
            'text-embedding-v3', 
            'sk-****', 
            'Endless Yangtze River rolls on'
        )::real[]::vector AS distance 
    FROM 
        test 
    ORDER BY 
        vec <=> rds_embedding.get_embedding_by_model(
            'text-embedding-v3', 
            'sk-****', 
            'Endless Yangtze River rolls on'
        )::real[]::vector;

    結果の例:

                   info                 |      distance
    ------------------------------------+--------------------
     Endless Yangtze River rolls on     |                  0
     Boundless falling leaves rustle down | 0.42740682200152647
     Windy high sky, apes cry sadly     | 0.5247695147991147
     Clear islet, white sand, birds fly back | 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": [
        "Windy high sky, apes cry sadly",
        "Clear islet, white sand, birds fly back", 
        "Boundless falling leaves rustle down", 
        "Endless Yangtze River rolls on"
        ]
    },
    "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 キーの取得方法の詳細については、「API キーを取得する」をご参照ください。

  • Content-Type: リクエストタイプ。値は application/json に固定されます。

data

  • "model": "text-embedding-v3"
  • "input": {
        "texts": [
        "Windy high sky, apes cry sadly",
        "Clear islet, white sand, birds fly back", 
        "Boundless falling leaves rustle down", 
        "Endless Yangtze River rolls on"
       ]
    }
  • "parameters": {
        "text_type": "query"
    }

POST リクエストボディのコンテンツ。さまざまなモデルのボディコンテンツを表示するには、テキスト埋め込みモデルに移動します。

  • 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 キーの取得方法の詳細については、「API キーを取得する」をご参照ください。

    mbody_template

    text

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

    POST リクエストボディのコンテンツ。さまざまなモデルのボディコンテンツを表示するには、テキスト埋め込みモデルに移動します。

    • input.texts: テキストコンテンツ。%s プレースホルダーを使用します。これは使用中に実際のテキストに置き換えられます。

    • model: 呼び出すモデルの名前。

    • parameters: その他のリクエストパラメーター。これらのパラメーターはモデルによって異なります。

    membedding_path

    text

    ->''output''->''embeddings''->0->>''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 キー。

    API キーの取得方法の詳細については、「API キーを取得する」をご参照ください。

    texts

    text

    Windy high sky, apes cry sadly

    ベクトル値を取得する指定されたテキスト。

  • rds_embedding.show_models: rds_embedding.models テーブルのモデルを表示します。

  • rds_embedding.update_model: rds_embedding.models テーブルのモデルを更新します。

    この関数が呼び出されるときに渡されるパラメーターは、rds_embedding.add_model のパラメーターと同じです。

説明

rds_embedding.get_response_by_model はまだ利用できません。