5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Autonomous Database] Data Transformsを使ったベクトル埋め込みを試してみた

Last updated at Posted at 2025-06-06

はじめに

Data Transformsの演算子でベクトル埋め込みができるようになりました。ということで試してみます。
Use Text Embedding Vector in a Data Flow

前提

  • Autonomous Databaseを23aiで構築済み
  • データベース・ユーザーDEMOUSER1を作成し、DWROLEを付与済み
  • OCIユーザー、コンパートメント、テナンシーのOCIDを確認済み。またOCIユーザーでAPI署名キー・ペアを作成し、秘密キー、フィンガープリントを確認済み(OCI Generative AIのアクセスに必要)
  • 2025/6時点で試した情報です

データベースにサンプル表を作成

ADMINユーザーでDatabase Actionsにログインし、データロードでサンプルデータをロードして表を作成します。

image.png

データの中身はこんな感じです。

image.png

成功しました。
image.png

ADMINユーザーに外部ネットワークへのアクセスを許可

続けて、SQLにアクセスします。以下を実行し、ADMINユーザーに外部ネットワークへのアクセスを許可します。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
      host => '*',
      ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                        principal_name => 'admin',
                        principal_type => xs_acl.ptype_db));
END;
/ 

完了しました。

image.png

Data Transformsでデータフローを作成し、実行

Connectionを編集する

Data TransformsにADMINユーザーでログインします。Connectionでデフォルトで作成されているConnectionを編集し、ADMINで接続できるように設定し、Test Connectionで接続ができることを確認します。

image.png

Data Entityを検出する

Data Entityを選択して、Import Data Entitiesをクリックします。

image.png

Autonomous DatabaseのConnectionでDEMOUSER1のDEMO_RECIPESを検出します

image.png

検出できました。

image.png

OCI Generative AIへのConnectionを作成する

ConnectionsでCreate Connectionをクリックし、ServicesからOCI Generative AIを選択し、NEXTをクリックします。

image.png

名前にOCI_GENAI_CONN、OCI URLには以下を設定します。
https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText
そのほかのUser OCID、Tenancy OCID、Compartment OCID、Private Key、Fingerprintは適切な値を入力します。

image.png

接続の確認をします。Test Connectionをクリックすると、Oracle Connectionの選択画面となりますので、Autonomous DatabaseのConnectionを選択します。

image.png

image.png

成功することを確認後、Createをクリックして作成します。

データフローを作成する

左のメニューからProjectsを選択し、Create Data Flowをクリックしてデータフローを作成します。

image.png

Add a Schemaで利用するスキーマを選択します。ConnectionにAutonomous DatabaseのConnection、SchemaにDEMOUSER1を選択し、OKをクリックします。

image.png

Data EntitiyにDEMO_RECIPESが表示されますので、キャンバスにドラッグアンドドロップします。

image.png

上のMachine Learningをクリックし、TextEmbeddingVectorをドラッグアンドドロップし、DEMO_RECIPESからリンクします。

image.png

TextEmbeddingVectorのプロパティを入力していきます。
Generalでは以下のように設定します。

  • AI Service: OCI Generative AI
  • Connection: OCI_GENAI(作成したGenerative AIのConnection)
  • AI Model: cohere.embed-multilingual-v3.0

image.png

Attributeはそのまま

image.png

Column Mappingではchunk_dataをドラッグし、input_textとマッピングします。

image.png

次にTextEmbeedingVectorの右上の+をクリックします。

image.png

Add Data Entityの画面になります。新しい表の設定をしていきます。NameにDEMO_RECIPES_EMBEDと入力し、Nextをクリックします。

image.png

新しくVECTOR_EMBEDDINGデータが追加されていることを確認します。Nextをクリックします。

image.png

プレビューを確認してSAVEします。

image.png

作成したデータ・フローを実行する

実行ボタンをクリックし、データフローを実行してみます。

image.png

右下のData Flow StatusがDoneとなり、成功しました!

image.png

SQLで検索

ADMINユーザーでDatabase ActionsのSQLにアクセスします
OCI Genrative AIのAPIコール用のクレデンシャルを作成します。OCIユーザー、コンパートメント、テナンシーのOCID、秘密キー、フィンガープリントを適切に指定して以下のSQLを実行します。

