AWS認定資格 WEB問題集&徹底解説

生成AIデベロッパー-プロフェッショナル

正解 C問題
分野2:実装と統合 分野1:基盤モデルの統合、データ管理、コンプライアンス タスクステートメント2.4:FM API 統合の実装 タスクステートメント1.6:FM 対話向けのプロンプトエンジニアリング戦略とガバナンスの実装
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
ある開発会社は、社内エンジニア向けにコードレビューを支援するアシスタントを Amazon Bedrock の Converse API で構築している。このアシスタントには「シニアレビュアーとして振る舞う」という役割設定を与えたうえで、開発者からの質問を受け取り、さらに直前のやり取りでアシスタント自身が行った指摘内容も踏まえて回答させたい。標準的なプロンプト構造に従って会話を組み立てる場合、どのメッセージロール構成にすべきか。
  • User メッセージに役割設定を書き、質問は System メッセージに、直前のやり取りは Assistant メッセージに格納する
  • 会話全体を1つの User メッセージ内にJSON形式でまとめ、instruction・question・previous_reply というフィールド名で管理し、role パラメータ自体は使用しない
  • System メッセージに役割設定を、User メッセージに質問を、Assistant メッセージに直前のアシスタントの発言を格納する
  • Assistant メッセージに役割設定を、System メッセージに質問を、User メッセージに直前のやり取りを格納する
解説 頻出度★★★★★
この問題は、「役割設定 × 利用者の質問 × 直前のモデル発言」をそれぞれどのロールに載せるかを問うもので、System=役割・指示、User=人間の入力、Assistant=モデルの過去の応答という標準構造をそのまま適用できるかがポイント

A. User メッセージに役割設定を書き、質問は System メッセージに、直前のやり取りは Assistant メッセージに格納する

役割設定を User メッセージへ、質問を System メッセージへ置くのは役割が完全に逆です。System は会話全体を通してモデルに守らせたい指示やペルソナ(ここでは「シニアレビュアーとして振る舞う」)を与える場所であり、User はその時々の人間の入力を載せる場所です。
指示と入力が入れ替わると、モデルは「シニアレビュアーとして振る舞う」という文をユーザーの発話として扱い、役割設定がターンをまたいで効かなくなります。

B. 会話全体を1つの User メッセージ内にJSON形式でまとめ、instruction・question・previous_reply というフィールド名で管理し、role パラメータ自体は使用しない

会話全体を 1 つの User メッセージに詰め込み独自のフィールド名で管理する方式は、モデルが「誰の発言か」を構造として認識できなくなるため標準構造から外れます。role による区別があるからこそ、モデルは指示・質問・自身の過去の発言を分けて解釈できます。
Amazon Bedrock の Converse API でも会話コンテキストの維持は「すべてのメッセージを messages に並べ、role で発信元を示す」ことが前提であり、role を使わない自己流の JSON はマルチターン処理やツール利用などの標準機能とも噛み合いません。

正解

C. System メッセージに役割設定を、User メッセージに質問を、Assistant メッセージに直前のアシスタントの発言を格納する

System メッセージ(Converse API では system フィールド)に「シニアレビュアーとして振る舞う」という役割設定を置き、User メッセージに開発者からの質問、Assistant メッセージに直前にモデル自身が返した指摘を置く、標準的なプロンプト構造そのものです。
Converse API の messages で指定できる role は user(モデルへ送るプロンプト)と assistant(モデルの応答)の 2 種類で、過去のやり取りを user/assistant の交互の並びとして送り直すことで会話コンテキストが維持されます。
役割・入力・履歴が構造として分離されるため、役割設定はターンをまたいで安定して効き、直前の指摘も踏まえた回答が得られる唯一の正解です。

D. Assistant メッセージに役割設定を、System メッセージに質問を、User メッセージに直前のやり取りを格納する

