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

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

最終更新日:Aug 13, 2026

セマンティック検索または検索拡張生成 (RAG) パイプラインを構築する際、テキスト埋め込みの生成には、通常、データベース外部の個別サービスが必要になります。rds_embedding 拡張機能を使用すると、ApsaraDB RDS for PostgreSQL から直接外部の埋め込みモデルを呼び出し、結果のベクトルをデータと共に保存し、コサイン類似度クエリを実行するという、これらすべてをデータベース内で完結させることができます。セキュリティリスクのため、この拡張機能はすべてのバージョンで作成が制限されています。このトピックの内容は、拡張機能がすでに作成されているインスタンスにのみ適用されます。

警告

セキュリティリスクのため、RDS PostgreSQL のすべてのメジャーおよびマイナーエンジンバージョンで rds_embedding 拡張機能の作成が制限されています。マイナーエンジンバージョンをアップグレードしても、この制限は解除されません。拡張機能がすでに作成されているインスタンスは影響を受けず、引き続き使用できます。このトピックの内容は、このようなインスタンスにのみ適用されます。

前提条件

開始する前に、以下が準備できていることを確認してください:

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

  • rds_embedding 拡張機能がすでに作成されているインスタンス。この拡張機能はすべてのバージョンで作成が制限されており、マイナーエンジンバージョンをアップグレードしてもこの制限は解除されません

  • Alibaba Cloud Model Studio の API キー。取得方法については、「API キーの取得」をご参照ください

  • RDS インスタンスが実行されている Virtual Private Cloud (VPC) に設定された NAT ゲートウェイ。RDS PostgreSQL インスタンスはデフォルトでインターネットにアクセスできないため、外部の埋め込みモデルを呼び出すには NAT ゲートウェイが必要です

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

    ステップ 1:インターネット NAT ゲートウェイの作成

    1. NAT ゲートウェイ コンソールにログインします。

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

    3. インターネット NAT ゲートウェイを初めて作成する場合は、[サービスにリンクされたロールの作成] セクションで [サービスにリンクされたロールの作成] をクリックします。

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

      説明

      パラメーターの完全なリストについては、「インターネット NAT ゲートウェイの SNAT 機能を使用したインターネットアクセス」をご参照ください。

      パラメーター

      説明

      [リージョン]

      RDS インスタンスと同じリージョンを選択します。

      [VPC]

      RDS インスタンスと同じ VPC を選択してください。VPC は、ApsaraDB RDS コンソールの[データベース接続]ページで確認できます。

      [VSwitch の関連付け]

      RDS インスタンスと同じ vSwitch を選択します。vSwitch は、ApsaraDB RDS コンソールの[データベース接続]ページで確認できます。

      [アクセスモード]

      [後で設定] を選択します。

    5. [確認] ページで詳細を確認し、利用規約のチェックボックスを選択して [確認] をクリックすると、ゲートウェイが [インターネット NAT ゲートウェイ] ページに表示されます。

      Create NAT gateway

    ステップ 2:Elastic IP アドレス (EIP) とゲートウェイの関連付け

    1. [インターネット NAT ゲートウェイ] ページで、ゲートウェイ ID をクリックし、基本情報タブを開きます。

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

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

      Bind EIP

    4. [OK] をクリックします。EIP が [関連付けられた Elastic IP アドレス] タブに表示されます。

      Bound EIP

    ステップ 3:SNAT エントリの作成

    1. [インターネット NAT ゲートウェイ] ページで、ゲートウェイ ID をクリックして [基本情報] タブを開きます。

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

    3. [SNAT エントリの作成] ページで、以下のパラメーターを設定し、[OK] をクリックします。SNAT エントリが [SNAT エントリリスト] セクションに表示されます。

      パラメーター

      説明

      [SNAT エントリ]

      選択した vSwitch にアタッチされているインスタンスのみがインターネットにアクセスできるように、[vSwitch の指定] を選択します。

      [VSwitch の選択]

      RDS インスタンスの VSwitch を選択します。

      [EIP の選択]

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

      SNAT entry

拡張機能の有効化

特権アカウントを使用して、次のコマンドを実行します。まず vector を有効にします。これは、rds_embedding が依存する vector データ型と操作を提供します。rds_embedding 拡張機能は、すべてのバージョンで作成が制限されています。次のステートメントは、拡張機能がすでに作成されているインスタンスにのみ適用されます。

CREATE EXTENSION vector;
CREATE EXTENSION rds_embedding;

拡張機能を無効にするには:

DROP EXTENSION rds_embedding;
DROP EXTENSION vector;

埋め込みの生成とクエリ

次の例では、Alibaba Cloud Model Studio の text-embedding-v3 モデルを使用して 1024 次元ベクトルを生成し、コサイン類似度クエリを実行します。 モデルの詳細については、「モデルの紹介」をご参照ください。

ステップ 1:テーブルの作成

