パブリックRESTプロバイダを使用したテキスト文字列から埋込みへの変換

Cohere、生成AI、Google AI、Hugging Face、OpenAI、またはVertex AIによるパブリックにホストされたサードパーティの埋込みモデルを使用して、テキストから埋込みへの変換を実行します。

サードパーティの埋込みモデルを使用して、ベクトル索引の移入に使用されるデータをベクトル化できます。索引付けするデータとユーザーの入力問合せの両方に同じ埋込みモデルを使用する必要があります。この例では、ユーザーの入力問合せをその場でベクトル化する方法を確認できます。

ここでは、ユースケースに応じて、DBMS_VECTORまたはDBMS_VECTOR_CHAINパッケージのチェーン可能ユーティリティ関数UTL_TO_EMBEDDINGをコールできます(単数形の「embedding」であることに注意してください)。この例では、DBMS_VECTOR.UTL_TO_EMBEDDING APIを使用します。

UTL_TO_EMBEDDINGは、(配列ではなく) VECTOR型を直接返します。

警告:

データベースの特定の機能により、たとえば、REST APIへのアクセスを容易にするJSON仕様を使用して、第三者によって個別に提供されるサービスにアクセスできる場合があります。

お客様によるこれらの機能の使用は、お客様自身の責任においてのみ行われ、お客様は、当該第三者サービスの使用に関連するあらゆる条件を遵守する責任を負います。第三者のサービスに関するその他の条件にかかわらず、お客様は、かかるデータベース機能の使用によって、そのリスクを受諾し、当該アクセスにより生じた一切の損害について、Oracleの責任または法的責任を明示的に除外することになります。

