2023年6月20日火曜日

CohereのCo.ClassifyをOracle APEXから呼び出してみる

Cohereのトライアル・キーを入手して、APIのCo.Classifyを呼び出すアプリケーションを作成してみます。

以下のように動作します。APIの呼び出すことが目的なので、それほど凝った実装は行いません。


Cohereのホーム・ページにアクセスし、TRY NOWをクリックしてトライアルのアカウントを取得します。こちらのアカウントの取得手順については、Cohereから情報を入手してください。

アカウントを作成したら、DASHBORDのAPI Keysを開き、トライアルのAPIキーをコピーします。


APEXに移り、Cohere APIを呼び出す際に使用するWeb資格証明を作成します。

ワークスペース・ユーティリティのWeb資格証明を開きます。


作成をクリックします。


名前はCohere API、静的IDはCOHERE_APIとします。

認証タイプにHTTPヘッダーを選択し、資格証明名、つまりHTTPヘッダー名としてAuthorizationを指定します。

資格証明シークレットはAuthorizationヘッダーの値になります。Bearerで始めて、空白で区切り、CohereのAPIキーを続けて入力します。

URLに対して有効として、以下を入力します。

https://api.cohere.ai/v1/

以上で作成をクリックします。


Web資格証明としてCohere APIが作成されます。


CohereのAPIを呼び出すAPEXアプリケーションを作成します。

アプケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前はCohereとします。

アプリケーションの作成を実行します。


アプリケーションが作成されたら、ページの作成を実行します。空白のページを作成し、Cohereが提供するClassifyのAPIの呼び出しを実装します。


空白ページを選択します。


ページ定義の名前はClassifyとします。ページ・モードは標準です。デフォルトでナビゲーションが作成されます。

ページの作成を実行します。


空白のページが作成されます。


Co.Classifyのリクエストは、JSONドキュメントに複数のinputsとexamplesを含みます(リクエストの詳細はAPI ReferenceのBODY PARAMSを参照のこと)。それぞれを保持するためにAPEXコレクションを作成し、対話グリッドで編集します。

inputsとexamplesを保持するAPEXコレクションを、CLASSIFY_INPUTS、CLASSIFY_EXAMPLESとして作成します。

共有コンポーネントのアプリケーション・プロセスを開きます。


アプリケーション・プロセスの一覧画面で作成をクリックし、アプリケーション・プロセスの作成を開始します。

名前はAPEXコレクションの初期化、ポイントとして新規インスタンス(新規セッション)開始時を選択します。

次へ進みます。


コードとして以下を記述します。

次へ進みます。


条件は不要なので、そのままプロセスの作成を実行します。


アプリケーション・プロセスが作成されます。これでセッションの開始時にAPEXコレクションCLASSIFY_INPUTSとCLASSIFY_EXAMPLESが作成されます。


ページ・デザイナで作成した空白のページClassifyを開きます。

対話グリッドのリージョンを作成します。

識別の名前はInputs、タイプは対話グリッドとします。ソースのタイプにSQL問合せを選択し、SQL問合せとして以下のSELECT文を記述します。

select seq_id, c001 from apex_collections where collection_name = 'CLASSIFY_INPUTS'


APEXコレクションでは、列SEQ_IDが一意の値なので、これを主キーとして取り扱います。

列SEQ_IDを選択し、識別のタイプを非表示に変更します。ソースの主キーをオンにします。


列C001を選択し、識別のタイプをテキスト・フィールド、ヘッダーをC001からinputsに変更します。


対話グリッドの属性を開き、編集の有効をオンに切り替えます。


プロセス・ビューを開き、対話グリッドの操作を行うプロセスInputs - 対話グリッド・データの保存を選択します。

設定のターゲット・タイプをPL/SQL Codeに変更し、挿入/更新/削除するPL/SQLコードとして以下を記述します。


失われた更新の防止はオフ、行のロックはNoとします。APEXコレクションは開始しているAPEXセッションでのみ有効で、他のセッションとデータが共有されることはありません。そのため、これらの設定は不要です。


以上でinputsを操作する対話グリッドが出来上がりました。

続いてexamplesを操作する対話グリッドを作成します。対話グリッドinputsを重複させます。

重複させた(コピーした)対話グリッドの識別の名前をexamplesに変更します。

ソースのSQL問合せを以下に変更します。

select seq_id, c001, c002 from apex_collections where collection_name = 'CLASSIFY_EXAMPLES'


列C001を選択し、ヘッダーをtextに変更します。


列C002を選択し、識別のタイプをテキスト・フィールド、ヘッダーをlabelに変更します。


プロセス・ビューを開き、プロセスInputs - 対話グリッド・データの保存を重複させます。

重複(コピー)したプロセスの識別の名前をExamples - 対話グリッド・データの保存に変更します。編集可能リージョンとしてexamplesを選択します。

設定の挿入/更新/削除するPL/SQLコードは、以下の記述に入れ替えます。



CohereのCo.ClassifyのAPIのリクエストとなるinputs、examplesを扱う対話グリッドは、出来上がりました。

これらのデータからJSONリクエストを作成し、CohereのAPIを呼び出します。

ボタンを作成します。

識別の名前はSUBMIT、ラベルはSubmit、動作のアクションはデフォルトのページの送信とします。


APIのレスポンスを保持するページ・アイテムを作成します。

識別の名前はP2_RESPONSE、タイプとしてテキスト領域を選択します。ラベルはResponseとします。

外観の高さは20行とします。


プロセス・ビューを開き、ボタンSUBMITを押したときに実行されるプロセスを作成します。

識別の名前はCall Co.Classifyとします。タイプとしてコードを実行を選択します。

ソースのPL/SQLコードとして以下を記述します。


サーバー側の条件のボタン押下時にSUBMITを選択します。


以上でAPEXアプリケーションは完成です。

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

CohereのAPIにはこの他にCo.Generate、Co.Embed、Co.Tokenize、Co.Detokenize、Co.Detect_language、Co.Summarize、Co.Rerankがあります。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-cohere-api.zip

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

追記


レスポンスの表示がJSONのまま、というのもいまひとつなので、以下のSQLをソースとした対話モード・レポートを実装してみました。


更新されたアプリの画面は以下になります。


完