2024年11月22日金曜日

OpenAI o1を呼び出して推論を行なうOracle APEXアプリケーションを作成する

OpenAI APIのPMの方より、APIからo1-previewo1-miniのモデルを使えるようになりました、とのメールを受け取りました。推論モデル(Reasoning model)に関しては、以下のドキュメントを参照して、とのことです。


これらの推論モデルをOracle APEXのアプリから呼び出してみました。呼び出しの確認が目的なので、簡単に実装しています。o1のモデルはStreamingをサポートしていますが、Oracle APEXのバックエンド、つまりデータベース・サーバーではStreamingを扱うのは難しいため、使っていません。

作成したAPEXアプリケーションは以下のように動作します。例では、以下のつるかめ算の回答をお願いしています。

「ある動物園に鶴と亀が合わせて20匹います。足の合計は56本です。鶴と亀はそれぞれ何匹いるでしょうか。」

回答は「鶴12匹、亀8匹」でした。正解です。


作成したアプリケーションのエクスポートは以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/reasoning-with-openai-o1-mini.zip

OpenAIのAPIの呼び出しに使用するWeb資格証明が、静的IDOPENAI_API_KEYとして作成されていることが前提です。静的IDが異なる場合は、APIを呼び出しているAPEX_WEB_SERVICE.MAKE_REST_REQUESTの引数p_creadential_static_idの値を変更します。


空のAPEXアプリケーションを作成し、デフォルトで作成されるホーム・ページにすべての機能を実装しています。


ページ・アイテムP1_QUESTIONにプロンプトを入力します。複数行の文字列を入力するため、タイプテキスト領域を選んでいます。


OpenAI o1(費用の関係からo1-miniを呼んでいます)からの回答は、ページ・アイテムP1_ANSWERに出力しています。タイプとしてリッチ・テキスト・エディタを選択しています。

Oracle APEXのパッチ・レベルが24.1.4であれば、設定のライブラリよりOracleリッチ・テキスト・ライブラリを選択できます。Oracle APEXの将来のバージョンでTinyMCEは非推奨になる予定です。Oracle APEXが採用しているリッチ・テキスト・エディタのライブラリは、CKEditor4、CKEditor5、TinyMCEと置き換えられてきましたが、これがOracleリッチ・テキスト・ライブラリに置き換わります。ただし、Oracleリッチ・テキスト・ライブラリの実体はCKEditor5なので、TinyMCEからCKEditor5に戻ったともいえます。


その他にAPIのレスポンスに含まれるfinish_reasonを表示するページ・アイテムとしてP1_FINISH_REASONモデル名を表示するP1_MODEL、利用状況(usage)を表示するP1_USAGEを作成しています。P1_USAGEについては、数値がわかれば十分なので、JSONドキュメントをそのまま出力しています。


ボタンSUBMITをクリックして、OpenAIのAPI呼び出しを呼び出します。動作アクションは、ボタンのデフォルトのページの送信です。


ボタンSUBMITをクリックしたときに実行されるプロセスとしてCall OpenAI APIを作成します。このプロセスに、以下のコードを記述します。



以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。

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

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