2024年3月22日金曜日

CohereのConnectorとしてOracle REST Data ServicesのREST APIを呼び出す

Cohereが最近ベータ版として提供を開始したConnectorsという機能があります。

Introduction to Connectors
https://docs.cohere.com/docs/connectors

Coralへリクエストを送信する際に、connectorsに自分で作成したコネクタを含めることにより、LLMに外部の知識を追加することができるようになります。

Oracle REST Data ServicesにREST APIを作成し、自作コネクタとして定義してCohereのPlaygroundから呼び出してみました。以下、作業の手順を記載します。

とりあえず、Playgroundから呼び出すだけ呼び出してみました。


作成したConnectorはDashboardから確認できます。なぜか最初のConnectorはAPIからでないと作成できませんでした。1つConnectorが作成されていると、New connectorのボタンが表示されるようになります。


CohereのConnectorとして登録するORDSのREST APIを作成します。

モジュールはcohere、テンプレートはsearchとします。CohereからはPOSTメソッドが呼び出されます。

ハンドラのコードとして以下を記述します。特に何かを検索せず、リクエストにqueryとして渡される文字列をそのままtextとして返します。



認証による保護はかけません。Connectorはservice_authoauth2(認可コード・グラント)、user_access_token(パス・スルー)の3種類の認証手順を使ってConnector(今回はOracle REST Data ServicesのREST API)を呼び出すことができますが、どれもORDSのREST APIの保護と(今までの調査の範囲では)互換がなさそうです。ORDSのREST APIをCohereのConnectorとして呼び出す際のAPIの保護に関しては課題です。


以下より、CohereのConnector APIを呼び出して、Oracle REST Data ServicesのREST APIをConnectorとして追加するAPEXアプリケーションを作成します。

CohereのAPIキーがWeb資格証明COHERE_API_KEYとして登録しておきます。

認証タイプとしてHTTPヘッダーを選択します。資格証明名Authorization、 資格証明シークレットBearerで始めて空白で区切り、CohereのAPIキーを続けた文字列を設定します。


空のアプリケーションを作成します。名前Cohere Connectorsとします。


アプリケーションが作成されたら、共有コンポーネントRESTデータ・ソースを開きます。Connectorの操作はRESTデータ・ソースとして実装します。


RESTデータ・ソース作成を開始します。


RESTデータ・ソースの作成最初からを選択し、へ進みます。続く画面で、RESTデータ・ソースの一般的な設定を行います。

RESTデータ・ソース・タイプとして簡易HTTPを選択します。名前Cohere Connectors APIURLエンドポイントとして以下を設定します。

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

へ進みます。


リモート・サーバーベースURLサービスURLパスなどが自動的に設定されます。

変更は不要なので、そのままへ進みます。


ページ区切りタイプページ区切りなしです。

へ進みます。


認証が必要ですオンにし、資格証明としてCOHERE_API_KEYを選択します。

検出をクリックします。


標準のConnectorであるweb-searchとcohere-public-docsが検出されます。

RESTデータ・ソースの作成をクリックします。


RESTデータ・ソースCohere Connector APIが作成されます。

このRESTデータ・ソースを開き、Connectorの作成、更新、削除を行なう操作を追加します。


操作の追加をクリックします。


HTTPメソッドとしてPOSTデータベース操作として行の挿入を選択します。リクエスト本文テンプレートとして以下を記述します。
{  
  "name":"#NAME#",  
  "description":"#DESCRIPTION#",  
  "url":"#URL!RAW#",  
  "service_auth": {  
    "type": "#TYPE#",
    "token": "#TOKEN!RAW#"
  }
}
以上を設定し、一旦、作成をクリックします。


作成された操作POSTを再度開き、操作パラメータ本文との同期をクリックします。


Content-Typeヘッダーを操作パラメータとして追加します。

パラメータの追加をクリックします。


タイプとしてHTTPヘッダーを選択します。名前Content-Type目的入力デフォルト値application/jsonです。静的オンにし値の変更を禁止します。

