コンテンツにスキップ

ユーザーシミュレーション

ADKでサポートPython v1.18.0

会話型エージェントを評価する場合、会話が予期しない方向に進む可能性があるため、固定されたユーザープロンプトのセットを使用することは必ずしも実用的ではありません。たとえば、エージェントがタスクを実行するためにユーザーに2つの値を指定する必要がある場合、それらの値を一度に1つずつ、または一度に両方尋ねることがあります。この問題を解決するために、ADKは生成AIモデルを使用してユーザープロンプトを動的に生成できます。

この機能を使用するには、エージェントとの会話におけるユーザーの目標を指示するConversationScenarioを指定する必要があります。 hello_worldエージェントのサンプル会話シナリオを以下に示します。

{
  "starting_prompt": "何ができますか?",
  "conversation_plan": "エージェントに20面ダイスを振るように依頼します。結果が出たら、それが素数かどうかを確認するようにエージェントに依頼します。"
}

会話シナリオのstarting_promptは、ユーザーがエージェントとの会話を開始するために使用する必要がある固定の初期プロンプトを指定します。エージェントがさまざまな方法で応答する可能性があるため、エージェントとの後続の対話にこのような固定プロンプトを指定することは実用的ではありません。代わりに、conversation_planは、エージェントとの残りの会話をどのように進めるべきかについてのガイドラインを提供します。LLMは、この会話計画を会話履歴とともに使用して、会話が完了したと判断するまでユーザープロンプトを動的に生成します。

Colabで試す

このワークフロー全体を、ADKエージェントを動的に評価するためのユーザー会話のシミュレーションに関するインタラクティブなノートブックで自分でテストしてください。会話シナリオを定義し、「ドライラン」を実行して対話を確認し、完全な評価を実行してエージェントの応答を採点します。

例:会話シナリオを使用したhello_worldエージェントの評価

会話シナリオを含む評価ケースを新規または既存のEvalSetに追加するには、まずエージェントをテストするための会話シナリオのリストを作成する必要があります。

以下をcontributing/samples/hello_world/conversation_scenarios.jsonに保存してみてください。

{
  "scenarios": [
    {
      "starting_prompt": "何ができますか?",
      "conversation_plan": "エージェントに20面ダイスを振るように依頼します。結果が出たら、それが素数かどうかを確認するようにエージェントに依頼します。"
    },
    {
      "starting_prompt": "こんにちは、素数が悪い卓上RPGを実行しています!",
      "conversation_plan": "値は気にせず、エージェントにロールが良いか悪いかを教えてもらいたいだけだと言います。エージェントが同意したら、6面ダイスを振るように依頼します。最後に、エージェントに2つの20面ダイスで同じことをするように依頼します。"
    }
  ]
}

評価中に使用される情報を含むセッション入力ファイルも必要になります。以下をcontributing/samples/hello_world/session_input.jsonに保存してみてください。

{
  "app_name": "hello_world",
  "user_id": "user"
}

次に、会話シナリオをEvalSetに追加できます。

# (オプション) 新しいEvalSetを作成する
adk eval_set create \
  contributing/samples/hello_world \
  eval_set_with_scenarios

# 会話シナリオを新しい評価ケースとしてEvalSetに追加する
adk eval_set add_eval_case \
  contributing/samples/hello_world \
  eval_set_with_scenarios \
  --scenarios_file contributing/samples/hello_world/conversation_scenarios.json \
  --session_input_file contributing/samples/hello_world/session_input.json

デフォルトでは、ADKはエージェントの期待される応答を指定する必要があるメトリックを使用して評価を実行します。動的な会話シナリオの場合はそうではないため、いくつかの代替サポートされているメトリックを持つEvalConfigを使用します。

以下をcontributing/samples/hello_world/eval_config.jsonに保存してみてください。

{
  "criteria": {
    "hallucinations_v1": {
      "threshold": 0.5,
      "evaluate_intermediate_nl_responses": true
    },
    "safety_v1": {
      "threshold": 0.8
    }
  }
}

最後に、adk evalコマンドを使用して評価を実行できます。

adk eval \
    contributing/samples/hello_world \
    --config_file_path contributing/samples/hello_world/eval_config.json \
    eval_set_with_scenarios \
    --print_detailed_results

ユーザーシミュレーターの構成

デフォルトのユーザーシミュレーター構成を上書きして、モデル、内部モデルの動作、および最大ユーザーエージェントインタラクション数を変更できます。以下のEvalConfigは、デフォルトのユーザーシミュレーター構成を示しています。

{
  "criteria": {
    # 以前と同じ
  },
  "user_simulator_config": {
    "model": "gemini-2.5-flash",
    "model_configuration": {
      "thinking_config": {
        "include_thoughts": true,
        "thinking_budget": 10240
      }
    },
    "max_allowed_invocations": 20
  }
}
  • model: ユーザーシミュレーターを支えるモデル。
  • model_configuration: モデルの動作を制御するGenerateContentConfig
  • max_allowed_invocations: 会話が強制的に終了される前に許可される最大ユーザーエージェントインタラクション数。これは、EvalSetで最も長い妥当なユーザーエージェントインタラクションよりも大きく設定する必要があります。

```