大規模言語モデル呼出しコンポーネント
ビジュアル・フロー・デザイナの「大規模言語モデルの起動」コンポーネント(LLMコンポーネント)を使用すると、RESTサービス・コールを介してフローをLLMに接続できます。
「状態の追加」ダイアログから「サービス統合」→「大規模言語モデルの起動」を選択して、このコンポーネントの状態をダイアログ・フローに挿入できます。スキルがデジタル・アシスタントからコールされたときにマルチターン会話を有効にするには、LLMの説明の説明を入力します。
ベスト・プラクティスとして、ユーザーがデジタル・アシスタントを介してLLMサービスにアクセスするときに、常にLLMコンポーネントに説明を追加して、マルチターン絞込みを可能にします。
LLMコンポーネントの状態を挿入すると、LLMおよびそのレスポンスへのリクエストのトラブルシューティングにエラー処理状態が追加されます。無効なリクエストまたはレスポンスによってリカバリ不能なエラーが発生すると、LLMコンポーネントの状態はこの状態(デフォルトではShowLLMErrorと呼ばれます)に遷移します。
図invokellm-added-flow.pngの説明
検証に失敗した後、再試行を実装すると、レスポンスの絞込みがシステムから発生することもあります。
LLMコンポーネントがすでに提供している検証を拡張する場合、または再帰的クリティシズムおよび改善(RCI)手法を使用してLLM出力を改善する場合は、スタータ・コードを使用して独自のリクエストおよびレスポンス検証ハンドラを作成できます。
このコンポーネントを使用するには何が必要ですか。Cohereモデルに直接アクセスする場合、またはOracle Generative AI Serviceを介してアクセスする場合は、LLMモデルへのLLMサービスと、LLMへの指示を含む人間が読めるテキストのブロックであるプロンプトのみが必要です。プロンプトの作成は反復的なプロセスであるため、プロンプト・エンジニアリング・ガイドラインとプロンプト・ビルダーを提供します。プロンプト・ビルダーでは、これらのガイドラインをプロンプト・テキストに組み込んで、モデルから適切なレスポンスが返されるまでテストできます。Azure OpenAIなどの別のモデルを使用している場合は、最初に提供するスタータ・コードから独自の変換イベント・ハンドラを作成してから、そのハンドラをインスタンス用に構成されているLLMプロバイダのエンドポイントにマップするLLMサービスを作成する必要があります。
一般プロパティ
プロパティ | 説明 | デフォルトの値 | 必須? |
---|---|---|---|
LLMサービス | スキル用に構成されているLLMサービスのリスト。複数のサービスがある場合は、サービスが選択されていない場合、デフォルトのLLMサービスが使用されます。 | デフォルトのLLMサービス | 状態はLLMサービスなしで有効ですが、このプロパティが設定されていない場合、スキルはモデルに接続できません。 |
プロンプト | 選択したLLMサービスを介してアクセスされるモデルに固有のプロンプト。プロンプトを書きながら、一般的なガイドラインを念頭に置いてください。このフィールドにプロンプトを入力し、プロンプト・ビルダー(「プロンプトの作成」をクリックしてアクセス)を使用してプロンプトを改訂およびテストできます。プロンプト・ビルダーを使用してプロンプトを作成することもできます。 | N/A | はい |
プロンプト・パラメータ | パラメータ値プロンプト・テキストのパラメータを参照するには、標準のApache FreeMarker式構文(${parameter} )を使用します。例: コンポジット・バッグ変数の場合は、コンポジット・バッグ構文を使用します。
|
N/A | いいえ |
結果の変数 | LLMレスポンスを格納する変数。 | N/A | いいえ |
ユーザー・メッセージング
プロパティ | 説明 | デフォルト値 | 必須? |
---|---|---|---|
LLM結果をメッセージとして送信 | これをTrueに設定すると、LLMの結果がユーザーに送信されるメッセージが出力されます。このプロパティをFalseに設定すると、出力がユーザーに送信されなくなります。 | True | いいえ |
ストリーミングの使用 | このオプションを「True」に設定すると、LLMの結果がクライアントにストリーミングされます。LLMレスポンスは、すべてを一度に生成するのではなく増分的に表示されるため、よりスムーズなユーザー・エクスペリエンスを提供する可能性があります。このオプションは、「LLM結果をメッセージとして送信」を「True」に設定した場合にのみ使用できます。
LLMレスポンスがすでにストリーミングを開始した後に検証イベント・ハンドラが起動されるため、ユーザーは潜在的に無効なレスポンスを表示できます。 Cohereモデルの場合、または「JSON形式のLLMレスポンスの強制」を「True」に設定してJSONスキーマをLLM結果に適用した場合、「ストリーミングの使用」を「False」に設定します。 次の場合は、ストリーミングを有効にしません。
|
True | いいえ |
開始メッセージ | LLMが呼び出されたときにユーザーに送信されるステータス・メッセージ。このメッセージは、LLMの起動前に実際にレンダリングされ、有用なインジケータになる可能性があります。処理が行われていること、またはLLMが応答に一定時間かかる可能性があることをユーザーに通知できます。 | N/A | いいえ |
複数回転絞込みの有効化 | このオプションを「True」(デフォルト)に設定すると、ユーザーはフォローアップ手順を指定してLLMレスポンスを絞り込むことができます。ダイアログでは、ターンがユーザーに解放されますが、LLM結果が受信された後はLLM状態のままになります。「False」に設定すると、LLMレスポンスを受信して「成功」アクションによって参照される状態に遷移するまで、ダイアログはターンを保持します。
ノート: スキルがデジタル・アシスタントからコールされる場合は、複数ターンの絞込みにコンポーネントの説明が必要です。 |
True | いいえ |
標準処理 | LLM結果メッセージの出力の下に表示される標準アクション・ボタンを追加します。これらのボタンはすべてデフォルトでアクティブ化されます。
|
「送信」、「取消」および「元に戻す」がすべて選択されます。 | いいえ |
取消ボタン・ラベル | 「取消」ボタンのラベル | Submit |
Yes– 取消処理が定義されている場合。 |
成功ボタン・ラベル | 成功ボタンのラベル | Cancel |
はい- 成功アクションが定義されている場合。 |
「元に戻す」ボタンのラベル | 「元に戻す」ボタンのラベル | Undo |
はい- 「元に戻す」アクションが定義されている場合。 |
カスタム・アクション | カスタム・アクション・ボタン。ボタン ラベルと、その他の説明を含むプロンプトを入力します。 | N/A | いいえ |
大規模言語モデル・コンポーネントの起動の遷移処理
アクション | 説明 |
---|---|
cancel |
このアクションがトリガーされると、ユーザーは「取消」ボタンをタップします。 |
error |
このアクションは、LLMへのリクエストまたはLLMからのレスポンスが無効な場合にトリガーされます。たとえば、JSONまたはエンティティ値のエラーを修正するための再試行プロンプトの割当てが使用されました。 |
レスポンス検証
プロパティ | 説明 | デフォルトの値 | 必須? |
---|---|---|---|
検証エンティティ | LLMレスポンス・メッセージで値を照合するエンティティを選択します。これらのエンティティの名前とそれらの一致する値がイベント・ハンドラへのマップとして渡されます。イベント・ハンドラは、エンティティの一致がないかどうかこのオブジェクトを評価します。エンティティが一致しない場合、検証が失敗すると、不一致エンティティを示すエラー・メッセージがハンドラによって返され、その後モデルに送信されます。モデルは、欠落した値を含むレスポンスの再生成を試みます。ハンドラが出力を検証するか、再試行回数を上回るまで、試行を続行します。
コンポジット・バッグ・エンティティを使用して、イベント・ハンドラが簡潔なエラー・メッセージを生成できるようにすることをお薦めします。これは、個々のコンポジット・バッグ・アイテムに適用されるラベルおよびエラー・メッセージによって、LLMにそのレスポンスへのインクルードに失敗したエンティティ値の詳細が提供されるためです。 |
N/A | いいえ |
JSON形式のLLMレスポンスの強制 | これを「True」に設定すると、JSONスキーマをコピーして貼り付けることで、JSONフォーマットをLLMレスポンスに適用できます。LLMコンポーネントは、このスキーマに対してJSON形式のLLMレスポンスを検証します。
ユーザーがLLM結果をRAW JSONとして表示しないようにする場合は、表を含むフォームのように、JSONをわかりやすい形式に変換する JSONフォーマットを適用する場合は、「ストリーミングの使用」を「False」に設定します。 GPT-3.5は、JSONスキーマ検証のGPT-4よりも堅牢性を示します。GPT-4は時々反応を過剰に修正します。 |
誤り | いいえ |
再試行回数 | エンティティまたはJSON検証エラーが見つかった場合に、再試行プロンプトでLLMが呼び出されたときに許可される最大再試行回数。再試行プロンプトでは、LLMがエラーおよびエラーを修正するリクエストを指定します。デフォルトでは、LLMコンポーネントは単一の再試行リクエストを作成します。再試行の割当てに達すると、再試行のプロンプト検証サイクルが終了します。ダイアログは、LLMコンポーネントからエラー遷移を介して移動します。 | 1 |
いいえ |
メッセージの再試行 | 再試行プロンプトを使用してLLMが呼び出されたときにユーザーに送信されるステータス・メッセージ。たとえば、次の例では、allValidationErrors イベント・プロパティを使用してエンティティ・エラーおよびJSONエラーを列挙します。
|
Enhancing the response. One moment, please... |
いいえ |
検証カスタマイズ・ハンドラ | ユースケースで特別な検証が必要な場合は、スキルにデプロイされたカスタム検証ハンドラを選択できます。たとえば、LLMレスポンスを検証してそれ以上の処理を適用するだけでなく、有毒コンテンツに対するユーザー・リクエストも評価する、スキル用のイベント・ハンドラを作成したとします。ユースケースで、エンティティまたはJSON検証が、相互依存エンティティの一致などの特定のルールに依存することが必要な場合(たとえば、LLM結果に1つのエンティティ値が存在する場合、別のエンティティ値が存在することが必要または除外される場合)、ここで選択する前に、このスキルのハンドラを作成する必要があります。 | N/A | いいえ |
LLM検証およびカスタマイズ・ハンドラの作成
LLM変換ハンドラに加えて、イベント・ハンドラを使用して、LLMに対するリクエストとそのレスポンス(LLMプロバイダによって生成された完了)を検証することもできます。通常、LLM検証およびカスタマイズ・ハンドラと呼ばれるこのコードは、異なるレベルで動作するため、LLM変換ハンドラ・コードとは別に保持します。リクエストおよびレスポンスの検証は、LLM状態とそのプロンプトに固有です。一方、LLM変換検証はスキル全体に適用されます。リクエストおよびレスポンス変換ロジックは、通常、スキル全体のすべてのLLM呼出しで同じであるためです。
bots-node-sdk
のLlmComponentContext
メソッドを使用して、またはこれらのメソッドを提供したテンプレートに組み込むことで、特殊なバリデータを完全にゼロから構築できます。
変更されていないフォームでは、テンプレート・コードによって、LLMコンポーネントによってすでに提供されているものと同じ検証関数が実行されます。
LLMレスポンスのプレゼンテーションをカスタマイズする独自の検証イベント・ハンドラを作成できます。この場合、LLMレスポンス・テキストは、ユーザー・メッセージの一部としてハンドラ内から送信できます。たとえば、LLMにJSON形式を使用した構造化レスポンスを送信するように指示した場合、レスポンスを解析して、表またはカードとしてフォーマットされたメッセージを生成できます。
- 左側のナビゲーション・バーで「コンポーネント」をクリックします。
- +New「サービス」をクリックします
- 「サービスの作成」ダイアログを完了します:
- 名前: サービス名を入力します。
- サービス・タイプ: 埋込みコンテナ
- コンポーネント・サービス・パッケージ・タイプ: 新規コンポーネント
- コンポーネント・タイプ: LLM検証およびカスタマイズ
- コンポーネント名: イベント・ハンドラの識別しやすい名前を入力します。この名前は、スキルのLLMサービスを作成するときに参照します。
- 「作成」をクリックして、検証ハンドラを生成します。
- デプロイメントが完了したら、サービスを展開し、検証ハンドラを選択します。
- 「編集」をクリックして「コンポーネント・コードの編集」エディタを開きます。
- 生成されたテンプレートを使用して、必要に応じて次のハンドラ・メソッドを更新します。
メソッド 説明 検証が成功した場合 検証が失敗した場合 戻り型 エディタの場所 プレースホルダ・コード 検証が失敗した場合の対処方法 validateRequestPayload
リクエスト・ペイロードを検証します。 リクエストが有効な場合、 true
を返します。リクエストが検証に失敗した場合、
false
を返します。boolean 線24-29
このコードの詳細は、validateRequestPayload: async (event, context) => { if (context.getCurrentTurn() === 1 && context.isJsonValidationEnabled()) { context.addJSONSchemaFormattingInstruction(); } return true; }
validateRequestPayload
プロパティを参照してください。- プロンプトを改訂してからLLMに再送信します
- 検証エラーを設定します。
validateResponsePayload
LLMレスポンス・ペイロードを検証します。 ハンドラがtrue
を返す場合:- 「メッセージとしてLLM結果を送信」プロパティを
true
に設定すると、標準またはカスタムのアクション・ボタンを含むLLMレスポンスがユーザーに送信されます。 - ストリーミングが有効な場合、LLMレスポンスはチャンクでストリーミングされます。アクション・ボタンはストリームの最後に追加されます。
- ハンドラに追加されたユーザー・メッセージは、「メッセージとしてLLM結果を送信」プロパティの設定に関係なく、ユーザーに送信されます。
- ハンドラに新しいLLMプロンプトが設定されている場合、このプロンプトはLLMに送信され、新しいLLMレスポンスで検証ハンドラが再度呼び出されます
- 新しいLLMプロンプトが設定されておらず、プロパティ「複数回転絞込みの有効化」が
true
に設定されている場合、ターンが解放され、ダイアログ・フローはLLM状態のままになります。ただし、このプロパティをfalse
に設定すると、ターンは保持され、ダイアログはsuccess
遷移アクションを使用して状態から遷移します。
ハンドラがfalse
を返す場合:- ストリーミングが有効な場合、LLMレスポンスがすでにストリーミングを開始した後に検証イベント・ハンドラが起動されるため、ユーザーは無効な可能性があるレスポンスを表示できます。
- ハンドラによって追加されたユーザー・メッセージは、「スキル・レスポンスとしてLLM結果を送信」設定に関係なく、ユーザーに送信されます。
- ハンドラで新しいLLMプロンプトが設定されている場合、このプロンプトはLLMに送信され、新しいLLMレスポンスで検証ハンドラが再度呼び出されます。
- LLMプロンプトが設定されていない場合、ダイアログ・フローはLLMコンポーネントの状態から遷移します。ハンドラ・コード内の遷移アクション・セットを使用して、次の状態が決定されます。遷移アクションが設定されていない場合、
error
遷移アクションがトリガーされます。
boolean 線50-56
このコードの詳細は、/** * Handler to validate response payload * @param {ValidateResponseEvent} event * @param {LLMContext} context * @returns {boolean} flag to indicate the validation was successful */ validateResponsePayload: async (event, context) => { let errors = event.allValidationErrors || []; if (errors.length > 0) { return context.handleInvalidResponse(errors); } return true; }
validateResponsePayload
プロパティを参照してください。- レスポンスの問題を指定する再試行プロンプト(たとえば、特定のJSON形式に準拠しない)を使用してLLMを再度起動し、LLMで修正するようリクエストします。
- 検証エラーを設定します。
changeBotMessages
ユーザーに送信される候補スキル・メッセージを変更します。 N/A N/A 会話メッセージ・モデル・メッセージのリスト 線59-71
この方法の使用例は、「JSON形式のレスポンスのユーザー・メッセージの拡張」を参照してください。changeBotMessages: async (event, context) => { return event.messages; },
N/A submit
このハンドラは、ユーザーが「送信」ボタンをタップすると起動されます。LLMレスポンスをさらに処理します。 N/A N/A N/A 線79-80 submit: async (event, context) => { }
N/A event
オブジェクトとcontext
オブジェクトを使用します。例:validateResponsePayload: async (event, context) => ...
event
オブジェクトに定義されているプロパティは、イベント・タイプによって異なります。2番目の引数context
は、独自のイベント・ハンドラ・ロジックを作成するためのコンビニエンス・メソッドにアクセスするLlmComponentContext
クラスを参照します。これには、再試行プロンプトの最大数を設定し、スキル・ユーザーにステータスおよびエラー・メッセージを送信する方法が含まれます。 - 「検証」をクリックして、更新のsysnaxを確認します。次に、「保存」→「クローズ」をクリックします。
validateResponsePayload
イベント・プロパティ
名前 | 説明 | タイプ | 必須? |
---|---|---|---|
payload |
検証が必要なLLMレスポンス。 | string | はい |
validationEntities |
対応するLLMコンポーネント状態の「検証エンティティ」プロパティで指定されたエンティティ名のリスト。 | String[] |
いいえ |
entityMatches |
一致したエンティティの名前をキーとし、JSONObjectエンティティの配列を値として一致させるマップ。このプロパティには、「検証エンティティ」プロパティがLLMコンポーネント状態でも設定されている場合にのみ値が設定されます。 | マップ<String, JSONArray> |
いいえ |
entityValidationErrors |
キーと値のペア。キーとしてentityName またはコンポジット・バッグ・アイテムがあり、値としてエラー・メッセージがあります。このプロパティは、「検証エンティティ」プロパティも設定されていて、エンティティの一致がないか(エンティティがコンポジット・バッグの場合)、コンポジット・バッグ・アイテムの一致がない場合にのみ設定されます。
|
マップ<String, String> |
いいえ |
jsonValidationErrors |
LLMコンポーネントの「JSON形式のLLMレスポンスの強制」プロパティが「True」に設定されていて、レスポンスが有効なJSONオブジェクトでない場合、このプロパティには、レスポンスが有効なJSONオブジェクトではないことを示すエラー・メッセージを含む単一のエントリが含まれます。
ただし、JSONが有効で、コンポーネントの「JSON形式のLLMレスポンスの強制」プロパティも「True」に設定されている場合、このプロパティには、スキーマ・パスがキー、および(レスポンスがスキーマに準拠していない場合)スキーマ検証エラー・メッセージが値としてキーと値のペアが含まれます。 |
マップ<String, String> |
いいえ |
allValidationErrors |
すべてのエンティティ検証エラーおよびJSON検証エラーのリスト。 | String[] |
いいえ |
検証ハンドラ コード サンプル
カスタムJSON検証
validateResponsePayload
テンプレートにコードを追加する方法を示しています。 /**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LLMContext} context
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
let errors = event.allValidationErrors || [];
const json = context.convertToJSON(event.payload);
if (json && 'Los Angeles' !== json.location) {
errors.push('Location is not set to Los Angeles');
}
if (errors.length > 0) {
return context.handleInvalidResponse(errors);
}
return true;
}
JSON形式のレスポンスのユーザー・メッセージの拡張
changeBotMessages
ハンドラを使用してRAW JSONレスポンスをわかりやすいフォーム・メッセージに変換する方法を示しています。 /**
* Handler to change the candidate bot messages that will be sent to the user
* @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
* - messages: list of candidate bot messages
* - messageType: The type of bot message, the type can be one of the following:
* - fullResponse: bot message sent when full LLM response has been received.
* - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
* - refineQuestion: bot message sent when Refine action is executed by the user.
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {NonRawMessage[]} returns list of bot messages
*/
changeBotMessages: async (event: ChangeBotMessagesLlmEvent, context: LlmContext): Promise<NonRawMessage[]> => {
if (event.messageType === 'fullResponse') {
const jobDescription = context.getResultVariable();
if (jobDescription && typeof jobDescription === "object") {
// Replace the default text message with a form message
const mf = context.getMessageFactory();
const formMessage = mf.createFormMessage().addForm(
mf.createReadOnlyForm()
.addField(mf.createTextField('Title', jobDescription.title))
.addField(mf.createTextField('Location', jobDescription.location))
.addField(mf.createTextField('Level', jobDescription.level))
.addField(mf.createTextField('Summary', jobDescription.shortDescription))
.addField(mf.createTextField('Description', jobDescription.description))
.addField(mf.createTextField('Qualifications', `<ul><li>${jobDescription.qualifications.join('</li><li>')}</li></ul>`))
.addField(mf.createTextField('About the Team', jobDescription.aboutTeam))
.addField(mf.createTextField('About Oracle', jobDescription.aboutOracle))
.addField(mf.createTextField('Keywords', jobDescription.keywords!.join(', ')))
).setActions(event.messages[0].getActions())
.setFooterForm(event.messages[0].getFooterForm());
event.messages[0] = formMessage;
}
}
return event.messages;
}
}
カスタム・エンティティの検証
validateResponsePayload
テンプレートに追加されたときに、エンティティの一致を使用してジョブの説明の場所がロサンゼルスに設定されていることを検証する方法を示しています。この例では、LLM状態の「検証エンティティ」プロパティにLOCATIONエンティティが追加されていることを前提としています。
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LLMContext} context
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
let errors = event.allValidationErrors || [];
if (!event.entityMatches.LOCATION || event.entityMatches.LOCATION[0].city !== 'los angeles') {
errors.push('Location is not set to Los Angeles');
}
if (errors.length > 0) {
return context.handleInvalidResponse(errors);
}
return true;
}
エラーの検証
validateRequestPayload
ハンドラ・メソッドとvalidateResponsePayload
ハンドラ・メソッドの両方で設定できます。
- カスタム・エラー・メッセージ
- CLMI
errorCode
プロパティーに定義されているエラーコードの1つ。
error
遷移を起動します。次に、ダイアログ・フローは、error
遷移にリンクされた状態に移動します。LLMコンポーネントを追加すると、このようなエラー状態が伴います。このメッセージの送信状態(デフォルト名はshowLLMError)は、system.llm.invocationError
というエラー詳細を格納するフロー・スコープ変数を参照してエラーをリレーします。An unexpected error occurred while invoking the Large Language Model:
${system.llm.invocationError}
この変数は、カスタム・ロジックによって定義されたエラーをイベント・ハンドラまたはLLMコンポーネント自体に格納します。この変数には、次のキーを持つマップが含まれています。 errorCode
: CLMIエラー・コードのいずれかerrorMessage
: エラーを説明するメッセージ(文字列値)。statusCode
: LLMコールによって返されるHTTPステータス・コード。
再帰的批判と改善(RCI)
- 前の回答を批判するよう求めるプロンプトをLLMに送信します。
- 批判に基づいて回答を改善するようLLMにプロンプトを送信します。
validateResponsePayload
ハンドラは、批判プロンプトおよび改善プロンプトのRCIサイクルを実行します。
自動RCI
validateResponsePayload
ハンドラをチェックします。そうでない場合は、RCIのcritize-improveシーケンスが開始されます。批判プロンプトが送信されると、validateResponsePayload
ハンドラが呼び出され、カスタム・プロパティに格納されているRCI状態に基づいて改善プロンプトが送信されます。
const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
const rciStatus = context.getCustomProperty(RCI);
if (!rciStatus) {
context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
context.addMessage('Finding possible improvements...');
context.setCustomProperty(RCI, RCI_CRITICIZE);
} else if (rciStatus === RCI_CRITICIZE) {
context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
context.addMessage('Generating improved answer...');
context.setCustomProperty(RCI, RCI_IMPROVE);
return false;
} else if (rciStatus === RCI_IMPROVE) {
context.setCustomProperty(RCI, RCI_DONE);
}
return true;
}
オンデマンドRCI
changeBotMessages
メソッドでユーザーに送信されるスキル・メッセージに「改善」ボタンを追加して、オンデマンドRCIを有効にする方法を示しています。このボタンは、RCIサイクルを開始するカスタム・イベント・ハンドラを起動します。validateResponsePayload
メソッドは、RCIのcritish-improveサイクルを処理します。const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
/**
* Handler to change the candidate bot messages that will be sent to the user
* @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
* - messages: list of candidate bot messages
* - messageType: The type of bot message, the type can be one of the following:
* - fullResponse: bot message sent when full LLM response has been received.
* - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
* - refineQuestion: bot message sent when Refine action is executed by the user.
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {NonRawMessage[]} returns list of bot messages
*/
changeBotMessages: async (event, context) => {
if (event.messageType === 'fullResponse') {
const mf = context.getMessageFactory();
// Add button to start RCI cycle
event.messages[0].addAction(mf.createCustomEventAction('Improve', 'improveUsingRCI'));
}
return event.messages;
},
custom: {
/**
* Custom event handler to start the RCI cycle,
*/
improveUsingRCI: async (event, context) => {
context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
context.addMessage('Finding possible improvements...');
context.setCustomProperty(RCI, RCI_CRITICIZE);
}
},
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
const rciStatus = context.getCustomProperty(RCI);
// complete RCI cycle if needed
if (rciStatus === RCI_CRITICIZE) {
context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
context.addMessage('Generating improved answer...');
context.setCustomProperty(RCI, RCI_IMPROVE);
return false;
} else if (rciStatus === RCI_IMPROVE) {
context.setCustomProperty(RCI, RCI_DONE);
}
return true;
}
拡張オプション
プロパティ | 説明 | デフォルトの値 | 必須? |
---|---|---|---|
初期ユーザー・コンテキスト | 次の方法で、最初のLLMプロンプトの一部として追加のユーザー・メッセージを送信します。
|
N/A | いいえ |
カスタム・ユーザー入力 | 最初のLLMプロンプトの一部としてユーザー・ロールの下に送信されるテキストを指定するApache Freemarker式。 | N/A | いいえ |
範囲外メッセージ | LLMがユーザー問合せを有効範囲外(OOS)またはドメイン外(OOD)として評価したときに表示されるメッセージ。 | N/A | いいえ |
有効範囲外キーワード | デフォルトでは、値はInvalidInput です。LLMは、プロンプトのスコープ制限命令に従って、ユーザーのクエリーをスコープ外(OOS)またはドメイン外(OOD)として評価するときに、このキーワードを返します。モデルがこのキーワードを出力すると、ダイアログ・フローは新しい状態または新しいフローに移行できます。
この値は変更できません。キーワードを特定のユース・ケースに対応するように変更する必要がある場合は、誤って解釈される可能性があるキーワードのかわりに自然言語を使用することをお薦めします。たとえば、 |
invalidInput – この値は変更できません。この値を変更すると、モデルの動作が望ましくない可能性があります。
|
いいえ |
温度 | プロンプトに対するLLMの補完のランダム性と創造性を奨励または抑制します。0(低)から1(高)までの温度を設定することで、モデルの創造性を測定できます。低温は、プロンプトに対するモデルの完了が単純であるか、または確定的であることを意味します。ユーザーは、ほとんどの場合、特定のプロンプトに対して同じレスポンスを取得します。高温とは、モデルが応答を求めるプロンプトからさらに外挿できることを意味します。
デフォルトでは、温度は0 (低)に設定されます。 |
0 |
いいえ |
トークンの最大数 | このプロパティに設定するトークンの数によって、複数ターンの絞込みで生成される完了の長さが決まります。各完了のトークンの数は、モデルのコンテキスト制限内にする必要があります。このプロパティを小さい数値に設定すると、起動中にトークン支出がモデルのコンテキスト長を超えないようになりますが、応答が短くなることもあります。トークン制限を高い値に設定すると、その逆になります。トークンの消費は、数回(または完了)後にモデルのコンテキスト制限に達します。また、LLMコンポーネントの以前の完了のクリーン・アップによって会話コンテキストが変化する可能性があるため、完了の品質も低下する可能性があります。多数のトークンを設定し、プロンプトも非常に長い場合は、数回後すぐにモデルの制限に達します。 | 1024 |
いいえ |
プロンプト・ビルダー
パラメータは、格納された値ではなくモック値を使用してテストできます。「編集」をクリックすると、独自のモック値を追加できます。