declare
  jo json_object_t;
  begin
  -- create an OCI credential
  jo := json_object_t();
  jo.put('user_ocid', 'ocid1.user.oc1..aaaa***********************');
  jo.put('tenancy_ocid', 'ocid1.tenancy.oc1..aaaa****************************************');
  jo.put('compartment_ocid', 'ocid1.compartment.oc1..aaaaaa**********************************************************');
  jo.put('private_key', '-----BEGIN RSA PRIVATE KEY-----
:
-----END RSA PRIVATE KEY-----');
  jo.put('fingerprint', '**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**');
  dbms_output.put_line(jo.to_string);
  dbms_vector.create_credential(
    credential_name => 'OCI_CRED',
    params          => json(jo.to_string));
  end;
  /

続けてクエリを実行します。例えば、”さっぱりしたものが食べたい”で検索してみました。

SELECT id, recipe, description
FROM demouser1.demo_recipes_embed
ORDER BY vector_distance(vector_embedding , (SELECT to_vector(et.embed_vector) embed_vector
FROM
dbms_vector_chain.utl_to_embeddings('さっぱりしたものが食べたい', 
JSON('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')) t,
JSON_TABLE (t.column_value, '$[*]'
COLUMNS (
embed_id NUMBER PATH '$.embed_id',
embed_data VARCHAR2 ( 4000 ) PATH '$.embed_data',
embed_vector CLOB PATH '$.embed_vector')) et), COSINE) FETCH EXACT FIRST 4 ROWS ONLY;

さっぱりした料理が出力されました。(ペペロンチーノは違う気がしますが、、)

image.png

試していて気づいたことをいくつか

Test Connectionで失敗した場合は、選択したADBにクレデンシャルの残骸が残る

いずれも後で削除しましたが、USER_CREDENTIALSを検索してみると作成した覚えがないTEST_CREDで始まるクレデンシャルが存在。

select * from user_credentials;

CREDENTIAL_NAME          USERNAME                                                                     WINDOWS_DOMAIN COMMENTS                                                                              ENABLED 
------------------------ ---------------------------------------------------------------------------- -------------- ------------------------------------------------------------------------------------- ------- 
CRED_ADMIN               oracleidentitycloudservice/yuka.arashi@oracle.com                            null           {"comments":"Created via DBMS_CLOUD.create_credential"}                               TRUE    
OCI$RESOURCE_PRINCIPAL   ADMIN                                                                        null           {"comments":"Created resource principal credential via DBMS_CLOUD.create_credential"} TRUE    
OCI_CRED                 ocid1.user.oc1..aaaaaaaaz56xoppdvh6dgui6v2mes5jbsg2qelcgcv3u227lxqg4bfzzhbaa null           {"comments":"Created native credential via DBMS_CLOUD.create_credential"}             TRUE    
TEST_CRED_2025MAY26_0044 ocid1.user.oc1..aaaaaaaaz56xoppdvh6dgui6v2mes5jbsg2qelcgcv3u227lxqg4bfzzhbaa null           {"comments":"Created native credential via DBMS_CLOUD.create_credential"}             TRUE    


Elapsed: 00:00:00.015
4行が選択されました。

表も。
image.png

フロー実行時はクレデンシャルを都度作成し、完了すると削除されるよう

作成したデータフローのコードを参照してみると、DT_AI_CREDという名前のクレデンシャルを削除―作成―削除していました。

image.png

image.png

image.png

us-chicago-1では成功するが、ap-osaka-1はInternal Errorになる

まだすべてのリージョンで利用できるというわけではないようです。

image.png

TextEmbeddingVectorの入力はCLOBのみのよう

生成されるコードを見るとdbms_vector_chain.utl_to_embeddingを実行していますが、入力がSUBSTR関数で2000文字で区切られていました。そのためSUBSTR関数の入力に利用できない配列の型(VECTOR_ARRAY_T)は使えなさそうです。

image.png

おわりに

Data Transformsでベクトルの埋め込みを試してみました。他にもDatabase Actionsのデータ・ロードを呼びだす機能も新しくリリースされていますし、Autonomous Databaseのデータ変換ツールとしてどんどん機能が拡張されているような気がします。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?