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として返します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_request json_object_t; | |
l_response json_object_t; | |
l_response_clob clob; | |
l_results json_array_t; | |
l_result json_object_t; | |
begin | |
l_request := json_object_t(:body); | |
l_result := json_object_t(); | |
l_result.put('id','sample_response_1'); | |
l_result.put('title', 'this is sample response for my first cohere connector'); | |
l_result.put('text', l_request.get_string('query')); | |
l_result.put('url', 'https://oracle.com'); | |
l_result.put('created_at', sysdate); | |
l_results := json_array_t(); | |
l_results.append(l_result); | |
l_response := json_object_t(); | |
l_response.put('results', l_results); | |
htp.p(l_response.to_clob()); | |
:status_code := 200; | |
end; |
認証による保護はかけません。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データ・ソース・タイプとして簡易HTTPを選択します。名前はCohere Connectors API、URLエンドポイントとして以下を設定します。
https://api.cohere.ai/v1/connectors
次へ進みます。
リモート・サーバー、ベースURL、サービスURLパスなどが自動的に設定されます。
変更は不要なので、そのまま次へ進みます。
ページ区切りタイプはページ区切りなしです。
次へ進みます。
認証が必要ですをオンにし、資格証明としてCOHERE_API_KEYを選択します。
検出をクリックします。
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を設定します。
パラメータは、ページ番号の接頭辞を除きページ・アイテムの名前と一致しているため、適切なページ・アイテムが割り当てられます。
操作はPATCH - /:id、サーバー側の条件のボタン押下時にSAVEを設定します。
Connectorの削除を行なうプロセスは名前Delete Connectorとして作成します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
操作は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のアプリケーション作成の参考になれば幸いです。
完