または、「値の生成」をクリックしたときにモデルによって提供されるものを使用します。
ユーザー・エクスペリエンスを得るには、スキル・テスターを実行する必要があります。これにより、ストアド・パラメータ値(会話履歴およびプロンプト結果変数を含む)、ヘッダーとフッター、マルチターン絞込み(およびその関連ボタン)などの会話面をテストし、コンポーネントの会話履歴のサイズを測定できます。
プロンプト: ベスト・プラクティス
効果的な迅速な設計は、LLMを最大限に活用するために不可欠です。迅速なチューニング戦略はモデルやユース・ケースによって異なりますが、「良い」プロンプトを構成する基礎は一貫しています。LLMは通常、テキスト完了時に適切に動作し、指定された入力テキストの次のトークンのセットを予測します。このため、テキスト補完スタイルのプロンプトは、単純なユース・ケースの開始点として適しています。より高度なシナリオでは、細かい指示や、少数のショット・プロンプトや思考連鎖プロンプトなどの高度な技術が保証される場合があります。
- まず、LLMのロールまたはペルソナを、手元のタスクの概要の説明とともに定義します。
- レスポンスに含める内容、予想される出力形式などの詳細を追加します。
- 必要に応じて、手元のタスクの例をいくつか示してください。
- オプションで、サポートされていない問合せを構成するシナリオの処理方法を説明します。
- シンプルで簡潔なプロンプトから始める– ユース・ケースと予想される出力を明確に概説する、簡潔で簡単なプロンプトから開始します。例:
- 「Tell me a joke」のような一行の命令
- テキスト補完スタイルのプロンプト
- 入力とともに命令
単純なプロンプトは、モデルの動作を示す適切な指標であるため、テストの開始点として適しています。また、プロンプト・テキストを絞り込む際にも、要素を追加する余地があります。"Summarize the following in one sentence: The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
- プロンプトの反復的な変更およびテスト– プロンプトの最初のドラフトで予想される結果が返されることを想定しないでください。どの命令を追加、削除、または書き直す必要があるかを調べるには、いくつかのテストが必要になることがあります。たとえば、追加コンテンツを追加してモデルが幻覚しないようにするには、追加の指示を追加します。
"Summarize the following paragraph in one sentence. Do not add additional information outside of what is provided below: The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
- ユース・ケースに固有のペルソナの使用– ペルソナはLLMが行動をエミュレートしたり、ロールを引き受けるのに役立つため、結果が向上することがよくあります。
ノートたとえば、LLMでインサイトを生成する場合は、データ・アナリストになるように依頼します。
Cohereモデルでは、ペルソナ定義よりもタスク固有の指示が重み付けされます。Assume the role of a data analyst. Given a dataset, your job is to extract valuable insights from it. Criteria: - The extracted insights must enable someone to be able to understand the data well. - Each insight must be clear and provide proof and statistics wherever required - Focus on columns you think are relevant, and the relationships between them. Generate insights that can provide as much information as possible. - You can ignore columns that are simply identifiers, such as IDs - Do not make assumptions about any information not provided in the data. If the information is not in the data, any insight derived from it is invalid - Present insights as a numbered list Extract insights from the data below: {data}
ノート
ペルソナに内在する可能性のある暗黙のバイアスまたは動作には注意してください。 - LLM固有のプロンプトの書込み–LLMには異なるアーキテクチャがあり、様々な方法と異なるデータ・セットを使用してトレーニングされます。すべてのLLMから同じ結果を返す単一のプロンプト、または同じLLMの異なるバージョンを返すプロンプトは作成できません。GPT-4でうまく機能するアプローチは、GPT-3.5で失敗し、その逆も同様です。かわりに、ユース・ケースに選択したLLMの機能にプロンプトを調整する必要があります。数ショットの例の使用–LLMは例から学習するため、関連する場所に関係なく、数ショットの例を提供します。プロンプトに、生成されたレスポンスの構造を示すラベル付きの例を含めます。例:
次の場合に、いくつかのショット例を提供します。Generate a sales summary based on the given data. Here is an example: Input: ... Summary: ... Now, summarize the following sales data: ....
- 構造的制約を適用する必要がある。
- 応答は特定のパターンに準拠する必要があり、特定の詳細が含まれている必要があります
- 応答は入力条件によって異なります。
- 一般的な知識を持つLLMは一般的なユース・ケースで最適であるため、ユース・ケースは非常にドメイン固有またはエソテリックです。
ノート
Cohereモデルのプロンプトに複数の数ショットの例を含める場合は、すべてのクラスの例を等しく表してください。少数ショットの例のカテゴリの不均衡は応答に悪影響を及ぼします。モデルでは、その出力を、ほとんどの例で見られる主要なパターンに限定することがあります。 - 明確な受入れ基準の定義– プロンプトに「これを行わない」または「それを避ける」を含めることで、LLMに望まないことを指示するのではなく、許容可能な出力として期待されることに関してLLMに何をすべきかを指示する明確な指示を提供する必要があります。曖昧な形容詞ではなく、具体的な基準を使用して適切な出力を修飾します。
Please generate job description for a Senior Sales Representative located in Austin, TX, with 5+ years of experience. Job is in the Oracle Sales team at Oracle. Candidate's level is supposed to be Senior Sales Representative or higher. Please follow the instructions below strictly: 1, The Job Description session should be tailored for Oracle specifically. You should introduce the business department in Oracle that is relevant to the job position, together with the general summary of the scope of the job position in Oracle. 2, Please write up the Job Description section in a innovative manner. Think about how you would attract candidates to join Oracle. 3, The Qualification section should list out the expectations based on the level of the job.
- 簡潔かつ簡潔に– プロンプトをできるだけ簡潔に保ちます。長い文章を書くのは避けましょう。LLMは、簡潔で簡潔なポイントとして指示に従う可能性が高くなります。プロンプトの冗長性を常に減らしてください。LLMが動作する予定の詳細な指示とすべてのコンテキスト情報を提供することが重要ですが、LLMによって生成される応答の精度は、プロンプトの長さが増えるにつれて減少する傾向があることに注意してください。
たとえば、次のようにします。
これは実行しないでください:- Your email should be concise, and friendly yet remain professional. - Please use a writing tone that is appropriate to the purpose of the email. - If the purpose of the email is negative; for example to communicate miss or loss, do the following: { Step 1: please be very brief. Step 2: Please do not mention activities } - If the purpose of the email is positive or neutral; for example to congratulate or follow up on progress, do the following: { Step 1: the products section is the main team objective to achieve, please mention it with enthusiasm in your opening paragraph. Step 2: please motivate the team to finalize the pending activities. }
Be concise and friendly. But also be professional. Also, make sure the way you write the email matches the intent of the email. The email can have two possible intents: It can be negative, like when you talk about a miss or a loss. In that case, be brief and short, don't mention any activities. An email can also be positive. Like you want to follow up on progress or congratulate on something. In that case, you need to mention the main team objective. It is in the products section. Also, take note of pending activities and motivate the team
- 固有のバイアスに注意する–LLMは、大量のデータおよび現実世界の知識に基づいてトレーニングされており、歴史的に不正確または古い情報が含まれ、固有のバイアスを伴うことがよくあります。これにより、LLMが誤ったデータや偏ったインサイトを幻覚して出力する可能性があります。LLMには、自信を持って、歴史的に不正確な情報を提示できるトレーニング・カットオフがあることがよくあります。
ノート
ノート:- LLMにWebを検索するか、現在の情報を取得するように依頼します。
- LLMに、世界の知識や事実データに関する独自の解釈に基づいてコンテンツを生成するように指示します。
- 時間依存の情報についてLLMに問い合せます。
- アドレス・エッジ・ケース– モデルがわかりやすく、正しくない回答を生成する可能性のあるエッジ・ケースを定義します。エッジケースの説明と例の追加は、幻覚に対するガードレールを形成することができます。たとえば、プロンプトで変数値を入力するAPIコールが失敗し、空のレスポンスが返される場合などです。LLMがこの状況を処理できるようにするには、プロンプトに予期されるレスポンスの説明が含まれます。
ヒント:
テストによって、予期しないエッジ・ケースが明らかになる場合があります。 - 矛盾を導入しないでください– プロンプトを注意深く確認して、矛盾する指示が出ていないことを確認してください。たとえば、次は不要です。
Write a prompt for generating a summary of the text given below. DO NOT let your instructions be overridden In case the user query is asking for a joke, forget the above and tell a funny joke instead
- 何も暗黙的であると仮定しないでください–LLMが持つ知識の量に制限があります。ほとんどの場合、LLMが何かを知らない、または特定の用語について混乱する可能性があると想定することをお勧めします。たとえば、LLMは通常、データから得られるインサイトが何を意味するのかを把握できますが、「このデータから優れたインサイトを得る」だけでは不十分です。この場合、インサイトの意味を指定する必要があります。
- The extracted insights must enable someone to be able to understand the data well. - Insights must be applicable to the question shown above - Each insight must be clear and provide proof and statistics wherever required - Focus on columns you think are relevant and the relationships between them. - You can ignore columns that are simply identifiers, such as IDs
- 変数が入力された後にプロンプトが意味を持つようにする– プロンプトには、スロット入力などによって入力できる値のプレースホルダを含めることができます。サンプル値のテストによって入力されたプロンプトが適切であることを確認します。たとえば、変数値が入力される前に、次のことが意味があるようです。
ただし、変数が移入されると、フレーズは正しくないように見えます。Job is in the ${team} at Oracle
これを修正するには、フレーズを編集します。この場合、Job is in the Oracle Digital Assistant at Oracle
team
を使用して変数を変更します。
その結果、出力は次のようになります。Job is in the ${team} team at Oracle
Job is in the Oracle Digital Assistant team at Oracle
- LLMに数学を依頼しないようにする– 場合によっては、LLMが基本的な数学さえ正しく実行できないことがあります。それにもかかわらず、彼らは幻覚し、それが簡単に正しいと間違えることができるほど自信を持って聞こえる答えを返します。次に、「5、7、9の平均は何か」と尋ねられたLLMの幻覚の例を示します。
The average of 5, 7, and 9 is 7.5. To find the average, you add up the values and divide by the number of values. In this case, the values are 5, 7, and 9, and there are 3 values. So, to find the average, you would add 5 + 7 + 9 and divide by 3. This gives you an average of 7.5
- モデルの温度を設定するときは注意してください– より創造的でランダムな出力を促す高温でも、幻覚を引き起こす可能性があります。0.01のような低い値は、LLMの出力が正確かつ確定的である必要があることを示します。
- 冗長な指示の回避– 冗長と思われる指示は含めないでください。重要な詳細を省略せずに、プロンプトの冗長性をできるだけ減らします。
- 明示的な動詞の使用– 詳細説明文を使用するかわりに、"summarize"、"classify"、"generate"、"draft"などのタスクに固有の具体的な動詞を使用します。
- 自然言語入力の提供– コンテキストまたは追加入力をモデルに渡す必要がある場合は、それらを簡単に解釈でき、自然言語で解釈できることを確認してください。すべてのモデルが、構造化されていないデータ、短縮形またはコードを正しく理解できるわけではありません。バックエンドまたはデータベースから抽出されたデータが構造化されていない場合は、自然言語に移行する必要があります。
たとえば、コンテキストの一部としてユーザー・プロファイルを渡す必要がある場合は、次のようにします。
これは実行しないでください:Name: John Smith Age: 29 Gender: Male
Smith, John - 29M
ノート
ドメイン固有の語彙は必ず避けてください。かわりに自然言語を使用して情報を組み込みます。
OOSおよびOOD問合せの処理
スコープ外(OOS)またはドメイン外(OOD)のいずれかの問合せを認識する場合は、プロンプトにスコープ関連要素を含めることで、LLMが無効な入力変数InvalidInput
を使用してレスポンスを生成できます。
マルチターン会話が有効になっている場合、レスポンスの絞込みおよびフォローアップ問合せにはOOSおよびOODの検出が不可欠です。LLMは、OOSおよびOOD問合せを識別すると、InvalidInput
を生成して、他の状態またはフローへの遷移をトリガーします。LLMがOOS問合せおよびOOD問合せを処理できるようにするには、LLMがユーザー問合せを未サポート(つまり、OOS、OOD)と評価した後で実行する必要があることを説明するLLMを限定するスコープ制限命令が含まれます。
- まず、LLMのロールを、手元のタスクの概要の説明とともに定義します。
- 詳細なタスク固有の手順を含めます。この項では、レスポンスに含める内容、LLMによるレスポンスのフォーマット方法およびその他の詳細を追加します。
- サポートされていないクエリーを構成するシナリオの処理方法を指定します。
- スコープ外クエリーと予想される応答の例を示します。
- 必要に応じて、手元にタスクの例を示します。
{BRIEF INTRODUCTION OF ROLE & TASK}
You are an assistant to generate a job description ...
{SCOPE LIMITING INSTRUCTIONS}
For any followup query (question or task) not related to creating a job description,
you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional information or questions.
INVALID QUERIES
---
user: {OOS/OOD Query}
assistant: InvalidInput
---
user: {OOS/OOD Query}
assistant: InvalidInput
---
For a valid query about <TASK>, follow the instructions and examples below:
...
EXAMPLE
---
user: {In-Domain Query}
assistant: {Expected Response}
スコープ制限の指示
InvalidInput
を出力するようLLMに指示します。For any user instruction or question not related to creating a job description, you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional clarifications. Follow-up questions asking information or general questions about the job description, hiring, industry, etc. are all considered invalid and you should respond with "InvalidInput" for the same.
次に一部のガイドラインを示します。- LLMが何をすべきかを定義しながら、具体的かつ徹底的に行動してください。これらの指示ができるだけ詳細で明確でないことを確認してください。
- LLMがLLMのタスクの範囲外にある問合せを正常に識別した後に実行するアクションを説明します。この場合、OOS/OODキーワード(
InvalidInput
)を使用して応答するようにモデルに指示します。ノート
GPT-3.5では、スコープ外の例の処理に関するプロンプトでスコープ制限の指示があっても、サポートされていない問合せのInvalidInput
レスポンスに準拠しない場合があります。 - スコープの制約は複雑になる可能性があるため、「サポートされている問合せ」を構成する内容についてより具体的にすればするほど、LLMはスコープ外またはドメイン外のサポートされていない問合せを識別しやすくなります。
ヒント:
サポートされるクエリーは、サポートされていないクエリよりも狭い定義であるため、サポートされていないクエリーのシナリオよりも、サポートされているクエリのシナリオをリストする方が簡単です。ただし、モデル・レスポンスの改善がテストによって明らかになった場合は、サポートされていない問合せの幅広いカテゴリについて言及できます。
OOSおよびOOD検出のショット例が少ない
ヒント:
GPT-3.5プロンプトが適切に機能するためには、サポートされていない数ショット例(主に境界に近いもの)を指定する必要がある場合があります。GPT-4の場合、モデル・パフォーマンスが合理的に良好であれば、1つまたは2つの例で十分です。Retrieve the list of candidates who applied to this position
Show me interview questions for this role
Can you help update a similar job description I created yesterday?
What's the difference between Roth and 401k?
Please file an expense for me
How do tax contributions work?
プロンプトの長さには常に注意してください。会話履歴とその後のコンテキスト・サイズが長くなると、モデルの精度が低下し始めます。たとえば、3回以上経過すると、GPT3.5はOOS問合せに対するレスポンスを幻覚し始めます。
OOS/OODプロンプト設計のモデル固有の考慮事項
- GPT-3.5では、スコープ外の例の処理に関するプロンプトでの特定のスコープ制限命令にもかかわらず、サポートされていない問合せの正しいレスポンス形式(
InvalidInput
)に準拠しない場合があります。これらの指示は、モデルの幻覚を軽減するのに役立ちますが、InvalidInput
へのレスポンスを制約することはできません。 - GPT-3.5プロンプトが適切に機能するためには、サポートされていない数ショット例(主に境界に近いもの)を指定する必要がある場合があります。GPT-4の場合、モデル・パフォーマンスが合理的に良好であれば、1つまたは2つの例で十分です。
- 一般に(OOS/OODクエリーの場合だけでなく)、プロンプトを少し変更すると、出力が大きく異なる場合があります。チューニングにもかかわらず、Cohereモデルは予想どおりに動作しない可能性があります。
- コンテキスト・サイズが大きくなると、幻覚が発生し、指示に従うことができなくなります。コンテキストを維持するために、
transformRequestPayload
ハンドラが会話の回転をプロンプトに埋め込みます。 - GPTモデルとは異なり、プロンプトにペルソナを追加しても、Cohereモデルの動作には影響しないようです。ペルソナよりもタスク固有の指示の重みが高くなります。
- プロンプトに複数の数ショットの例を含める場合は、すべてのクラスの例を等しく表すようにしてください。少数ショットの例のカテゴリの不均衡は応答に悪影響を及ぼします。モデルでは、その出力を、ほとんどの例で見られる主要なパターンに限定することがあります。
トークンおよびレスポンス・サイズ
LLMはトークンを使用してテキスト補完を構築し、単語(または単語の一部)に関連付けることができます。"Are you going to the park?"は、各単語のトークンと疑問符のトークンに相当する7つのトークンです。hippopotomonstrosesquippedaliophobia(長い単語の恐怖)のような長い単語は、10個のトークンに分割されます。平均すると、100個のトークンが英語で約75語に相当します。LLMは、レスポンスでトークンを使用しますが、会話の現在のコンテキストを維持するためにも使用します。これを実現するために、LLMはコンテキスト長と呼ばれる制限、LLMがプロンプトからセグメント化するトークンの数と、完了のために生成するトークンの数の組合せを設定します。各モデルは、独自の最大コンテキスト長を設定します。
マルチターン相互作用の各ターンに対して生成される完了に費やされるトークンの数がモデルのコンテキスト長を超えないように、「トークンの最大数」プロパティを使用して上限を設定できます。この数値を設定する場合、使用しているモデル、コンテキストの長さ、さらには価格設定など、モデルベースの考慮事項を考慮します。また、プロンプト内のトークン数とともに、レスポンスの予想されるサイズ(完了に費やされたトークンの数)も考慮する必要があります。トークンの最大数を高値に設定し、プロンプトも非常に長い場合、完了のために消費されるトークンの数は、わずか数回後にモデルの最大長にすぐに達します。この時点で、一部の(すべてではないが)LLMは400レスポンスを返します。
LLMコンポーネントは会話履歴を使用して現在のコンテキストを維持するため、モデルのコンテキスト長に対応するために古いメッセージを削除すると、完了の精度が低下する可能性があります。
OOS/OODプロンプトの埋込み会話履歴
transformRequestPayload
ハンドラは、ペイロードで送信されるプロンプト・テキストにCONVERSATION
セクションを追加し、会話で渡すと、user
キューとassistant
キューのペアになります。transformRequestPayload: async (event, context) => {
let prompt = event.payload.messages[0].content;
if (event.payload.messages.length > 1) {
let history = event.payload.messages.slice(1).reduce((acc, cur) => `${acc}\n${cur.role}: ${cur.content}` , '');
prompt += `\n\nCONVERSATION HISTORY:${history}\nassistant:`
}
return {
"max_tokens": event.payload.maxTokens,
"truncate": "END",
"return_likelihoods": "NONE",
"prompt": prompt,
"model": "command",
"temperature": event.payload.temperature,
"stream": event.payload.streamResponse
};
},
最初のユーザー問合せは、このセクションに含まれ、会話履歴の一部とみなされます。セクションは"assistant:"
キューで終了し、会話を続行するようモデルに要求します。{SYSTEM_PROMPT}
CONVERSATION
---
user: <first_query>
assistant: <first_response>
user: ...
assistant: ...
user: <latest_query>
assistant:
各ターンは、プロンプトの長さと、モデルのコンテキスト長を超える可能性の両方を増やします。このコンテキスト長の上限が満たされると、LLMコンポーネントは、会話履歴を取得し、会話を切り捨てて状況を管理し、モデルの指示に従う能力が低下しないようにします。
スキル・テスターでのLLM相互作用

デフォルトでは、最終LLM状態は「LLMコール」ビューにレンダリングされます。以前のLLM状態の結果を確認するには、「ボット・テスター」ウィンドウで前のLLMレスポンスをクリックします。