コンテンツ用の text 列と、埋め込み用の vector(1024) 列を持つテーブルを作成します。

CREATE TABLE test(info text, vec vector(1024) NOT NULL);

ステップ 2:埋め込みモデルの登録

エンドポイント URL、認証ヘッダーテンプレート、リクエストボディテンプレート、およびレスポンスから埋め込みを抽出するための JSON パスを指定して、text-embedding-v3 を登録します。

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'''
);

sk-****をご自身の API キーに置き換えます。

ステップ 3:テキストと埋め込みの挿入

rds_embedding.get_embedding_by_model() をインラインで呼び出して各行を挿入します。この関数はモデル API を呼び出し、指定されたテキストに対する埋め込みベクトルを返します。

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[];

sk-**** をお使いの API キーに置き換えます。

ステップ 4:ベクトル類似度によるクエリ

<=> 演算子 (コサイン距離) を使用して、クエリ文字列とのセマンティック類似性で行をランク付けします。距離 0 はベクトルが同一であることを意味し、値が小さいほど類似性が高くなります。

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;

sk-**** をお客様の API キーに置き換えてください。

期待される出力:

info                                     |      distance
-----------------------------------------+--------------------
 Endless Yangtze River rolls on          |                  0
 Boundless falling leaves rustle down    | 0.42740682200152647
 Clear islet, white sand, birds fly back | 0.5161883811726116
 Windy high sky, apes cry sadly          | 0.5247695147991147
(4 rows)

クエリは最初に "Endless Yangtze River rolls on" (距離 0、完全一致) を返し、次にセマンティック的に最も近い "Boundless falling leaves rustle down" を返します。

関連ドキュメント

モデル API を直接使用した埋め込みの取得

モデルエンドポイントの検証や埋め込み生成のトラブルシューティングを行うには、curl を使用して 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"
    }
}'

パラメーター

値の例

説明

location

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

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

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

テキスト埋め込みモデルのエンドポイント URL。

Authorization ヘッダー

Authorization: Bearer sk-****

フォーマット: Authorization: Bearer <API-KEY>。 API キーを取得するには、「API キーを取得する」をご参照ください。

Content-Type ヘッダー

application/json

固定値。

model

text-embedding-v3

呼び出すモデルの名前。

input.texts

文字列の配列

埋め込むテキストコンテンツ。

parameters.text_type

query

追加のリクエストパラメーター。これらはモデルによって異なります。完全なリストについては、テキスト埋め込みモデルのドキュメントをご参照ください。

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 テーブルに埋め込みモデルを追加します。

rds_embedding.add_model(mname text, murl text, mauth_header_template text, mbody_template text, membedding_path text)

パラメーター

説明

mname

text

text-embedding-v3

モデル名。他の関数を呼び出す際にモデルを識別するために使用されます。

murl

text

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

モデルの HTTP エンドポイント。URL については、テキスト埋め込みモデルのドキュメントをご参照ください。

mauth_header_template

text

Authorization: Bearer sk-****

POST リクエストの認証ヘッダーです。形式は Authorization: Bearer <API-KEY> です。

mbody_template

text

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

POST リクエストボディ。 入力テキストのプレースホルダーとして使用する%sは、呼び出し時に実際のテキストに置き換えられます。 モデルごとのボディ構造については、テキスト埋め込みモデルのドキュメントをご参照ください。

membedding_path

text

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

レスポンスから埋め込みを抽出する JSON パスです。パスの例は、output オブジェクト → embeddings 配列 → 最初の要素 (0) → embedding 文字列値のようにたどります。このパスが、お使いのモデルの実際のレスポンス構造と一致することを確認してください。

重要

使用する前に、membedding_path がモデルによって返される JSON 構造と一致することを確認してください。パスが正しくないと、抽出の失敗やエラーの原因となります。期待されるレスポンス構造については、テキスト埋め込みモデルのドキュメントにあるレスポンスの例をご参照ください。

rds_embedding.get_embedding_by_model()

登録されたモデルを呼び出して、指定されたテキストの埋め込みベクトルを返します。

rds_embedding.get_embedding_by_model(mname text, api-key text, texts text)

パラメーター

説明

mname

text

text-embedding-v3

add_model() で登録されたモデル名。

api-key

text

sk-****

モデルの API キー。取得するには、「API キーの取得」をご参照ください。

texts

text

Windy high sky, apes cry sadly

埋め込む入力テキスト。

rds_embedding.del_model()

rds_embedding.models テーブルからモデルを削除します。

rds_embedding.del_model(mname text)

パラメーター

説明

mname

text

text-embedding-v3

削除するモデルの名前。

rds_embedding.update_model()

rds_embedding.models テーブルの既存のモデルを更新します。rds_embedding.add_model() と同じパラメーターを受け入れます。

rds_embedding.show_models()

rds_embedding.models テーブルに現在登録されているすべてのモデルを一覧表示します。

説明

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