音声エージェントは、自然な音声会話を通じて予約、注文照会、アカウント管理などのタスクを処理し、企業と顧客の対話方法を変革しています。しかし、エージェントの機能が向上するにつれて、根本的な課題が浮上します。それは、どのようにテストするかということです。
テキストベースのチャットボットとは異なり、音声エージェントは双方向ストリーミングで動作し、応答は非決定的で、マルチターンの会話コンテキストを維持し、リアルタイムでツールを使用します。現在、ほとんどのチームは人がシステムと話して応答を聞くという方法でテストしていますが、これは遅く、一貫性がなく、拡張できません。
このテストギャップは2つの重要な問題を引き起こします。第一に、システムプロンプトとツール設定の反復が非常に遅く、調整のたびに数十のシナリオを手動で再テストする必要があり、プロンプトエンジニアリングが推測になります。第二に、信頼できる評価フレームワークがなく、デプロイ前に回帰テストを実行できず、数百のシナリオでのエージェントのパフォーマンスを測定できず、微妙な回帰を捉えることができません。
これらの問題を解決するために、Nova Sonic Test Harnessを構築しました。これはオープンソースフレームワークであり、迅速な反復ツールとしても、大規模な評価フレームワークとしても機能します。Amazon Nova Sonicとの完全なマルチターン会話を自動実行し、LLMを審査員として評価し、音声出力とテキスト出力の不一致を検出できます。マイクは不要です。
音声間テストが異なる理由はいくつかあります。音声モデルは持続的な全二重接続を使用するため、標準的なHTTPツールでは対話できません。応答は非決定的で、同じ入力でも異なる出力が生成されるため、正確な文字列アサーションは使用できません。単一ターンの会話では情報が限られ、興味深い動作は複数ターンにわたって発生します。さらに、音声とテキストが同期しない「音声ハルシネーション」が発生する可能性があります。接続には約8分のタイムアウト制限もあります。
テストハーネスのワークフローは4つのフェーズで構成されます。テストシナリオの構成、会話の実行、結果の評価、レポートの生成です。各テストはJSON構成ファイルから始まり、シナリオを記述します。Nova Sonicが演じる役割、発信者の役割、利用可能なツール、成功基準などです。重要な洞察は、期待される出力ではなく、目標と評価基準を定義することです。Nova Sonicは毎回異なる応答をするため、正確な文字列をチェックするのではなく、ルーブリックに基づいて評価します。
会話実行フェーズでは、ユーザーシミュレータがメッセージを生成します。このメッセージは、会話履歴に基づいてLLM(Claude Haikuなど)が決定します。メッセージはテキストまたは合成音声としてNova Sonicに送信できます。Nova Sonicは応答をストリーミングで返し、ツール呼び出しはストリーム内で処理されます。テストハーネスは、すべての投機的テキストブロックが最終化されたときにターン終了を検出します。これは、無音を待つよりも信頼性が高い方法です。すべてがログに記録されます。
長い会話の場合、SessionContinuationManagerが接続タイムアウトを透過的に処理します。接続時間を監視し、タイムアウト前に新しいセッションを作成し、履歴を再生します。
会話が終了すると、完全なトランスクリプトが独立したLLM審査員(Claude Opusなど)に渡されます。審査員はテスト設定を知らず、会話と評価基準のみを見ます。これによりバイアスを防ぎます。審査員は6つの組み込み指標を3つの層に分けて評価します。重要指標(目標達成、応答精度)、重要指標(ツール使用、会話の流れ、システムプロンプト準拠)、アドバイザリ指標(音声フォーマット)です。層システムは合否ロジックを決定します。2つの重要指標が両方通過する必要があります。各指標は複数のルーブリック質問で評価され、厳密なYES/NO回答が得られます。指標はすべての質問が通過した場合にのみ通過します。これにより、失敗時にどの質問が失敗したかを正確に把握し、審査員の推論を読むことができます。
結果は複数の形式で提供されます。インタラクティブダッシュボード(Streamlitアプリ)、構造化JSON/CSVファイル、CI/CDに適したバイナリ合否出力と数値合格率です。
音声ハルシネーション検出は重要な機能です。音声間モデルはテキストと音声出力を同時に生成し、ほとんどの場合は一致しますが、Nova Sonicが書くことと話すことが異なる場合があります。たとえば、音声が「来週の月曜日」と言い、テキストストリームが「来週の火曜日」と言う場合です。テキストログのみをチェックしていると、これを見逃します。テストハーネスは各ターンの音声をS3にアップロードし、Amazon Transcribeで文字起こしし、テキスト出力と比較して差異を分類します。フィラーワード、言い回しのバリアント、事実誤認です。各ターンは一致、軽微な差異、ハルシネーションのいずれかの判定を受けます。
大規模テストのために、バッチランナーは複数のシナリオを並列実行できます。たとえば、12の医療シナリオを並列度4で実行したり、同じシナリオを10回繰り返して分散を測定したり、100エントリの評価データセットを実行したりできます。テストハーネスにはすぐに使えるシナリオパックが付属しています。12の医療シナリオ、8の銀行シナリオ、5つの顧客サービスバリアントです。バッチ実行後、ダッシュボードはすべてのシナリオの合格率、指標ごとの内訳、共失敗相関、実行間の並列比較を表示します。