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

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

最終更新日:Mar 19, 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インスタンスのメジャーエンジンバージョンは、拡張機能でサポートされています。 詳細については、「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ゲートウェイの作成] をクリックします。
      3. オプション。 インターネットNATゲートウェイページの [サービスにリンクされたロールの作成] セクションで、[サービスにリンクされたロールの作成] をクリックして、サービスにリンクされたロールを作成します。 インターネットNATゲートウェイを初めて作成する場合は、この手順が必要です。 サービスにリンクされたロールの作成後、NAT Gatewayを作成できます。
      4. [インターネットNATゲートウェイ] ページで、パラメーターを設定し、[今すぐ購入] をクリックします。
        説明 次の表に、主要なパラメーターのみを示します。 すべてのパラメーターの詳細については、「インターネット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ゲートウェイ] ページで確認できます。 Create an Internet NAT gateway
    2. EIPをインターネットNATゲートウェイに関連付けます。
      1. [インターネットNATゲートウェイ] ページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
      2. [関連付けられたEIP] タブで、[Elastic IPアドレスのバインド] をクリックします。
      3. [EIPの関連付け] ダイアログボックスで、[EIPの購入と関連付け] を選択します。 Bind Elastic IP Address
      4. [OK] をクリックします。
        EIPをインターネットNATゲートウェイに関連付けると、[関連付けられたEIP] タブにEIPが表示されます。 Associated EIP tab
    3. SNATエントリを作成します。
      1. [インターネットNATゲートウェイ] ページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
      2. [SNAT管理] タブで、[SNATエントリの作成] をクリックします。
      3. [SNATエントリの作成] ページで、パラメーターを設定し、[確認] をクリックします。
        パラメーター説明
        SNATエントリVPC、vSwitch、ECSインスタンス、またはカスタムCIDRブロックのいずれのSNATエントリを作成するかを指定します。 この例では、[vSwitchの指定] が選択されています。 このオプションは、指定されたvSwitchにアタッチされているRDSインスタンスのみが、指定されたパブリックIPアドレスを使用してインターネットにアクセスできることを指定します。
        VSwitchの選択ドロップダウンリストからRDSインスタンスのvSwitchを選択します。
        パブリックIPアドレスの選択インターネットにアクセスする1つ以上のパブリックIPアドレスを選択します。 この例では、[IPアドレスを1つ使用] が選択され、ドロップダウンリストからEIPが選択されます。
        SNATエントリの作成後、[SNATエントリで使用] セクションでSNATエントリを表示できます。 Configured SNAT entry

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

説明

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

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

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

    拡張ベクトルを作成します。拡張の作成rds_embedding; 
  • 拡張機能を無効にします。

    ドロップ拡張rds_embedding;
    DROP延長ベクトル; 

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

    CREATE TABLEテスト (infoテキスト、vecベクトル (1536) NOT NULL);
  2. モデルを追加します。

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

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

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

    INSERT INTO test SELECT '风急天高', rds_embedding.get_embedding_by_model('text-embedding-ada-002 ', 'sk-**** P', ' 风急天高 '):::real[];
    テストに挿入してSELECT '清沙白鸟', rds_embedding.get_embedding_by_model('text-embedding-ada-002 ', 'sk-**** P', ' 清沙白鸟 ')::real[];
    INSERT INTO test SELECT ', rds_embedding.get_embedding_by_model', 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() 」をご参照ください。

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

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

    サンプル出力:

    info | 距離
    ---------------- + --------------------
     不在長江全 | 0
     无落木アットホーム | 0.6855717919553399
     风急天高 | | 0.7423166439170339
     清沙白 | 0.7926204045363088
    (4行) 

参考資料

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

curlコマンドを実行して、POSTリクエストを 埋め込みモデルを使用して、必要なテキストの埋め込みベクトルを取得します。

https://api.openai.com/v1/embeddings \
カール
  -H "Content-Type: application/json" \
  -H "承認: ベアラー $OPENAI_API_KEY" \
  -d '{
    "input": "あなたのテキスト文字列はここに行きます" 、
    "モデル": "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": "あなたのテキスト文字列はここに行きます"
  • "モデル": "text-embedding-ada-002"

POSTリクエストの本文。

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

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

    埋め込みモデルの名前の詳細については、 OpenAI公式ドキュメント

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

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

拡張子「rds_embedding」の
オブジェクト
                      オブジェクトの説明
---------------------------------------------------------------
 関数rds_embedding.add_model (テキスト、テキスト、テキスト、テキスト、テキスト)
 関数rds_embedding.del_model(text)
 関数rds_embedding.get_embedding_by_model(text,text,text)
 関数rds_embedding.get_response_by_model(text,text,text)
 関数rds_embedding.show_models()
 関数rds_embedding.update_model (テキスト、テキスト、テキスト、テキスト、テキスト)
 スキーマrds_embedding
 テーブルrds_embedding.models
(8行) 

関数の説明:

  • 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":{
        "text":["% s"]
      },
        "モデル":"text-embedding-ada-002"
    } 

    POSTリクエストの本文。

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

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

      埋め込みモデルの名前の詳細については、 OpenAI公式ドキュメント

    membedding_path

    text

    ->"データ"->0->>"埋め込み"

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

    この例の式は、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は現在利用できません。