LLM変換ハンドラ
各プロバイダには、リクエスト・ペイロード、レスポンス・ペイロードおよびエラー・ペイロードの独自の形式があります。このため、LLMプロバイダとOracle Digital Assistantは直接通信できないため、スキルとそのLLMプロバイダ間の交換を容易にするために、これらのペイロードをOracle Digital Assistantの共通LLMインタフェースに変換し、再度戻す必要があります。
transformRequestPayload、transformResponsePayloadおよびtransformErrorResponsePayloadメソッドがペイロード変換を実行するスクリプト)を作成します。これらの変換方法には、2つのシグネチャがあります。
event: このオブジェクトに使用されるプロパティは、イベント・タイプ(transformRequestPayload、transformResponsePayload、transformErrorResponsePayload)によって異なります。context:LlmTransformationContextクラスを参照します。このクラスは、イベント・ハンドラ・ロジックの作成に使用できるコンビニエンス・メソッドへのアクセスを提供します。
LLM変換ハンドラの作成
- 左側のナビゲーション・バーで「コンポーネント」をクリックします。
- +New「サービス」をクリックします
- 「サービスの作成」ダイアログを完了します:
- 名前: サービス名を入力します。
- サービス・タイプ: 埋込みコンテナ
- コンポーネント・サービス・パッケージ・タイプ: 新規コンポーネント
- コンポーネント・タイプ: LLM変換
- コンポーネント名: エンティティ・イベント・ハンドラの識別しやすい名前を入力します。この名前は、スキルのLLMサービスを作成するときに参照します。
- テンプレート: Cohereを直接またはOracle Generative AIサービスを介して呼び出すスキルのテンプレートを提供します。これらのテンプレートを編集する必要はありません。スキルがAzure Open AIなどのCohere/Oracle以外の生成AIモデルをコールする場合、適切なコードを追加する必要があります。
Oracle Generative AI Cohere (テキスト生成と要約)およびLlama (テキスト要約)のテンプレートは、「テンプレート」リスト・メニューの生成AIでソートされます。Cohereに直接アクセスするためのテンプレートは、「その他」の下にあります。他のモデルのスタータ・コードを含むテンプレートにアクセスするには、「カスタム」を選択します(「その他」の下にもあります)。
- 「作成」をクリックして、イベント・ハンドラ・コードを生成します。
- デプロイメントの完了後、サービスを展開し、変換ハンドラを選択してそのプロパティ・ページを開きます。このページには、3つのLLMプロバイダ-CLMI変換メソッド(
transformRequestPayload、transformResponsePayloadおよびtransformErrorResponsePayload)がリストされます。デジタル・アシスタント・インスタンスと同じテナンシでホストされているCohereサービスまたはOracle生成AIサービスを作成する場合は、ハンドラ・コードが完了します。
- 別のOCIテナンシでホストされているOracle生成AIサービスを作成する場合は、「編集」をクリックして「コンポーネントの編集」ダイアログを開き、変数
event.compartmentIdを生成AIサービスがサブスクライブされているOCIテナンシのコンパートメントIDに置き換えます。 - カスタム・テンプレートを使用している場合は、「編集」をクリックして「コンポーネントの編集」ダイアログを開き、次のプレースホルダ・コードをプロバイダ固有のコードで更新します:
Method エディタでの場所(カスタム・テンプレート) プレースホルダ・コード(カスタム・テンプレート) transformRequestPayload線23-25 transformRequestPayload: async (event, context) => { return event.payload; },transformResponsePayload線33-35 transformResponsePayload: async (event, context) => { return event.payload; },transformErrorResponsePayload線44-46 transformErrorResponsePayload: async (event, context) => { return event.payload; } - 「検証」をクリックして、更新のsysnaxを確認します。検証エラー(ある場合)を修正し、「保存」をクリックします。次に、「クローズ」をクリックします。
LLMプロバイダ変換コード・サンプル
Azure OpenAI
| Method | イベント・ハンドラ変換コード |
|---|---|
| リクエスト |
|
| レスポンス(非ストリーミング) | ストリーミングが有効な場合、レスポンス変換イベント・ハンドラは、20個のストリーム・メッセージのバッチでコールされます。このバッチ処理されたストリーム・レスポンスの配列は、responseItemsキーの下に格納されます。
|
| エラー |
|
Oracle生成AIサービス –Cohere
コマンド・モデルは廃止されました。
/chatエンドポイントに移行することをお薦めします。これには、より新しいチャット・モデルを宣言し、コマンド固有のパラメータをチャット固有のパラメータに置き換える必要があります。
| Method | イベント・ハンドラ・コード |
|---|---|
| リクエスト |
|
| レスポンス |
|
| エラー |
|
Oracle生成AI - Llama
コマンド・モデルは廃止されました。
/chatエンドポイントに移行することをお薦めします。これには、チャット・モデルの宣言、およびコマンド固有のパラメータのチャット固有パラメータへの置換が含まれます。
| Method | イベント・ハンドラ・コード |
|---|---|
| リクエスト |
|
| レスポンス |
|
| エラー |
|
Oracle生成AI - 要約
コマンド・モデルは廃止されました。
/chatエンドポイントに移行することをお薦めします。これには、より新しいチャット・モデルを宣言し、コマンド固有のパラメータをチャット固有のパラメータに置き換える必要があります。
| Method | イベント・ハンドラ・コード |
|---|---|
| リクエスト |
|
| レスポンス |
|
| エラー |
|
Cohere(コマンドモデル) - Cohereへの直接アクセス
cohere.command.Rモデルに使用される/chat APIではなく、/generate APIおよび関連するCohere.commandモデルをサポートしています。/chatエンドポイントに移行する場合は、リクエスト・ペイロードとレスポンス・ペイロードおよび生成されたコード・テンプレートを手動で更新する必要があります。
| Method | イベント・ハンドラ・コード |
|---|---|
| リクエスト | このハンドラは、会話コンテキストを維持するために会話履歴を管理します。
|
| レスポンス |
|
| エラー |
|
共通LLMインタフェース
各LLMプロバイダには、リクエスト・ペイロードとレスポンス・ペイロードの独自の形式があります。共通LLMインタフェース(CLMI)を使用すると、invokeLLMコンポーネントでこれらの独自のリクエストおよびレスポンス・ペイロードを処理できます。
- リクエスト本文の指定。
- LLM RESTコールがHTTP 200ステータスを返す場合に適用可能な成功レスポンス本文仕様。
- エラー・レスポンス本文の指定。LLM RESTコールが200以外のHTTPステータスを返したが、LLMサービスの起動がまだ成功した場合に適用されます。
ノート
呼出しが失敗した場合、invokeLLMコンポーネントは401 (認可されていません)または500 (内部サーバー・エラー)エラーを処理します。
CLMI要求本文仕様
| プロパティ | タイプ | デフォルト | 説明 | 必須? |
|---|---|---|---|---|
messages |
メッセージ・オブジェクトの配列 | N/A | メッセージのリスト。最初のメッセージは、roleプロパティをsystemに設定したプロンプトです。LLMレスポンスを絞り込むか拡張できるように、LLMがマルチターン会話をサポートしている場合、後続のメッセージは、userおよびassistantロールからのメッセージのペアになります。ユーザー・メッセージには、LLMのフォローアップ手順または質問が含まれています。アシスタント・メッセージには、ユーザー・メッセージ(完了)に対するLLMレスポンスが含まれます。LLMがマルチターン会話をサポートしていない場合、messages配列には、プロンプトを保持する単一のシステム・メッセージのみが含まれます。
|
はい |
streamResponse |
boolean | false |
LLMのレスポンスをLLMコンポーネントにストリームバックするかどうかを決定します。このプロパティをtrueに設定すると、LLMコンポーネントが部分的にレスポンス・メッセージをユーザーに返すことができるため、ストリーミングによってLLMがレスポンスを完了するのを待機する必要がないため、ユーザー・エクスペリエンスが向上します。
レスポンス検証を使用する場合は、 |
いいえ |
maxTokens |
整数 | 1024 |
モデルは、結果に単語のトークンを生成します。トークンは単語の一部と考えることができます。たとえば、100トークンは英語で約75語に相当します。このプロパティは、レスポンスに対して生成されるトークンの最大数を設定することで、モデルによって生成されるコンテンツのサイズを制限します。 | いいえ |
temperature |
数値 | 0 |
モデルは温度を使用して、応答のランダム性(つまり創造性)を測定します。これは、0 (予測可能な結果)から1 (よりランダム化された結果)までの範囲の値として設定します。0は、モデルが特定のプロンプトに同じ結果を送信することを意味します。1は、特定のレスポンスに対するモデルの結果が大きく異なる可能性があることを意味します。LLMプロバイダが0-1以外の範囲をサポートしている場合は、イベント・ハンドラを使用して乗数を適用します。
|
いいえ |
user |
string | N/A | エンド・ユーザーを表す一意の識別子。この識別子は、虐待言語の監視および検出に使用できます。 | いいえ |
providerExtension |
object | N/A | CLMIの一部として定義されていないLLMプロバイダ固有の構成オプションを有効にします。 | いいえ |
メッセージ・オブジェクト構造
| プロパティ | タイプ | 説明 | 必須? |
|---|---|---|---|
role |
string | メッセージ・クリエータ。値は、system、userおよびassistantです。
|
はい |
content |
string | メッセージ・コンテンツ | はい |
turn |
整数 | チャット・メッセージ交換の現在の絞込みターンを示す番号。最初のプロンプトがLLMに送信されると、ターンは1になります。 | はい |
retry |
boolean | レスポンスのエラーを修正するためにメッセージがLLMに送信されるかどうかを示すフラグ | いいえ(デフォルトはfalse)
|
tag |
string | 特定のプロンプトをマークするカスタム・タグ。Recursive Criticism and Improvement (RCI)を使用してLLMレスポンスを改善する場合は、validateResponsePayloadハンドラでカスタム・ロジックを有効にして、タグを"criticize"または"improve"に設定することでRCIプロセスの現在のステップを検出できます。
|
いいえ |
エラー応答本体の仕様
| プロパティ | タイプ | 説明 | 必須? |
|---|---|---|---|
errorCode |
文字列 |
|
はい |
errorMessage |
文字列 | LLMプロバイダ固有のエラー・メッセージ。これは、文字列化されたJSONオブジェクトである可能性があります。 | はい |