代理工具
Pydantic AI 2.40、リアルタイム音声エージェントに再生進捗を補正可能な割り込み機能を追加
新バージョンでは、ユーザーが発話を割り込ませた際、実際に再生された音声バイト数に基づいて応答を中断し、会話状態を同期できる。さらに、帯域外プロンプトキューとイベントリスナーインターフェースが追加され、リアルタイムエージェントですべての制御信号をユーザーターンに偽装する必要がなくなった。

Pydantic AI 2.40.0 は、リアルタイム音声エージェントにおいて特に隠蔽が難しい一連の状態管理問題に重点的に対処している。モデルが生成した音声の量と、ユーザーが実際に聞いた量は同じではない。新しい session では handle_barge_in=True を有効にし、interrupt(played_bytes=...) を通じてプレーヤーが再生済みのバイト数を報告できる。さらに、played_audio_bytes により、アプリケーションは進捗を追跡できる。これにより、ユーザーが応答の途中で発話を割り込ませた場合、フレームワークは後続の出力をキャンセルし、保持される会話内容を実際に再生された部分により近づけられるため、次のターンでモデルがユーザーは応答全体を聞いたと誤って想定する事態を防げる。
制御面でも、組み合わせて使用できるインターフェースがいくつか追加された。RealtimeSession.enqueue() を使用すると、監視、ポリシー、バックエンドイベントを人間のメッセージに見せかけることなく、プログラムから帯域外プロンプトを挿入できる。send(..., respond=) では、テキストの送信後にモデルへ応答を要求するかどうかを明示的に指定できる。provider_factory により、リアルタイムモデルの解決を実行時まで遅延させてプロバイダーを選択でき、@agent.on_event は統一されたイベント監視ポイントを提供するため、監査、テレメトリ、カスタムステートマシンとの連携に適している。
今回のアップデートでは、音声セッションの停止や履歴の不整合を招きやすい複数のエッジケースも修正された。具体的には、割り込みキャンセル時の競合状態、bytes 以外の音声によるユーザーターンのロールバック、ツール失敗後に音声とトランスクリプトのストリーミングが終了しない問題、旧バージョンの gpt-realtime に reasoning パラメーターを誤送信する問題などだ。エンジニアは引き続き、プレーヤーのバッファリング、サンプリング形式、プロバイダー固有のキャンセルセマンティクスを自ら管理する必要がある。バイト数から「どこまで聞こえたか」を算出する方法が信頼できるのは、エンコーディングと再生パイプラインが一致している場合に限られる。また、Pydantic AI はリリース頻度が高いため、本番環境への導入前にバージョンを固定し、発話の割り込み、ツールの失敗、ネットワークのジッターを対象とするエンドツーエンドテストを用意すべきだ。