2023年6月20日火曜日

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

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

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


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

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


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

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


作成をクリックします。


名前Cohere API静的IDCOHERE_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ドキュメントに複数のinputsexamplesを含みます(リクエストの詳細はAPI ReferenceのBODY PARAMSを参照のこと)。それぞれを保持するためにAPEXコレクションを作成し、対話グリッドで編集します。

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

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


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

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

へ進みます。


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

へ進みます。


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


アプリケーション・プロセスが作成されます。これでセッションの開始時にAPEXコレクションCLASSIFY_INPUTSCLASSIFY_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.GenerateCo.EmbedCo.TokenizeCo.DetokenizeCo.Detect_languageCo.SummarizeCo.Rerankがあります。

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

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

追記


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


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