役割設定を Assistant に、質問を System に、直前のやり取りを User に置くのは3 つとも取り違えた配置です。Assistant はモデル自身の過去の応答を表すロールなので、そこに役割設定を書くと「モデルが以前そう発言した」という履歴として扱われ、指示としての強制力が弱くなります。
また、その時々の質問を System に入れると会話全体を支配する指示として残り続け、ターンが進むほど過去の質問が邪魔をします。

これだけ覚える(記憶フック)
System=役割設定、User=質問、Assistant=モデルの前回発言。ロールを入れ替えた瞬間に誤り。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
「シニアレビュアーとして振る舞う」という役割設定を与えたい 会話全体に効かせる指示・ペルソナは System(Converse API では system フィールド)に置く
→選択肢(A・D)を消す
開発者からの質問を受け取って回答させたい 人間からのその時々の入力は User ロール。指示と混同しない
→選択肢(A・D)を消す
直前のやり取りでアシスタント自身が行った指摘も踏まえたい モデルの過去の応答は Assistant ロールとして messages に積み直す。user と assistant の交互の並びが会話履歴
→選択肢(C)が正解
「標準的なプロンプト構造に従って」組み立てる role を使わず 1 つのメッセージに詰め込む独自形式は、モデルが発言者を区別できず標準機能とも噛み合わない
→選択肢(B)を消す
ひっかけポイント
  • 選択肢 A・D は3 つのロールを入れ替えただけで、単語としては正しいものが並ぶ。「System に何を置くか」を暗記ではなく「会話全体に効かせたい指示か、その場の入力か」で判断する
  • 選択肢 B の「JSON でまとめれば同じ情報が渡る」は誤り。role が無いと指示・質問・過去の応答の区別が構造として失われる
  • Converse API の messages で指定できる role は user と assistant の 2 つだけで、システムプロンプトは messages ではなく独立した system フィールドで渡す。「role='system' のメッセージを messages に入れる」実装はエラーになる
  • 会話履歴は毎回のリクエストで丸ごと送り直すもの。Amazon Bedrock 側がセッションを保持してくれる、と思い込むと選択肢の意図を読み違える
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
複数ターンの会話コンテキストを保持したい」 毎リクエストに全メッセージを含める設計+Amazon DynamoDB 等への会話履歴の永続化が正解軸に。
「役割設定(システムプロンプト)をチームで共有・バージョン管理したい」 Amazon Bedrock Prompt Management によるテンプレート管理と承認ワークフローが正解軸に。
「モデルに外部ツール/API を呼ばせたい Converse API の toolConfig でツールを定義し、結果を toolResult として返す構成が正解軸に。
「毎回同じ長い役割設定を送るのでコストを下げたい プロンプトキャッシュで共通部分をキャッシュする最適化が問われる。
関連サービスの解説 Amazon Bedrock
リファレンス この問題を解くために必要な知識を扱う公式ドキュメントです。
知識項目 公式ドキュメント
Converse API のロール構成(system フィールドと user/assistant メッセージ) Converse API を使用した推論 - Amazon Bedrock
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 0%
No.6 解説
ある開発会社は、社内エンジニア向けにコードレビューを支援するアシスタントを Amazon Bedrock の Converse API で構築している。このアシスタントには「シニアレビュアーとして振る舞う」という役割設定を与えたうえで、開発者からの質問を受け取り、さらに直前のやり取りでアシスタント自身が行った指摘内容も踏まえて回答させたい。標準的なプロンプト構造に従って会話を組み立てる場合、どのメッセージロール構成にすべきか。
  • User メッセージに役割設定を書き、質問は System メッセージに、直前のやり取りは Assistant メッセージに格納する
  • 会話全体を1つの User メッセージ内にJSON形式でまとめ、instruction・question・previous_reply というフィールド名で管理し、role パラメータ自体は使用しない
  • System メッセージに役割設定を、User メッセージに質問を、Assistant メッセージに直前のアシスタントの発言を格納する
  • Assistant メッセージに役割設定を、System メッセージに質問を、User メッセージに直前のやり取りを格納する

(会員限定)当問題の評価をお願いします。改善に活用します。