Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PLSQLをAIオーケストレータに昇華

 PLSQLをAIオーケストレータに昇華

JPOUG#16で発表した内容になります。
PLSQLでAIを利用するサンプルです。

Avatar for Takayuki Nishio

Takayuki Nishio

July 23, 2026

More Decks by Takayuki Nishio

Other Decks in Technology

Transcript

  1. しゃちほこオラクル倶楽部 第7回 Oracle Cloud 失注への軌跡 ~ 努力は無駄にならない ~ PL/SQL +

    AI ~データ処理言語から、AIオーケストレータ―へ昇華~ 2026年7月23日 【JPOUG Tech Talk Night #16】 西尾 孝之 - Takayuki Nishio -
  2. オーガナイザー紹介 | 西尾 孝之 / Takayuki Nishio Oracleと山を愛するエンジニア(23年目) 資格 ・ORACLE

    MASTER : Platinum DBA 2019, 12c , 11c , 10g , 9i , 8i ・AWS : Database Speciality , Data Analytics , Machine-Learning 2025 OCI Top Engineers 表彰 認定証 ・マッターホルン登頂…4478m OCI 全資格取得 (2025 IaaS/PaaS) ・モンブラン登頂………4810m ・キリマンジャロ登頂…..5895m
  3. システム構成イメージ ADBのみでLINEを使ったアプリケーションが作成可能。 REST使用のため、APサーバ不要。 本日はPL/SQLとGenAIの部分に着目。 Oracle Cloud Oracle Autonomous AI Database

    26ai REST API エンドポイント LINE用 PL/SQL <メイン機能> ・メッセージ受信 ・メッセージ送信 <AI関連機能> ・OCR ・翻訳 ・センチメント分析 ・グラフ表示 他 本日の範囲 OCI Generative AI
  4. PL/SQLから生成AIを呼び出すための流れ ① Autonomous AI Databaseを作成 ② DBユーザ作成と設定 ③ 作成したDBユーザ用のクレデンシャルを作成 ④

    テストテーブルの作成と、画像データのロード ⑤ PL/SQLによるOCR処理の実行 Qiitaで全文公開中
  5. ⑤ OCR処理の実行 Qiita PL/SQLコード(OCR機能部分)抜粋 どのAIサービスを呼び出すか AIサービスの呼び出しは、基本的には同じ構造。 -- 1. AIサービスのURIを設定 l_uri

    := 'https://document.aiservice.us-chicago-1'oci.oraclecloud.com/20221109/actions/analyzeDocument'; -- 2. JSONボディの組み立て(CLOB) 呼び出しに使うJSONの組み立て l_body_clob := '{"features": [{"featureType": "TEXT_EXTRACTION"}], "processorType":“GENERAL","isZipOutputEnabled":false,"language":"JPN", "document": {"source": "INLINE", "data": "' || APEX_WEB_SERVICE.BLOB2CLOBBASE64(l_blob) || ‘” , "autoRotate": true}}'; -- 3. CLOB を BLOB に変換(AIサービスへはBLOBで送信する必要がある) DBMS_LOB.CREATETEMPORARY(l_body_blob, FALSE); DBMS_LOB.CONVERTTOBLOB( dest_lob => l_body_blob, src_clob => l_body_clob, amount => DBMS_LOB.LOBMAXSIZE, dest_offset => l_dest_offset, src_offset => l_src_offset, blob_csid => DBMS_LOB.DEFAULT_CSID, lang_context=> l_lang_ctx, warning => l_warning ); -- 4. AIサービスへリクエスト送信 l_response := DBMS_CLOUD.SEND_REQUEST( credential_name => l_credential, method => ‘POST‘, AIサービスのURI と JSON uri body => l_uri, => l_body_blob );
  6. ⑤ OCR処理の実行 Qiita PL/SQLコード(OCR機能部分)抜粋 JSONでパラメータ指定できる! が、マニュアルが少ない/みつけにくい -- 1. AIサービスのURIを設定 l_uri

    := 'https://document.aiservice.us-chicago-1'oci.oraclecloud.com/20221109/actions/analyzeDocument'; -- 2. JSONボディの組み立て(CLOB) 日本語を指定 l_body_clob := '{"features": [{"featureType": "TEXT_EXTRACTION"}], "processorType":“GENERAL","isZipOutputEnabled":false,"language":"JPN", "document": {"source": "INLINE", "data": "' || APEX_WEB_SERVICE.BLOB2CLOBBASE64(l_blob) || ‘” , "autoRotate": true}}'; 画像の自動回転 -- 3. CLOB を BLOB に変換(AIサービスへはBLOBで送信する必要がある) DBMS_LOB.CREATETEMPORARY(l_body_blob, FALSE); DBMS_LOB.CONVERTTOBLOB( dest_lob => l_body_blob, src_clob => l_body_clob, amount => DBMS_LOB.LOBMAXSIZE, dest_offset => l_dest_offset, src_offset => l_src_offset, blob_csid => DBMS_LOB.DEFAULT_CSID, lang_context=> l_lang_ctx, warning => l_warning ); -- 4. AIサービスへリクエスト送信 l_response := DBMS_CLOUD.SEND_REQUEST( credential_name => l_credential, method => ‘POST‘, uri body => l_uri, => l_body_blob );
  7. 流れのまとめ ① Autonomous AI Databaseを作成 ② DBユーザ作成と設定 ③ 作成したDBユーザ用のクレデンシャルを作成 ④

    テストテーブルの作成と、画像データのロード ⑤ PL/SQLによるOCR処理の実行 Qiitaで全文公開中
  8. セマンティック検索のチューニング 30万件いれると検索で25秒かかるようになった。専用の索引で0.x秒に。 セマンティック検索では、SELECT文のキーワードと索引のキーワードは一致させる。 -- SELECT文 SELECT embed_data FROM t3_chunk_table ORDER

    BY vector_distance(embed_vector , acnishi.embeddings(p_question), COSINE) fetch first 3 rows only; 一致させる -- 索引の作成(CREATE INDEX) CREATE VECTOR INDEX idx_vec ON t3_chunk_table (embed_vector) ORGANIZATION INMEMORY NEIGHBOR GRAPH DISTANCE COSINE;