Oracle Databaseの外部でのテキスト文字列からBINARY埋込みへの変換

サードパーティのBINARYベクトル埋込みモデルにアクセスして、テキストからBINARY埋込みへの変換を実行します。

警告:

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

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

Cohere ubinary embed-english-v3.0モデルを使用して、「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プロバイダ(この場合はCohere)の資格証明を設定し、UTL_TO_EMBEDDINGをコールします。
    1. DBMS_VECTOR.CREATE_CREDENTIALを実行して、資格証明を作成および格納します。

      Cohereには、次の認証パラメータが必要です:

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

      <access token>を独自の値に置き換えます。後で、UTL_TO_EMBEDDINGコールのJSONパラメータを宣言するときに、この資格証明名を参照します。

      EXEC DBMS_VECTOR.DROP_CREDENTIAL('COHERE_CRED');
      
      DECLARE
        jo json_object_t;
      BEGIN
        jo := json_object_t();
        jo.put('access_token', '<access token>');
        DBMS_VECTOR.CREATE_CREDENTIAL(
          credential_name   => 'COHERE_CRED',
          params            => json(jo.to_string));
      END;
      /
    2. DBMS_VECTOR.UTL_TO_EMBEDDINGをコールして、BINARY埋込みを生成します。

      ノート:

      サポートされているすべてのRESTエンドポイントのリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。
      var params clob;
      
      BEGIN
      :params := '
                   {
                    "provider": "cohere",
                    "credential_name": "COHERE_CRED",
                    "url": "https://api.cohere.ai/v1/embed",
                    "model": "embed-english-v3.0",
                    "input_type": "search_query",
                    "embedding_types": ["ubinary"]
                   }';
      END;
      /
      
      SELECT TO_VECTOR(FROM_VECTOR(DBMS_VECTOR.UTL_TO_EMBEDDING('hello', JSON(:params))),*,BINARY);

    生成されたBINARY埋込みは次のようになります:

    TO_VECTOR(FROM_VECTOR(DBMS_VECTOR.UTL_TO_EMBEDDING('HELLO',JSON(:PARAMS))),*,BIN
    --------------------------------------------------------------------------------
    [137,218,245,195,211,132,169,63,43,22,12,93,112,93,85,208,145,27,76,245,99,222,1
    21,63,1,161,200,24,1,30,202,233,208,2,113,27,119,78,123,192,132,115,187,146,58,1
    36,40,63,221,52,68,241,53,88,20,99,85,248,114,177,100,248,100,158,94,53,57,97,18
    2,129,14,64,173,236,107,109,37,195,173,49,128,113,204,183,158,55,139,10,205,65,4
    0,53,243,247,134,63,125,133,55,230,129,64,165,103,102,46,251,164,213,139,227,225
    ,66,98,112,100,64,145,98,80,97,192,149,77,43,114,146,197]