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_auth、oauth2(認可コード・グラント)、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 API、URLエンドポイントとして以下を設定します。

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パターンは/:id、HTTPメソッドとしてDELETE、データベース操作として行の削除を選択します。

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


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

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

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

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

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

次へ進みます。


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

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


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

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


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

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


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


Connectorの認証パラメータであるservice_authのtypeは常に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のアプリケーション作成の参考になれば幸いです。

完