新しい記事で更新されています。
OpenAIのChat Completions APIを呼び出すAPEXアプリを作成するhttps://apexugj.blogspot.com/2024/04/chat-with-generative-ai-sample-app-0.html
以下は過去の内容です。
アプリケーションの実装の説明です。
ボタンStart New Conversationは、ChatGPTへ送信する会話を初期化します。一連の会話はAPEXコレクションCHATGPTに保存しています。
以下は過去の内容です。
OpenAIからChatGPTのAPIの提供が開始され、すでにアプリケーションに組み込んでいる所もあるようです。ChatGPTのAPIの費用をこちらのページから確認すると$0.002 / 1K tokens tokensとなっています。
OpenAIにアカウントを登録すると最初はFree trialになり、3ヶ月を期限として$18分だけ利用できるようです。実際にアカウントのアップグレードをせずに、ChatGPTのAPIを呼び出すことができました。
https://help.openai.com/en/articles/4936830-what-happens-after-i-use-my-free-tokens-or-the-3-months-is-up-in-the-free-trial
お金が絡む話ですので、試される場合はOpenAIのPricingのページをご自身で確認されるようお願いします。
作成したAPEXアプリケーションは以下の動作をします。
「去年の日本の野球の日本シリーズで優勝した球団は?」のChatGPTの回答は「去年(2020年)の日本シリーズで優勝した球団は、福岡ソフトバンクホークスです。」でした。ChatGPTが学習で使用したデータは2021年までというのは確かなようです。続く質問「一昨年は?」の回答は「一昨年(2019年)の日本シリーズで優勝した球団は、埼玉西武ライオンズです。」でした。。。
https://github.com/ujnak/apexapps/blob/master/exports/chatgpt-app.zip
今回はアプリケーションの作成手順については省き、実装についての説明だけを行います。
OpenAIのAPIを呼び出すにあたって、Web資格証明を作成します。
ワークスペース・ユーティリティのWeb資格証明を開きます。ここで作成するWeb資格証明を指定して、APIを呼び出します。
Web資格証明の名前はOpenAI API Keyとしています。
静的識別子としてOPENAI_API_KEY、認証タイプはHTTPヘッダー、資格証明名はAuthorizationとします。資格証明シークレットしてBearerで始めて空白で区切った後、OpenAIのAPIキーを続けた文字列を設定します。
ChatGPTの会話はroleがsystemのメッセージから始めます(省略も可ですが、このアプリでは省略できません)。systemのメッセージはThe system message helps set the behavior of the assistant.とのことです。
会話の初期化はレンダリング前のプロセスInit Conversationとして実装しています。
ボタンSet System Messageは動的アクションで実装しています。System Messageとして入力した文字列をAPEXコレクションに追加しています。
System Messageを設定するリージョンは、APEXコレクションCHATGPTが空のときに表示されるよう、サーバー側の条件を設定しています。
会話履歴がある場合(systemのメッセージのみを含む)、ユーザーのメッセージを送信するリージョンが現れます。User Messageとして質問を入力し、ボタンSend User Messageをクリックすると一連の会話をリクエストとして、ChatGPTのAPIを呼び出します。
コードの説明は以上です。
ChatGPTとの会話はAPEXコレクションに保存しており、その表示にカード・リージョンを使っています。ソースのSQLは以下です。
select seq_id, c001, clob001, n001, n002, n003
from apex_collections
where collection_name = 'CHATGPT' order by seq_id desc
カードの表示について、属性で以下のように設定しています。
外観のレイアウトは水平(行)を選んでいます。カードの主キー列1はSEQ_IDです。
タイトルの列はC001、本体の列はCLOB001、2次本体の拡張フォーマットをONにし、HTML式として以下を記述しています。
{if N001/}
prompt_tokens: &N001. completion_tokens: &N002. total_tokens: &N003.
{endif/}
作成したアプリケーションの説明は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完