パラメータの追加をクリックします。


以上でConnectorの作成を行なう操作は追加できました。

変更の適用をクリックします。


先ほど同じ手順で操作で、Connectorの更新を行なう操作を追加します。

URLパターン/:idを設定します。HTTPメソッドPATCHデータベース操作行の更新です。リクエスト本文テンプレートとして以下を記述します。
{  
  "service_auth": {  
    "type": "#TYPE#",
    "token": "#TOKEN!RAW#"
  }
}
一旦、操作PATCHを作成し、再度操作を開いた後に、本文の同期とContent-Typeヘッダーの追加を行います。


URLパターンidも、操作パラメータとして追加します。


Connectorの削除を行なう操作を追加します。

URLパターン/:idHTTPメソッドとしてDELETEデータベース操作として行の削除を選択します。

操作DELETEではリクエスト本文パラメータContent-Typeヘッダー不要です。操作パラメータURLパターンidを追加します。


以上でCohereのConnectorを操作するRESTデータ・ソースは完成です。

Connectorの一覧と操作を行なうページを、フォーム付き対話モード・レポートのページとして作成します。

ページの作成を開始し、対話モード・レポートを選択します。

レポートの名前Connectorsフォーム・ページを含めるオンにし、フォーム・ページ名Connector Detailとします。

データ・ソースとしてRESTデータ・ソースを選択し、RESTデータ・ソースとしてCohere Connector APIを選択します。

へ進みます。


主キー列1としてID (Varchar2)を選択します。

ページの作成をクリックします。


対話モード・レポートとフォームのページが作成されます。

対話モード・レポートのページはそのままで利用できますが、フォームはレポートの列と作成、更新、削除の操作が受け付けるパラメータが異なるため、調整が必要です。


ページ・デザイナでフォームのページを開きます。

ページ・アイテムとしてP3_IDP3_URLP3_NAMEP3_DESCRIPTIONP3_TYPEP3_TOKENを作成します。P3_IDタイプ非表示で作成済みですが、他のページ・アイテムは作成されていないものもあります。P3_DESCRIPTIONタイプテキスト領域、それ以外はテキスト・フィールドとして作成します。


ページ・アイテムP3_URLP3_NAMEP3_DESCRIPTIONは作成時にのみ設定可能で、更新はできません。そのため、読取り専用タイプアイテムはNULLではないを選択し、アイテムP3_IDを設定します。


Connectorの認証パラメータであるservice_authtypeは常にbearerとするため、デフォルトタイプ静的を選択し、静的値bearerを設定します。


ページ・アイテムの準備は以上で完了です。

プロセス・ビューを開きます。

デフォルトで作成されているプロセスプロセス・フォームConnector Detailでは処理が適切に行われないため、ビルド・オプションコメント・アウトします。


Connectorを作成するプロセスを、名前Create Connectorとして作成します。タイプAPIの呼出しです。

設定タイプRESTソースRESTソースとしてCohere Connector API操作POSTを選択します。

サーバー側の条件ボタン押下時CREATEを設定します。

パラメータは、ページ番号の接頭辞を除きページ・アイテムの名前と一致しているため、適切なページ・アイテムが割り当てられます。


Connectorの更新を行なうプロセスは名前Update Connectorとして作成します。

操作PATCH - /:idサーバー側の条件ボタン押下時SAVEを設定します。


Connectorの削除を行なうプロセスは名前Delete Connectorとして作成します。

操作DELETE - /:idサーバー側の条件ボタン押下時DELETEを設定します。


以上でCohereのConnectorを操作するアプリケーションは完成です。

先ほど作成したORDS REST APIをConnectorとして作成します。

名前My First Connectorとしています。URLはORDS REST APIの完全なURLを設定します。REST API自体には保護はかけられていないため、Tokenには適当な文字列を入力します。


ConnectorとしてMy First Connectorが登録されます。


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

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