このガイドでは、Dialogflow CX コンソールに組み込まれている評価機能を使用して、エージェントの機能を確認し、更新後の回帰を防ぐ方法について説明します。Dialogflow CX には 、エージェントのパフォーマンスを評価するのに役立つ、すぐに使える指標 が用意されています。
レイテンシを除くすべての指標には、少なくとも 1 つのテストケースが必要です。これは、Dialogflow CX がエージェントのパフォーマンスを比較して パフォーマンスを計算する「ゴールデン レスポンス」です。各テストケースは 環境のコンテキストで測定できます。これにより、エージェントのパフォーマンス評価で使用するプレイブック、 フロー、ツールのさまざまなバージョンを指定できます。
(省略可)環境を作成する
環境の作成は省略可能です。作成しない場合、デフォルト値は [下書き] になります。
- 環境を作成するには、左側のメニューで [**環境**] をクリックし、 [**+ 作成**] を選択します。
- エージェントのパフォーマンスの測定に使用するプレイブック、フロー、ツールのバージョンを選択します。
- [保存] をクリックして環境を保存します。
テストケースを作成する
会話履歴の既存の会話からテストケースを作成する、新しい会話を作成してテストケースとして保存する、テストケースを Dialogflow CX にインポートする、のいずれかを選択できます。
コンソールでテストケースを作成する
- 左側のメニューで [会話履歴] に移動します。
- 新しい会話を作成するには、エージェントを有効にして(エージェントの電話番号に電話するなど)、会話履歴に会話を作成します。 テストケースとして使用する会話がある場合は、その会話を選択します。
- 会話を表示し、エージェントのレスポンス、呼び出されたツール、各レスポンスの音声を確認します。問題がなければ、ウィンドウの右上にある [テストケースを作成] をクリックします。
- テストケースの表示名を指定し、会話レベルで発生するイベントの期待値を指定します。これには、会話内で呼び出されることが想定されるツール、プレイブック、フローが含まれます。[\+ 期待値を追加] をクリックして、期待値を追加します。期待値をリストに記載されている順に評価するには(上から下)、[順次検証] を切り替えます。
- [保存] をクリックして、テストケースを保存します。
テストケースをアップロードする
- テストケースは次の CSV 形式にする必要があります。
- テストケースをシステムにアップロードするには、テキストケース メニューの上部にある [インポート] をクリックします。
- 表示されたメニューで、ローカルに保存されているファイルを選択するか、Cloud Storage バケットへのパスを入力します。
- テストケースがテストケース メニューに表示されます。
テストケースを実行する
- 左側のメニューで [テストケース] をクリックし、エージェントと比較するテストケースを選択します。1 つのテストケースでも複数でもかまいません。
- [選択したテストケースを実行] をクリックします。
テスト結果
- 結果にアクセスする: 最新のテスト実行結果は、完了後に
[テストケース]ビューにテストケースごとに表示されます。
- セマンティック類似度: エージェントの会話が「ゴールデン レスポンス」(テストケースのレスポンス)とどの程度類似しているかを測定します。この指標を取得するには、ゴールデン レスポンスが必要です。値は 0(不一致)、0.5(やや一致)、1(非常に一致)のいずれかになります。
- ツール呼び出しの精度: 会話中に呼び出されることが想定されるツールが会話にどの程度忠実に含まれているかを反映する値。値の範囲は 0 ~ 1 です。会話でツールが使用されていない場合、精度は
--(該当なし)と表示されます。 - レイテンシ: エージェントがエンドユーザーの リクエストを処理してユーザーに応答するまでの合計時間(ユーザーの 発話の終了からエージェントのレスポンスの開始までの差)。単位は秒です。
- ゴールデン テストケースを更新する: エージェントの更新により、最新の実行で想定される変更が反映された場合は、[ゴールデンとして保存] をクリックして元のテストケースを上書きできます。
- 結果をフィルタして並べ替える: 生成された指標または特定の環境で評価結果をフィルタして並べ替えることができます。これは、更新後のパフォーマンスの変化を追跡するのに役立ちます。
テストケースの一括インポートの形式
このセクションでは、エージェントのテストケースを一括でインポートするための CSV ファイルの形式について説明します。システムはこのファイルを読み取って、1 つ以上の会話ターンを含む構造化されたテストケースのセットを作成します。
1 つのテストケースは、CSV ファイルの複数の行にまたがることができます。テストケースの最初の行では、全体的なプロパティ(名前や言語など)を定義します。 そのテストケースの後続の各行では、会話の 1 回のやり取り(ユーザーが何かを言い、エージェントが返信する)を定義します。
ヘッダー
CSV ファイルの最初の行にはヘッダー行が必要です。 このヘッダーは、各列のデータを定義します。
必須ヘッダー
2 つの必須ヘッダーは、表示されている順序で指定する必要があります。どちらも、新しいテストケースの最初の行に必要です。新しい DisplayName 値と LanguageCode 値を指定して、新しいテストケースを開始できます。
DisplayName: テストケースの名前。これは、新しいテストケースの最初の行にのみ入力されます。LanguageCode:テストの言語コード(en、en-US、esなど)。
オプションのヘッダー
次のオプションのヘッダーを含めて、テストケースの詳細を指定できます。最初の 2 つの必須列の後であれば、任意の順序で指定できます。
テストケースのメタデータ
- タグ: テストを整理するためのスペース区切りのタグ(「支払いのオンボーディング」など)。
- メモ: テストケースの目的を説明するフリーテキストのメモ。
TestCaseConfigV2.StartResource: テストを開始するフローまたはプレイブックを指定します。
ユーザー入力
UserInput.Input.Text: 特定のターンでユーザーが「入力」するテキスト。UserInput.InjectedParameters: ターンの開始時に会話に挿入するパラメータ。JSON 文字列としてフォーマットされます。
エージェントの出力
AgentOutput.QueryResult.ResponseMessages.Text: エージェントが返信したと想定される正確なテキスト。AgentOutput.QueryResult.Parameters: エージェントによって抽出されたと想定されるパラメータ。JSON 文字列としてフォーマットされます。
パートナー様の役割
OrderedExpectations.ExpectedFlow: ターンの後にアクティブになることが想定されるフロー。OrderedExpectations.ExpectedIntent: ターンで一致することが想定されるインテント。OrderedExpectations.ExpectedAgentReply: エージェントが返信することが想定されるテキスト。完全な返信のサブストリングにすることもできます。OrderedExpectations.ExpectedOutputParameter: ターンの終了時に設定されることが想定されるパラメータ。JSON 文字列としてフォーマットされます。
音声メタデータ
AudioTurnMetadata音声ベースのテストのメタデータ。JSON 文字列としてフォーマットされます。
テストケースを作成する
テストケースはデータ行ごとに整理されます。
- 新しいテストケースを開始するには、そのメタデータ行を入力します。
- ルール: この行の
DisplayName列には値を指定する必要があります。 - アクション:
DisplayNameとLanguageCodeの値を入力します。この行にタグ、メモ、TestCaseConfigV2.StartResourceを追加することもできます。 会話ターンの列(UserInput.Input.Textなど)は、この行では空のままにします。タグを使用する場合は、各タグをスペースで区切ります。例:tag1 tag2 tag3。TestCaseConfigV2.StartResourceを使用する場合は、リソース名の前にstart_flow:またはstart_playbook:を付けます。例:start_flow:projects/p/locations/l/agents/a/flows/f。
- ルール: この行の
- 開始したテストケースに会話ターンを追加するには、そのすぐ下に新しい行を追加します。
- ルール:
DisplayName列は空にする必要があります。これにより、パーサーは、前のテストケースに属するターンであることを認識します。 - アクション: このターンのユーザーのアクションと
想定されるエージェントのレスポンスを記述する列(
UserInput.Input.Text、OrderedExpectations.ExpectedAgentReplyなど)を入力します。JSON が必要な列の場合は、有効な JSON オブジェクトを文字列として指定する必要があります。例:{"param_name": "param_value", "number_param": 123}。
- ルール: