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

ApsaraDB RDS:rds_embedding拡張を使用してベクトルを生成する

最終更新日:Nov 12, 2024

ApsaraDB RDS for PostgreSQLのrds_embedding拡張機能を使用すると、ApsaraDB RDS for PostgreSQLインスタンス内のテキストをベクトルに変換できます。 拡張機能は、変換を容易にし、特定のデータ処理要件を満たすために、カスタムモデル構成とモデル呼び出し機能を提供します。

背景情報

埋め込みは、高次元データを低次元空間に変換する技術である。 機械学習および自然言語処理 (NLP) では、埋め込みは、スパース記号またはオブジェクトを連続ベクトルとして表すために使用される一般的な方法です。

埋め込み中に、ベクトルは、参照されるモデルに基づいて取得される。 ApsaraDB RDS for PostgreSQLでは、rds_embedding拡張機能を使用して、RDSインスタンス内のテキストを、参照される外部モデルに基づいてベクトルに変換できます。 ApsaraDB RDS for PostgreSQLでは、ベクトル類似度演算子を使用して、RDSインスタンス内のテキストと参照モデル内の指定されたテキストとの間の類似度を計算することもできます。 これにより、さまざまなシナリオでビジネス要件を満たすことができます。

前提条件

  • RDSインスタンスはPostgreSQL 14.0またはそれ以降のバージョンを実行します。

    説明

    この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。

  • RDSインスタンスのマイナーエンジンバージョンが更新されました。 RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合は、マイナーエンジンバージョンを更新できます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

  • このトピックで使用されるモデルのAPIキーが取得され、RDSインスタンスが存在するリージョンがOpenAIへのアクセスをサポートします。 このトピックでは、OpenAIとシンガポールリージョンの埋め込みモデルを使用します。 詳細については、「埋め込み」をご参照ください。

  • RDSインスタンスはインターネット経由で接続されています。 デフォルトでは、インターネット経由でRDSインスタンスに接続することはできません。 RDSインスタンスが存在する仮想プライベートクラウド (VPC) 用のNATゲートウェイを作成する必要があります。 これにより、インターネット経由でRDSインスタンスに接続でき、RDSインスタンスは外部モデルにアクセスできます。 NAT gatewayの詳細については、「インターネットNAT gatewayのSNAT機能を使用してインターネットにアクセスする」をご参照ください。

    NAT Gateway の作成

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

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

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

      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ゲートウェイに関連付けると、[関連付けられたElastic IPアドレス] タブにEIPが表示されます。已绑定的弹性公网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を選択してインターネットにアクセスします。 この例では、ドロップダウンリストから1つのEIPが選択されています。

        SNATエントリの作成後、[SNATエントリリスト] セクションでSNATエントリを表示できます。已配置的SNAT

拡張機能の有効化または無効化

説明

このセクションのステートメントを実行するには、特権アカウントを使用する必要があります。

  • 拡張機能を有効にします。

    rds_embedding拡張を有効にする前に、vector拡張を有効にする必要があります。 ベクトル拡張は、必要なベクトルデータ型と、ベクトル間の距離や類似度の計算などの基本的なベクトルデータ操作をサポートします。 rds_embeding_extensionは、高次元テキストのみをベクトルに変換します。

    CREATE EXTENSION vector;
    CREATE EXTENSION rds_embedding;
  • 拡張機能を無効にします。

    DROP EXTENSION rds_embedding;
    DROP EXTENSION vector;

  1. testという名前のテストテーブルを作成します。

    CREATE TABLE test(info text, vec vector(1536) NOT NULL);
  2. モデルを追加します。

    SELECT rds_embedding.add_model('text-embedding-ada-002','https://api.openai.com/v1/embeddings','Authorization: Bearer sk-****P','{"input":{"texts":["%s"]},"model":"text-embedding-v1"}','->"data"->0->>"embedding"');
    説明
    • このトピックで使用されるモデルは、OpenAI埋め込みモデルです。 このトピックで使用されるモデルのAPIキーが取得され、RDSインスタンスが存在するリージョンがOpenAIへのアクセスをサポートします。 このトピックでは、OpenAIとシンガポールリージョンの埋め込みモデルを使用します。 詳細については、「埋め込み」をご参照ください。

    • このステップで使用される関数の詳細については、「rds_embedding.add_model() 」をご参照ください。

  3. テキストと必要なベクトルデータを挿入します。

    INSERT INTO test SELECT '风急天高猿啸哀', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '风急天高猿啸哀')::real[];
    INSERT INTO test SELECT '渚清沙白鸟飞回', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '渚清沙白鸟飞回')::real[];
    INSERT INTO test SELECT '无边落木萧萧下', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '无边落木萧萧下')::real[];
    INSERT INTO test SELECT '不尽长江滚滚来', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[];
    説明

    このステップで使用される関数の詳細については、「rds_embedding.get_embedding_by_model() 」をご参照ください。

  4. テストテーブル内のテキストの各部分のベクトルと、テキストの類似性を計算します

    SELECT info, vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[]::vector AS distance FROM test ORDER BY vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[]::vector;

    サンプル出力:

          info      |      distance
    ----------------+--------------------
     不尽长江滚滚来 |                  0
     无边落木萧萧下 | 0.6855717919553399
     风急天高猿啸哀 | 0.7423166439170339
     渚清沙白鸟飞回 | 0.7926204045363088
    (4 rows)

