音声AIエージェントの遅延原因をCloudflareで切り分ける
Cloudflareのturnmetricsを使い、音声AIエージェントの遅延や無音応答をステージ別に切り分ける方法を解説します。7つのoutcome、各タイミングの読み方、3つの制御テストを押さえれば、モデルやTTSを推測で変更する前に、文字起こし・モデル・音声生成・ブラウザ再生のどこを調べるべきか判断できます。

Cloudflareの音声AIエージェントが遅い、または無音になるとき、処理がどこで止まったのかを特定できるようになりました。モデルの変更、プロンプトの書き直し、高速な音声サービスへの追加投資に踏み切る前に、原因を証拠で切り分けられます。@cloudflare/voice 0.4.0では、音声・テキストの各ターンに型付きの結果とステージ別の所要時間が付くため、デバッグで最初に問うべきことは「どのベンダーを替えるべきか」ではなく「どのステージで失敗したか」になります。
音声AIエージェントの遅延診断、まず押さえる答え
@cloudflare/voice@^0.4.0をagents@^0.22.0と組み合わせてインストールし、turnmetricsイベントを監視します。あとは各ターンをturnId、source、outcome、そして実際に存在するタイミングフィールドで分類してください。Cloudflareの9月11日リリースでは、正常終了した音声とテキストのほか、空の出力、モデル上限、コンテンツフィルタリング、モデルエラー、音声生成エラー、中断されたターンまで判別できます。
これは、6月16日に最終更新された現行のVoiceガイドに載っている4つの互換メトリクス、llm_ms、tts_ms、first_audio_ms、total_msから大きく前進したものです。この4項目が表すのは、空ではない音声応答を返して正常終了したターンの所要時間です。テキストターン、空の回答、中断、失敗したターンが、なぜ音声を返さず終わったのかまでは分かりません。
従来の表示が配達完了票だとすれば、VoiceTurnMetricsは荷物の追跡履歴です。受付、仕分け、発送、完了までを1つの識別子で追い、配送に失敗した場合も、どこで止まったかを確認できます。
client.addEventListener("turnmetrics", (turn) => {
console.log(turn.outcome, turn.turnTotalMs);
});この最新サマリーは、VoiceClient、useVoiceAgent()、useVoiceInput()のいずれからも取得できます。最後に挙げたAPIは音声テキスト変換専用なので、公開されるのは音声と文字起こしについて計測可能な項目だけです。

各タイミングから実際に何が分かるのか
分析の基本単位は1回のターンです。turnIdが処理をひも付けるキー、sourceが入力元が音声かテキストかを示し、outcomeがターンの終了状態を表します。それ以外のフィールドは、すべてミリ秒単位の所要時間です。
これらの値を足し合わせてはいけません。Cloudflareによると、各タイミングは同じサーバークロックを使っており、互いに重なる可能性があります。典型例が文単位のチャンク処理です。モデルが続きをストリーミングしている間に、完成した文の音声合成を始められます。モデルとTTSの所要時間を合計すると、一部の実時間を二重に数えることになります。
タイミングが存在しないことも手掛かりです。該当するライフサイクル上の地点に到達しなかったと分かります。テキストターンに音声から文字起こしまでのフィールドはありません。no_outputなら、モデルがTTSへ渡す内容を何も生成していないため、TTSを調整しても解決しません。ttsToFirstAudioMsがなければ、TTSから最初のサーバー音声を送る段階に一度も到達していません。
ただし、重要な境界があります。ブラウザでの再生はVoiceTurnMetricsの対象外です。Workerとブラウザのクロックが独立しているため、Cloudflareは計測から除外しています。サーバー側では最初の音声がすぐ送られているのに、通話相手には間が空いて聞こえるなら、調べる先をクライアント側の転送、デコード、デバイスのルーティング、再生処理へ移してください。
本番に触る前に実施する3つの制御テスト
以下は、制御されたSDKテストでの観測結果であり、本番環境のレイテンシ実績ではありません。既知の経路を計測機構が正しく分類できると確かめてから、顧客との通話データを信頼するためのテストです。中立的なプロンプトを使い、会話内容はログに残さないでください。
テスト1:正常終了する音声ターン
通話を開始し、短い定型フレーズを1つ話し、エージェントの返答を遮らず最後まで流します。この経路に対するCloudflare側のテストでは、source: "speech"、outcome: "completed"、turnIdに加え、文字起こし、モデルストリームの処理、TTS処理、ターン全体の所要時間が取得されます。
確認するのは速さの優劣ではなく、構造です。同じturnIdが最終サマリーにも含まれ、想定したステージのフィールドがそろっていることを確認します。ローカルで1回実行しただけのミリ秒値を、速度性能の根拠として公表してはいけません。
テスト2:正常終了するテキストターン
sendText()で定型メッセージを送ります。この経路は音声テキスト変換を通らず、直接onTurn()へ進みます。Cloudflare側の制御テストで得られるのは、source: "text"、outcome: "completed"、モデルストリームのタイミングです。speechStartToFirstInterimMs、speechStartToFinalMs、afterTranscribeMsは含まれません。
この性質により、テキストは比較基準として役立ちます。音声ターンは遅く感じるのに、同等のテキストターンではモデルの最初の出力がすぐ届くなら、モデルよりも文字起こし、ターン検出、onTurn()への受け渡しを疑うべきです。
テスト3:意図的に空の応答を返す
テスト専用の分岐を設け、既知の入力が1つ来たときにonTurn()から空のストリームを返します。Cloudflare側のテストでは、この音声ターンはno_outputに分類されます。アシスタントの文字起こしイベント、互換メトリクスのメッセージ、speaking状態はいずれも発生しません。
これで、無音だからといって必ずしもTTSの問題ではないと明確に証明できます。音声合成に渡せる応答テキストが、そもそも存在しなかったからです。アサーション後はテスト分岐を削除し、ユーザーが操作できる会話テキストを分岐条件に使わないでください。

