データセットスキーマ
データセットには 1 つ以上のシナリオが含まれています。各シナリオは、エージェントとの会話 (セッション) を表します。オンデマンドデータセットランナーとバッチデータセットランナーの両方が同じデータセット形式を使用します。
AgentCore SDK は 2 つのシナリオタイプをサポートしています。
-
事前定義されたシナリオでは、手動で作成する固定のターンシーケンスを使用します。ランナーは、書き込まれたとおりにターンを再生します。
-
シミュレートされたシナリオでは、LLM-backed アクターを使用して、ペルソナと目標に基づいて動的にターンを生成します。アクタープロファイルとシミュレーション設定の詳細については、「ユーザーシミュレーション」を参照してください。
FileDatasetProvider は JSON 構造からシナリオタイプを自動検出します。 turns フィールドを持つシナリオは事前定義済みとしてロードされ、 actor_profileフィールドを持つシナリオ (および なしturns) はシミュレートされたとおりにロードされます。
事前定義されたシナリオ
事前定義されたシナリオでは、既知の入力とオプションの予想出力を使用して、固定のターンシーケンスを指定します。
シングルターンの例
各シナリオは 1 つのプロンプトを送信し、レスポンスをチェックします。
{ "scenarios": [ { "scenario_id": "math-question", "turns": [ { "input": "What is 15 + 27?", "expected_response": "15 + 27 = 42" } ], "expected_trajectory": ["calculator"], "assertions": ["Agent used the calculator tool to compute the result"] }, { "scenario_id": "weather-check", "turns": [ { "input": "What's the weather?", "expected_response": "The weather is sunny" } ], "expected_trajectory": ["weather"], "assertions": ["Agent used the weather tool"] } ] }
マルチターンの例
マルチターンシナリオでは、シナリオごとに複数のターンがあります。同じセッション内で順番に実行し、会話コンテキストを維持します。各ターンは独自の を持つことができexpected_response、 assertionsと はセッション全体expected_trajectoryに適用されます。
{ "scenarios": [ { "scenario_id": "math-then-weather", "turns": [ { "input": "What is 15 + 27?", "expected_response": "15 + 27 = 42" }, { "input": "What's the weather?", "expected_response": "The weather is sunny" } ], "expected_trajectory": ["calculator", "weather"], "assertions": [ "Agent used the calculator tool for the math question", "Agent used the weather tool when asked about weather" ] } ] }
シナリオフィールド
| フィールド | 必要 | タイプ | 制約 | [Description] (説明) |
|---|---|---|---|---|
|
|
はい |
String |
空ではない。 |
シナリオの一意の識別子。 |
|
|
はい |
オブジェクトのリスト |
空でないリスト |
会話のターンのリスト。各ターンには |
|
|
いいえ |
文字列のリスト |
予想されるツール名のシーケンス。軌道評価者 ( |
|
|
|
いいえ |
文字列のリスト |
予想される動作に関する自然言語アサーション。 |
|
|
|
いいえ |
オブジェクト |
シナリオの任意のキーと値のメタデータ。 |
ターンフィールド
| フィールド | 必要 | タイプ | 制約 | [Description] (説明) |
|---|---|---|---|---|
|
|
はい |
文字列またはオブジェクト |
空ではない。 |
このターンのためにエージェントに送信されたプロンプト。プレーン文字列 ( など |
|
|
いいえ |
String |
このターンで予想されるエージェントのレスポンス。 |
シミュレートされたシナリオ
シミュレートされたシナリオでは、アクタープロファイルと初期入力を定義します。アクターは後続のターンを動的に生成します。
{ "scenarios": [ { "scenario_id": "geography-student", "scenario_description": "A curious student asks geography questions", "actor_profile": { "traits": {"expertise": "novice", "tone": "curious"}, "context": "A student studying world geography who wants to learn about capitals", "goal": "Find out the capital cities of at least two different countries" }, "input": "Hi! I'm studying geography. Can you help me learn about world capitals?", "max_turns": 5, "assertions": [ "Agent provides accurate capital city information", "Agent is helpful and encouraging to the student" ] } ] }
シナリオフィールド
| フィールド | 必要 | タイプ | 制約 | [Description] (説明) |
|---|---|---|---|---|
|
|
はい |
String |
空ではない。 |
シナリオの一意の識別子。 |
|
|
はい |
オブジェクト |
|
(必須)、 |
|
|
はい |
文字列またはオブジェクト |
空ではない。 |
会話を開始するためにエージェントに送信された最初のメッセージ。通常、プレーン文字列ですが、構造化オブジェクトにすることもできます。 |
|
|
いいえ |
String |
シナリオを説明するオプションのメタデータ。結果のシナリオを整理および識別するのに役立ちます。 |
|
|
|
いいえ |
整数 |
≥ 1 である必要があります |
会話が停止するまでの最大ターン数。デフォルト: 10 |
|
|
いいえ |
文字列のリスト |
予想される動作に関する自然言語アサーション。 |
|
|
|
いいえ |
オブジェクト |
シナリオの任意のキーと値のメタデータ。 |
注記
会話フローが事前にわからないexpected_responseため、シミュレートされたシナリオでは、ターンごとの expected_trajectoryまたは はサポートされていません。シミュレートされたシナリオでグラウンドトゥルースassertionsに使用します。
グラウンドトゥルースマッピング
どちらのランナーも、データセットフィールドをそれらを使用する評価者に自動的にマッピングします。
| 評価者 | Ground Truth フィールド | レベル | 説明 |
|---|---|---|---|
|
|
|
トレース |
エージェントのレスポンスが予想される回答とどの程度正確に一致するかを測定します。 |
|
|
|
Session |
エージェントの動作が自然言語アサーションを満たしているかどうかを検証します。 |
|
|
|
Session |
実際のツール呼び出しシーケンスが正確に一致することを確認します。 |
|
|
|
Session |
予想されるツールが順番に表示され、それらの間に余分なツールがあることを確認します。 |
|
|
|
Session |
順序に関係なく、予想されるすべてのツールが存在することを確認します。 |
-
Ground Truth フィールドはオプションです。グラウンドトゥルースを使用しない評価者 (例:
Builtin.Helpfulness、Builtin.Faithfulness) は、セッションコンテンツのみに基づいて評価します。 -
すべてのグラウンドトゥルースフィールドを 1 つのデータセットに含めることができます。各ランナーは、関連するフィールドを適切な評価者にルーティングします。
-
グラウンドトゥルースフィールドが存在しない場合、評価者はグラウンドトゥルースフリーモードに戻ります。
グラウンドトゥルースフィールドとそれらが Evaluate API とどのように連携するかの詳細については、「グラウンドトゥルース評価」を参照してください。
インラインデータセットの構築
JSON ファイルからロードする代わりに、Python でデータセットを直接作成できます。
from bedrock_agentcore.evaluation import Dataset, PredefinedScenario, Turn dataset = Dataset( scenarios=[ PredefinedScenario( scenario_id="math-question", turns=[ Turn( input="What is 15 + 27?", expected_response="15 + 27 = 42", ), ], expected_trajectory=["calculator"], assertions=["Agent used the calculator tool"], ), PredefinedScenario( scenario_id="weather-check", turns=[ Turn(input="What's the weather?"), ], expected_trajectory=["weather"], ), ] )
または、JSON ファイルからロードします。
from bedrock_agentcore.evaluation import FileDatasetProvider dataset = FileDatasetProvider("dataset.json").get_dataset()