この環境を使って、最近話題のMicrosoftのphi3(Mini, 3.8B, 4bit)、Googleのgemma(7B, 4bit)、Metaのllama3(8B, 4-bit)を動かして、APEXアプリケーションからOpenAI互換のChat Completions APIで呼び出してみます。
呼び出すモデルを変更する度に、アプリケーション・ビルダーを呼び出して置換文字列を変更するのは面倒なので、APIのエンドポイント、モデル名、Web資格証明をアプリケーションから変更できるように、ページ・アイテムを追加します。
ページ・アイテムP1_TOOL_SETの下に、APIエンドポイントを設定するページ・アイテムP1_API_ENDPOINTを作成します。タイプはテキスト・フィールド、ラベルはAPI Endpointとします。
レイアウトの新規行の開始はオン、検証の必須の値はオン、デフォルトのタイプに静的を選択し、静的値として&G_API_ENDPOINT.を指定します。
セッション・ステートのストレージはセッションごと(永続)を選択します。
モデル名を設定するページ・アイテムP1_MODEL_NAMEを作成します。タイプはテキスト・フィールド、ラベルはModel Nameとします。
レイアウトの新規行の開始はオフとしてページ・アイテムP1_API_ENDPOINTの右に配置します。検証の必須の値はオン、デフォルトのタイプに静的を選択し、静的値として&G_MODEL_NAME.を指定します。
セッション・ステートのストレージはセッションごと(永続)を選択します。
Web資格証明の静的IDを設定するページ・アイテムP1_CREDENTIAL_STATIC_IDを作成します。タイプはテキスト・フィールド、ラベルはCredential Static IDとします。
レイアウトの新規行の開始はオフとしてページ・アイテムP1_MODEL_NAMEの右に配置します。検証の必須の値はオフ(ローカルLLMでは指定不要)、デフォルトのタイプに静的を選択し、静的値として&G_CREDENTIAL_STATIC_ID.を指定します。
セッション・ステートのストレージはセッションごと(永続)を選択します。
select seq_id, c001, c002, clob001, n001, n002, n003, dbms_lob.getlength(clob001) cnt
from apex_collections
where collection_name = :G_CHAT_HISTORY order by seq_id desc
属性の2次本体のHTML式を以下に変更し、メッセージの文字数を表示します。
char count: &CNT.
{if N001/}
, prompt_tokens: &N001. completion_tokens: &N002. total_tokens: &N003.
{endif/}
プロセスSend Messageを選択し、パラメータの設定を変更します。
パラメータp_api_endpointの値のタイプをアイテムに変更し、アイテムとしてP1_API_ENDPOINTを指定します。
パラメータp_model_nameも同様に、値のアイテムとしてP1_MODEL_NAMEを指定します。
パラメータp_credential_static_idの値のアイテムとしてP1_CREDENTIAL_STATIC_IDを指定します。
以上でAPEXアプリケーションから呼び出すモデルを変更できるようになりました。
最初にMicrosoftのphi3を呼び出してみます。
% ollama run phi3
>>> Send a message (/? for help)
Model Nameにgemmaを指定します。
% ollama run llama3
>>> Send a message (/? for help)
Model Nameにllama3を指定します。
英語で回答されました。
プロンプトとして「日本語で回答してください。」を設定し、同じ質問をしてみました。
もう少し詳しく回答してもらうために、プロンプトとして「あなたは日本史の先生です。」を設定し、同じ質問をしてみました。
OpenAI Chat Completions APIを呼び出す形でアプリケーションを作成することにより、本家OpenAIとOllamaのローカルLLMの切り替えが容易にできるようになりました。
今回機能を追加したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/chat-with-generative-ai-hc.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完