終了状態は7つ、診断先も7通り
outcomeは、次に調べる先を決めるルーティングラベルです。無音のターンをすべて同じ一般的な障害として扱うと、今回のリリースで得られる最大の価値を捨ててしまいます。
no_output、output_limit、content_filtered、model_errorを区別することには意味があります。通話相手から見れば、4つとも「エージェントが何も言わなかった」ように映るからです。最初にプロンプトや空ストリームのロジックを疑うべきなのは、そのうち1つだけです。どれも、高速な音声サービスを購入することが最初の対処にはなりません。
最初に効果が出る7つの場面
特に効果が大きいのは、誤診によって作業のやり直しが生じたり、不要なベンダー変更に追い込まれたりする場面です。
1. 無音ターンが発生するカスタマーサポートエージェント
サポートエンジニアリングチームは、会話内容を含まないターンサマリーをケース識別子と一緒に記録し、無音ターンを終了状態別に分類できます。各グループをモデル、安全性、TTS、接続の担当者へ振り分ければ、推測に基づくたらい回しが減ります。no_outputの集団は応答ロジックへ、tts_errorの集団は音声経路へ送ります。
2. 予約受付エージェント
クリニックや飲食店の自動化チームなら、固定した予約フローをテストし、すべてのターンを関連付け、リリース前後で遅延がどこに入ったかを比較できます。事業上の価値は、見栄えのよいレイテンシグラフではありません。売上につながる予約ワークフローを変更する前に、通話相手を待たせた原因が文字起こし、モデル出力、音声生成、ローカル再生のどこにあるかを把握できることです。
3. 音声エージェントの回帰テスト
プロダクトチームは、既知の音声、テキスト、空出力、中断のケースを少数そろえたテストスイートを維持できます。各ビルドで最終的な終了状態とフィールドの有無を検証し、リリース間でステージ別の分布を比較します。これにより、広範なエンドツーエンドのスコアに埋もれる前に、障害経路の変化を検出できます。
4. 間違ったレイヤーを責めないプロバイダー比較
音声ベンダーを比較するチームは、プロンプトとモデルを固定したまま、制御された実行でttsToFirstAudioMsとTTS処理時間を比較できます。モデルのテキストが現れる前に遅延しているなら、TTSの比較は意味がありません。TTSが計測上のボトルネックなら、低レイテンシTTS APIの比較を検討する適切なタイミングです。
5. 多言語文字起こしの調整
多言語サービスでは、対応する各言語で同じタスクと既知の発話を使い、音声開始から暫定結果、確定結果までの時間を、モデルの処理時間と分けて確認できます。ターン全体の数値1つでは隠れてしまう、文字起こしやターン検出の問題を見つけられます。ただし、高速でも文字起こしが間違っている場合はあるため、精度は別途評価しなければなりません。
6. テキストと音声を併用するインターフェース
フィールドサービス向けアプリなら、同じエージェントロジックを通すテキスト入力の対照ターンと音声ターンを比較できます。テキストはSTTを通らないため、2経路の差から調査範囲を音声入力とターン確定に絞れます。共通のturnId、入力元、終了状態を使えば、両チャネルを1つの診断スキーマで扱えます。
7. 割り込みが多い電話フロー
IVRを置き換えるチームは、長い応答を意図的に遮り、そのターンが原因不明の失敗ではなくabortedになることを確認できます。障害レポートが整理され、より安全なキャンセル処理につながります。ただし、通話相手が割り込み動作を好意的に受け取った証明にはならないため、音声レビューとユーザーテストは引き続き必要です。
この計測で変わる予算判断
Cloudflareのテストアプリ内で行う、ステージ単位の初期切り分けなら、新しいイベントで対応できます。ただし、本格的な音声QAプラットフォームの代替にはなりません。
この違いは重要です。専門サービスの現行料金には、はるかに広い機能が含まれているからです。Covalの料金はStarterプランが月額$100、Growthプランが月額$500で、シミュレーション、モニタリング、トレース保存、評価機能を提供しています。Roarkの料金は開始時クレジットが$50、利用料として消費されるTeamプランが月額$500、Enterpriseプランは月額$4,000からです。
当面の課題が「このCloudflareターンを遅く、または無音にしたステージはどこか」であれば、より広範な仕組みを購入する前にturnmetricsを実装してください。合成通話、スコアリング、アラート、長期トレース、人によるレビュー、コンプライアンスのワークフロー、プラットフォーム横断比較が必要なら、SDKイベントは素材にすぎません。予算の分け方は明快です。診断には計測を使い、その診断を継続運用する仕組みにはQA製品を使います。
構築する価値がある3つのプロダクト
1. Cloudflareネイティブのターン切り分けコンソール
最も有望なのがこの案です。会話内容を含まないVoiceTurnMetricsを取り込み、終了状態別に分類し、ステージごとの分布を表示し、関連イベントをturnIdでひも付けます。音声エージェントの購入層は事業者にとって価値の高い顧客層で、DataForSEOによると、米国におけるai voice agentの月間検索数は6,600、検索意図は商用、CPCは$51.22です。より限定的なvoice agent latencyは月間10件にすぎません。つまり、これは幅広い消費者向けではなく、専門領域へ入るための足掛かりです。
販売可能な最小構成には、イベントコレクター、保存期間の制御、入力元と終了状態のフィルター、リリース前後の比較、記事末尾の表に示す判断ルーティングが必要です。現行市場の価格から、値下げ圧力も読み取れます。Covalは月額$100からで、CovalとRoarkのより広範なチーム向けプランは月額$500です。
難点は、特定プラットフォームへの依存です。Cloudflareが独自UIを拡張する可能性があり、ブラウザ再生は安定したターンサマリーの対象外です。優位性にするべきなのはワークフローです。リリース比較、回帰の証拠、プライバシー制御、問題のあるクラスターから担当者へ素早くつなぐ仕組みが必要になります。
2. プルリクエスト向けのレイテンシ回帰ゲート
固定した音声、テキスト、空出力、中断のケースをプレビューデプロイに対して実行し、想定外の終了状態が現れた場合や、計測対象のステージがチーム独自の基準値より悪化した場合にリリースを止めるプロダクトです。DataForSEOによると、米国のvoice ai agentは月間880検索で、CPCは$36.64です。さらに限定的なlow latency voice agentは月間10検索にすぎませんが、CPCは$29.34で、これも検索規模は小さくクリック単価は高いという兆候です。
MVPに必要なのは、テストランナー、基準値の保存、終了状態のアサーション、パーセンタイル比較、簡潔なCIレポートです。同条件のものだけを比較し、重複するタイミングを決して足し合わせない設計にします。
難点は、テストの再現性です。合成したマイク入力では、通話相手ごとのネットワーク、アクセント、ブラウザ、デバイス、電話回線の全経路を再現できません。本番体験の証明ではなく、リリース保護として販売すべきです。
3. ステージを意識したプロバイダー比較ラボ
パイプラインの大部分を固定し、一度に1社のプロバイダーだけを切り替えて、そのプロバイダーが実際に影響できるステージを比較するプロダクトです。DataForSEOによると、米国のvoice agent platformは月間40検索、検索意図は商用、CPCは$44.12です。検索数は控えめですが、クリック単価を見る限り、少数の真剣な購入層をめぐってベンダーが競っています。
MVPには、再現可能なプロンプトと音声フィクスチャ、プロバイダー設定、ステージ別サマリー、終了状態ごとの発生率、書き出し可能な判断レポートが必要です。モデルの改善による効果を高速なTTSベンダーの手柄にしたり、文字起こしの遅延をそのベンダーの責任にしたりする誤判断を防げます。
難点は、原因の帰属です。VoiceTurnMetricsが計測するのはSDKライフサイクル上の通過点であり、プロバイダー内部まで含む完全なトレースではありません。ネットワーク上の配置、ブラウザ再生、入力品質、プロバイダー側の待ち行列には、別の証拠が必要です。
この機能だけでは解決できないこと
ターンメトリクスが教えてくれるのは、調査を始める場所です。文字起こしが正しかったか、回答が役に立ったか、音声が自然だったか、通話相手が目的を達成したか、クライアント再生が滑らかに感じられたかまでは分かりません。
ブラウザコンソールの診断ストリームは、サーバーのライフサイクルイベントと、マイク、接続、最初の音声、再生のイベントをまとめて確認できるため、ローカル調査には役立ちます。ただし、一時的なデバッグ補助として扱ってください。Cloudflareによるとデフォルトでは無効で、イベント名とフィールドは変わる可能性があるため、安定した分析用の契約にはできません。
安定版のサマリーは意図的に会話内容を除外していますが、独自メッセージの設計次第で、その保護を台無しにしてしまいます。Cloudflareは既知のコンテンツフィールドを除きますが、任意のプロバイダー応答の中身までは検査しません。独自のエラー文字列には、文字起こし、プロンプト、ツール引数、顧客識別子などの会話内容を含めないでください。
最後に、Voiceガイドには現在もBetaと明記されています。バージョン固定、制御されたテストスイート、リリースごとのレビューを、事務的な後処理ではなく実装の一部として扱ってください。
このテーマでよく検索される質問
Cloudflare Realtime Agentsとは何ですか?
Cloudflare Realtime Agentsは、WebRTC、パイプラインのオーケストレーション、構成可能な音声・モデルコンポーネントを中心にした、以前からあるリアルタイム音声ランタイムです。ここで扱う@cloudflare/voiceパッケージは、WebSocketを使うAgents SDKの音声経路です。いずれもCloudflareの音声関連製品ですが、9月11日のターンメトリクスは@cloudflare/voice専用のリリースです。
リアルタイム音声エージェントはどのように動きますか?
一般的なターンでは、音声を取得してテキストへ変換し、そのテキストをアプリケーションとモデルのロジックへ渡し、応答を音声に合成して通話相手へ再生します。Cloudflareのパッケージはマイク音声をWebSocketでストリーミングし、onTurn()を実行し、ストリーミングされるモデル出力を文単位に分割して、音声を送り返します。
CloudflareはAIエージェントを提供していますか?
はい。CloudflareのAgents SDKはDurable Objectsを基盤とするステートフルなエージェントを提供し、@cloudflare/voiceは完全な音声経路と音声入力経路を追加します。現行ガイドによれば、音声パッケージは引き続きBetaです。
Cloudflare AgentsのGitHubリポジトリはどこですか?
公式リポジトリはGitHubのcloudflare/agentsです。音声関連の型とテストから、今回のリリースを支える安定版のターンスキーマと、制御テストにおける終了状態の挙動を確認できます。
次の月曜日にやること:証拠で調査先を決める
来週、テストビルドにイベントリスナーを追加し、上記3つの制御経路を実行してください。保存するのは会話内容を含まないサマリーだけです。そのうえで、勘に頼ってモデルを変更するのではなく、次の表に沿って調査先を決めます。
この診断ループを組み込んだ音声サポートシステムが必要なら、設計からリリースまで支援できます。
- 最終更新
- 2026年9月12日
- カテゴリー
- Build