関連ドキュメント

HTTPリクエストを使用してテキストから埋め込みベクトルを取得する

curlコマンドを実行して、POSTリクエストを

埋め込みモデルを使用して、必要なテキストの埋め込みベクトルを取得します。

curl https://api.openai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "input": "Your text string goes here",
    "model": "text-embedding-ada-002"
  }'

次の表に、POSTリクエストに設定されているパラメーターを示します。

パラメーター

説明

場所

https://api.openai.com/v1/embeddings

モデルURL。 この例では、値はHTTP上の埋め込みモデルのURLであり、OpenAPI公式ドキュメントで説明されています。

-H

  • 承認: ベアラーsk-9 **** 6

  • Content-Type: application/json

  • 権限付与: POSTリクエスト内の権限付与コンテンツ。

    形式:

    承認: ベアラ <OpenAI APIキー>

    説明

    APIキーの取得方法の詳細については、

    OpenAI公式ウェブサイト」をご参照ください。

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

-d

  • "input": "Your text string goes here"
  • "model": "text-embedding-ada-002"

POSTリクエストの本文。

  • input: テキストコンテンツ

  • model: 呼び出されるモデルの名前

    埋め込みモデルの名前の詳細については、 「OpenAI公式ドキュメント」をご参照ください。

rds_embedding拡張でサポートされる関数

psqlコマンド \dx + rds_embedingを実行して、拡張機能でサポートされているすべての関数を照会できます。

             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-ada-002

    モデル名。

    murl

    text

    https://api.openai.com/v1/embeddings

    モデルURL。

    この例では、HTTPリクエストを使用して取得した埋め込みモデルのURLで、 OpenAPI公式ドキュメントで説明されています。

    mauth_header_template

    text

    承認: ベアラーsk-9 **** 6

    POSTリクエストの承認内容。

    形式:

    承認: ベアラ <OpenAI APIキー>

    説明

    APIキーを取得する方法の詳細については、「OpenAI公式ウェブサイト」をご参照ください。

    mbody_template

    text

    {
      "input":{
        "texts":["%s"]
      },
        "model":"text-embedding-ada-002"
    }

    POSTリクエストの本文。

    • input.text: テキストの内容。 この含有量を % sで表す。 % sを実際のテキストに置き換えることができます。

    • model: 呼び出されるモデルの名前。

      埋め込みモデルの名前の詳細については、「OpenAI公式ドキュメント」をご参照ください。

    membedding_path

    text

    ->"data"->0->>"embedding"

    レスポンス内の埋め込みベクトルへのパス。

    この例の式は、JSON形式の応答から埋め込みベクトルを抽出するために使用されます。

    重要
    • この式を使用する前に、JSON形式のレスポンスに式に準拠したパス構造が含まれていることを確認してください。 そうしないと、抽出が失敗するか、エラーが発生する可能性があります。

    • JSON形式のレスポンスの詳細については、「OpenAI公式ドキュメント」をご参照ください。

  • rds_embedding.del_model(): rds_embedding.modelsテーブルからモデルを削除します。

    この関数を呼び出す場合は、次のパラメーターを設定する必要があります。

    パラメーター

    タイプ

    説明

    mname

    text

    text-embedding-ada-002

    モデル名。

  • rds_embedding.get_embedding_by_model(): 指定したテキストのベクトルを取得します。

    この関数を呼び出す場合は、次のパラメーターを設定する必要があります。

    パラメーター

    タイプ

    説明

    mname

    text

    text-embedding-ada-002

    モデル名。

    apiキー

    text

    sk-9 **** 6

    APIキー。

    APIキーを取得する方法の詳細については、「OpenAI公式ウェブサイト」をご参照ください。

    テキスト

    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は現在利用できません。