ある人材マッチングプラットフォームが、Amazon Bedrock Agentsを使って求職者向けのキャリアアドバイスエージェントを構築しています。エージェントには以下の2つの要件があります: ①求職者の職種カテゴリ(エンジニア/デザイナー/マーケターなど)に応じて、システムプロンプト内のアドバイスのトーンや専門用語を動的に変える、 ②アクショングループのLambda関数が求職者のユーザーIDを参照して、適切な求人データベースに対してクエリを実行する。これらの要件を同時に満たすため、InvokeAgent API呼び出し時のsessionStateパラメータをどのように設定すべきですか?
正解: 職種カテゴリをpromptSessionAttributesに、ユーザーIDをsessionAttributesに設定する。 Amazon Bedrock AgentsのsessionStateには用途の異なる2種類の属性があります。 promptSessionAttributesはエージェントのプロンプトテンプレート(システムプロンプト)内の$prompt_session_attributes$プレースホルダーを通じて参照でき、プロンプトの内容をリクエスト(ターン)ごとに動的にカスタマイズするために使用します。職種カテゴリのようにシステムプロンプトのトーンや専門用語を変えたい場合はpromptSessionAttributesが適切です(sessionAttributesはプロンプトテンプレートのプレースホルダーで展開できません)。 一方、sessionAttributesはセッション全体で永続する属性で、Lambda関数のinput eventからevent['sessionAttributes']['userId']のように参照できます。ユーザーIDはセッション中安定して使われるため、sessionAttributesに置くのが適切です。 選択肢Bは、職種カテゴリをsessionAttributesに置くとプロンプトテンプレートのプレースホルダーで参照できず、システムプロンプトの動的変更(要件①)が実現できません。またユーザーIDをpromptSessionAttributesに置くとシステムプロンプトに不要に露出します。 選択肢Cは、promptSessionAttributesもLambdaのinput eventに渡るため要件②自体は満たせますが、ユーザーIDが不要にシステムプロンプトへ露出し、かつpromptSessionAttributesはターン単位でしか保持されません。セッション全体で安定して使うユーザーIDはsessionAttributesに置くのが適切で、Cは最適ではありません。 選択肢Dは、両方sessionAttributesに置くとLambdaへの受け渡しは可能ですが、sessionAttributesはプロンプトテンプレートのプレースホルダーで展開できないため、システムプロンプトの動的変更(要件①)を実現できません。