2025年3月13日木曜日

マルチモーダルLLMのGemma3をLM Studioで動かしAPEXアプリケーションから呼び出す

最近GoogleからリリースされたマルチモーダルLLMのGemma3がLM Studioで使えるようになっていたので、写真の説明をしてもらうAPEXアプリケーションを作ってみました。

作成したAPEXアプリケーションは以下のように動きます。ローカルLLMへのプロンプトに含めた画像が正しく解釈されるか確認するためのアプリなので、凝ったことはしていません。


イメージを含めたプロンプトはLM StudioのUIからも送信できるのでAPEXでアプリケーションを作らなくてもいいのですが、PL/SQLコードのテストにはなります。

作成したAPEXアプリケーションのエクスポートを以下に置きました。実質的にホーム・ページだけのアプリケーションです。
https://github.com/ujnak/apexapps/blob/master/exports/local-lm-studio-multimodal-gemma3.zip

以下にアプリケーションについて簡単に説明します。

すべての機能はホーム・ページに実装しています。

写真をアップロードするページ・アイテムとしてP1_PHOTOを作成しています。タイプイメージ・アップロードです。

ストレージタイプ表APEX_APPLICATION_TEMP_FILESファイルをパージするタイミングとしてリクエストの終わりを選択しています。セッション・ステートストレージリクエストごと(メモリーのみ)です。


プロンプトを入力するページ・アイテムとしてP1_PROMPTを作成しています。タイプテキスト領域です。

セッション・ステートデータ型VARCHAR2ストレージセッションごと(永続)として、一度入力したプロンプトをセッション・ステートに保存するようにしています。


ページ・アイテムP1_PHOTOに設定した写真とP1_PROMPTに記述したプロンプトをサーバーに送信するボタンとしてSUBMITを作成しています。動作アクションページの送信です。


LLMからの応答を表示するページ・アイテムとしてP1_RESPONSEを作成しています。タイプリッチ・テキスト・エディタです。

設定書式マークダウンを選択しています。セッション・ステートデータ型CLOBストレージセッションごと(永続)です。読取り専用常時を設定しています。


ボタンSUBMITをクリックしてページが送信されたときに実行されるプロセスとして、Explain Photoを作成しています。

タイプコードを実行ソースPL/SQLコードとして以下を記述します。


サーバー側の条件ボタン押下時SUBMITを設定します。


作成したAPEXアプリケーションの説明は以上です。

LM StudioにはGemma 3 27B Instruct(APIに含めるモデル名としてはgemma-3-27b-it)をロードしています。Context Lengthの最大値128K(131072)を指定するとホスト・コンピュータの動作が不安定になるため、半分の65536を設定しています。


今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。