パブリックのサードパーティ埋込みモデルを使用して、ユーザーの入力テキスト「hello」をベクトル埋込みに変換するには:

  1. ローカル・ユーザーとしてOracle Databaseに接続します。
    1. SQL*Plusにsysユーザーとしてログインし、sysdbaとして接続します。
      conn sys/password as sysdba
      CREATE TABLESPACE tbs1
      DATAFILE 'tbs5.dbf' SIZE 20G AUTOEXTEND ON
      EXTENT MANAGEMENT LOCAL
      SEGMENT SPACE MANAGEMENT AUTO;
      SET ECHO ON
      SET FEEDBACK 1
      SET NUMWIDTH 10
      SET LINESIZE 80
      SET TRIMSPOOL ON
      SET TAB OFF
      SET PAGESIZE 10000
      SET LONG 10000
    2. ローカル・ユーザー(docuser)を作成し、必要な権限を付与します。
      DROP USER docuser cascade;
      CREATE USER docuser identified by docuser DEFAULT TABLESPACE tbs1 quota unlimited on tbs1;
      GRANT DB_DEVELOPER_ROLE, create credential to docuser;
    3. ローカル・ユーザー(docuser)として接続します:
      CONN docuser/password
  2. HTTPプロキシ・サーバーを設定します(構成されている場合)
    EXEC UTL_HTTP.SET_PROXY('<proxy-hostname>:<proxy-port>');
  3. DBMS_NETWORK_ACL_ADMINプロシージャを使用して、ホストへの接続を許可するための接続権限をdocuserに付与します。

    この例では、*を使用して任意のホストを許可します。ただし、接続するホストを明示的に指定できます。

    BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'docuser',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  4. アクセスするRESTプロバイダの資格証明を設定し、UTL_TO_EMBEDDINGをコールします。
    • 生成AIの使用:

      1. DBMS_VECTOR.CREATE_CREDENTIALを実行して、OCI資格証明(OCI_CRED)を作成および格納します。

        生成AIには、次の認証パラメータが必要です。
        { 
        "user_ocid"       : "<user ocid>",
        "tenancy_ocid"    : "<tenancy ocid>",
        "compartment_ocid": "<compartment ocid>",
        "private_key"     : "<private key>",
        "fingerprint"     : "<fingerprint>" 
        }

        後で、UTL_to_EMBEDDINGコールのJSONパラメータを宣言するときに、この資格証明名を参照します。

        ノート:

        生成された秘密キーは次のように表示されます。
        -----BEGIN RSA PRIVATE KEY-----
        <private key string>
        -----END RSA PRIVATE KEY-----
        (BEGINENDの行を除く) <private key string>値を単一行または複数行として渡します。
        exec dbms_vector.drop_credential('OCI_CRED');
        declare
          jo json_object_t;
        begin
          jo := json_object_t();
          jo.put('user_ocid','<user ocid>');
          jo.put('tenancy_ocid','<tenancy ocid>');
          jo.put('compartment_ocid','<compartment ocid>');
          jo.put('private_key','<private key>');
          jo.put('fingerprint','<fingerprint>');
          dbms_vector.create_credential(
            credential_name   => 'OCI_CRED',
            params            => json(jo.to_string));
        end;
        /

        すべての認証パラメータ値を置換します。次に例を示します。

        declare
          jo json_object_t;
        begin
          jo := json_object_t();
          jo.put('user_ocid','ocid1.user.oc1..aabbalbbaa1112233aabbaabb1111222aa1111bb');
          jo.put('tenancy_ocid','ocid1.tenancy.oc1..aaaaalbbbb1112233aaaabbaa1111222aaa111a');
          jo.put('compartment_ocid','ocid1.compartment.oc1..ababalabab1112233abababab1111222aba11ab');
          jo.put('private_key','AAAaaaBBB11112222333...AAA111AAABBB222aaa1a/+');
          jo.put('fingerprint','01:1a:a1:aa:12:a1:12:1a:ab:12:01:ab:a1:12:ab:1a');
          dbms_vector.create_credential(
            credential_name   => 'OCI_CRED',
            parameters        => json(jo.to_string));
        end;
        /
      2. DBMS_VECTOR.UTL_TO_EMBEDDINGをコールします。

        ここでは、cohere.embed-english-v3.0モデルが使用されます。必要に応じて、modelを独自の値に置き換えることができます。

        ノート:

        生成AIでの使用がサポートされているすべてのRESTエンドポイントURLおよびモデルのリストは、「サポートされるサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。
        -- select example
        
        var params clob;
        exec :params := '
        {
          "provider": "ocigenai",
          "credential_name": "OCI_CRED",
          "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
          "model": "cohere.embed-english-v3.0",
          "batch_size": 10
        }';
        
        select dbms_vector.utl_to_embedding('hello', json(:params)) from dual;
        
        -- PL/SQL example
        
        declare
          input clob;
          params clob;
          v vector;
        begin
          input := 'hello';
          params := '
        {
          "provider": "ocigenai",
          "credential_name": "OCI_CRED",
          "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
          "model": "cohere.embed-english-v3.0",
          "batch_size": 10
        }';
        
          v := dbms_vector.utl_to_embedding(input, json(params));
          dbms_output.put_line(vector_serialize(v));
        exception
          when OTHERS THEN
            DBMS_OUTPUT.PUT_LINE (SQLERRM);
            DBMS_OUTPUT.PUT_LINE (SQLCODE);
        end;
        /
    • Cohere、Google AI、Hugging Face、OpenAIおよびVertex AIの使用:

      1. DBMS_VECTOR.CREATE_CREDENTIALを実行して、資格証明を作成および格納します。

        Cohere、Google AI、Hugging Face、OpenAIおよびVertex AIには、次の認証パラメータが必要です。

        { "access_token": "<access token>" }

        後で、UTL_to_EMBEDDINGコールのJSONパラメータを宣言するときに、この資格証明名を参照します。

        exec dbms_vector.drop_credential('<credential name>');
        declare
          jo json_object_t;
        begin
          jo := json_object_t();
          jo.put('access_token', '<access token>');
          dbms_vector.create_credential(
            credential_name   => '<credential name>',
            params            => json(jo.to_string));
        end;
        /

        access_tokenおよびcredential_name値を置き換えます。次に例を示します。

        declare
          jo json_object_t;
        begin
          jo := json_object_t();
          jo.put('access_token', 'AbabA1B123aBc123AbabAb123a1a2ab');
          dbms_vector.create_credential(
            credential_name   => 'HF_CRED',
            params            => json(jo.to_string));
        end;
        /
      2. DBMS_VECTOR.UTL_TO_EMBEDDINGをコールします。

        -- select example
        
        var params clob;
        exec :params := '
        {
          "provider": "<REST provider>",
          "credential_name": "<credential name>",
          "url": "<REST endpoint URL for embedding service>",
          "model": "<embedding model name>"
        }';
        
        select dbms_vector.utl_to_embedding('hello', json(:params)) from dual;
        
        -- PL/SQL example
        
        declare
          input clob;
          params clob;
          v vector;
        begin
          input := 'hello';
        
          params := '
        {
          "provider": "<REST provider>",
          "credential_name": "<credential name>",
          "url": "<REST endpoint URL for embedding service>",
          "model": "<embedding model name>"
        }';
        
          v := dbms_vector.utl_to_embedding(input, json(params));
          dbms_output.put_line(vector_serialize(v));
        exception
          when OTHERS THEN
            DBMS_OUTPUT.PUT_LINE (SQLERRM);
            DBMS_OUTPUT.PUT_LINE (SQLCODE);
        end;
        /

        ノート:

        サポートされているすべてのRESTエンドポイントURLの完全なリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。

        providercredential_nameurlおよびmodelを独自の値に置き換えます。オプションで、追加のRESTプロバイダ・パラメータを指定できます。これを次の例に示します:

        Cohereの例:
        {
          "provider"       : "cohere",
          "credential_name": "COHERE_CRED",
          "url"            : "https://api.cohere.ai/v1/embed",
          "model"          : "embed-english-light-v2.0",
          "input_type"     : "search_query"
        }
        Google AIの例:
        {
          "provider"       : "googleai",
          "credential_name": "GOOGLEAI_CRED",
          "url"            : "https://generativelanguage.googleapis.com/v1beta/models/",
          "model"          : "embedding-001"
        }
        Hugging Faceの例:
        {
          "provider"       : "huggingface",
          "credential_name": "HF_CRED",
          "url"            : "https://api-inference.huggingface.co/pipeline/feature-extraction/",
          "model"          : "sentence-transformers/all-MiniLM-L6-v2"
        }
        OpenAIの例:
        {
          "provider"       : "openai",
          "credential_name": "OPENAI_CRED",
          "url"            : "https://api.openai.com/v1/embeddings",
          "model"          : "text-embedding-3-small"
        }
        Vertex AIの例:
        {
          "provider"       : "vertexai",
          "credential_name": "VERTEXAI_CRED",
          "url"            : "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/publishers/google/models/",
          "model"          : "textembedding-gecko:predict"
        }

    生成された埋込みは次のように表示されます:

    EMBEDDING
    -------------------------------------------------------------------------------------------------------------------------------------
    [8.78423732E-003,-4.29633334E-002,-5.93001908E-003,-4.65480909E-002,2.14333013E-002,6.53376281E-002,-5.93746938E-002,2.10403297E-002,
    4.38376889E-002,5.22960871E-002,1.25104953E-002,6.49512559E-002,-9.26998071E-003,-6.97442219E-002,-3.02916039E-002,-4.74979728E-003,
    -1.08755399E-002,-4.63751052E-003,3.62781435E-002,-9.35919806E-002,-1.13934642E-002,-5.74270077E-002,-1.36667723E-002,2.42995787E-002,
    -6.96804151E-002,4.93822657E-002,1.01460628E-002,-1.56464987E-002,-2.39410568E-002,-4.27529104E-002,-5.65665103E-002,-1.74160264E-002,
    5.05326502E-002,4.31500375E-002,-2.6994409E-002,-1.72731467E-002,9.30535868E-002,6.85951149E-004,5.61876409E-003,-9.0233935E-003,
    -2.55788807E-002,-2.04174276E-002,3.74175981E-002,-1.67872179E-002,1.07479304E-001,-6.64602639E-003,-7.65537247E-002,-9.71965566E-002,
    -3.99636962E-002,-2.57076006E-002,-5.62455431E-002,-1.3583754E-001,3.45946029E-002,1.85191762E-002,3.01524661E-002,-2.62163244E-002,
    -4.05582506E-003,1.72979087E-002,-3.66434865E-002,-1.72491539E-002,3.95228416E-002,-1.05518714E-001,-1.27463877E-001,1.42578809E-002
この例では、各プロバイダのデフォルト設定を使用しています。追加パラメータの詳細は、サードパーティ・プロバイダのドキュメントを参照してください。