https://github.com/ujnak/apexapps/blob/master/exports/multimodal-search.zip
以下のように動作します。
動物(ホッキョクグマとタヌキ)の写真を選択し、そのベクトル埋め込みを生成してPineconeで検索しています。オブジェクト・ストレージに保存している画像とオラクル・データベースの表に保存しているテキストからベクトル埋め込みを生成し、その両方をPineconeのインデックスに保存しています。
テキストを一覧するリージョンとしてResult Textsを作成します。タイプは対話モード・レポート、ソースのSQL問合わせとして以下を記述します。
以下よりアプリケーションの実装について説明します。
検索対象のテキストの準備
検索対象となるテキストを表VEC_TEXTSに保存します。以下のDDLを実行し、表を作成します。
表VEC_TEXTSをソースとした対話グリッドを作成し、検索対象となる(つまり、ベクトル埋め込みを生成しPineconeに保存する対象となる)テキストの入力を行います。
ベクトル埋め込みを生成しPineconeのインデックスにUpsertするボタンを作成します。
ボタン名はUPSERT_VECTORS、ラベルはUpsert Vectors、動作のアクションはページの送信とします。
ボタンUPSERT_VECTORSを押下したときに実行されるプロセスをUpsert Vectorsとして作成します。
ソースのPL/SQLコードに以下を記述します。
Pineconeのインデックスから、テキストより生成したベクトルを削除するボタンを作成します。
ボタン名はDELETE_VECTORS、ラベルはDelete Vectors、動作のアクションはページの送信とします。
ボタンDELETE_VECTORSを押下したときに実行されるプロセスをDelete Vectorsとして作成します。
ソースのPL/SQLコードに以下を記述します。
以上で検索対象となるテキストの入力、ベクトル埋め込みの生成とインデックスへの更新、インデックスからの削除ができるようになりました。
画像を指定した検索
検索に使用する画像を選択するページ・アイテムはP2_IMAGEです。
識別のタイプにファイル参照...を指定します。ラベルはImage Fileとしています。設定の記憶域タイプとしてTable APEX_APPLICATION_TEMP_FILESを選択します。ファイルをパージするタイミングは、End of SessionおよびEnd of Requestのどちらを選択しても動作に違いはありません。
ページ・アイテムP2_TOP_Kにて、検索結果の数を指定します。
ページ・アイテムP2_TYPEの選択リストでは、無指定、image、textのどれかを選択します。Pineconeのインデックスの検索条件のmetadataに含めることで、検索対象を画像とテキストの両方(無指定)、画像のみ(image)、テキストのみ(text)に限定します。
ページ・アイテムP2_PICTUREに、検索に使った画像を表示します。
設定の基準にImage URL stored in Page Item Valueを選択します。ページ・アイテムの値は、ファイルをアップロードしたときに実行されるプロセス内で設定します。
検索はボタンFINDをクリックして実行します。
ボタン名はFIND、ラベルはFind、動作のアクションはページの送信です。
ボタンFINDを押下したときに実行されるプロセスをFind Images and Textsとして作成します。
ソースのPL/SQLコードに以下を記述します。
検索結果を一覧するリージョンを作成します。
画像を一覧するリージョンとしてResult Imagesを作成します。タイプは対話モード・レポート、ソースのSQL問合わせとして以下を記述します。
select c001, n001 from apex_collections where collection_name = 'IMAGES_AND_TEXTS' and c002 = 'image'
列C001に画像が表示されるよう、列の書式のHTML式として以下を記述します。
<img src="&G_PREAUTH_URL.#C001#" width="200"></img>
select t.id, t.text, c.n001 from vec_texts t join (
select c001, n001 from apex_collections where collection_name = 'IMAGES_AND_TEXTS' and c002 = 'text'
) c
on t.id = c.c001
アプリケーションの実装の説明は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完