GPT Realtime 2 と AG2 で 3 行のコードで低遅延音声エージェントを構築
OpenAI は GPT Realtime 2 を発表し、低遅延で自然な音声対話を実現しました。AG2 Beta の LiveAgent はこのモデルをラップし、双方向連続音声セッションを提供します。本記事では、3 行のコードで音声エージェントを構築する方法、ツール呼び出しとサブエージェント委任のサポート、および従来の STT-TTS スタックとの比較について説明します。
OpenAI は最近、API で高度な音声インテリジェンスを発表しました。これには GPT Realtime 2 が含まれ、より低遅延で自然な音声対話を実現します。AG2 Beta はこのモデルを LiveAgent でラップしています。双方向セッション、継続的な音声入出力、およびプロバイダー側の音声アクティビティ検出(VAD)により、ユーザーは電話のように話したり割り込んだりできます。
この記事では、なぜこれが重要なのか、LiveAgent が従来の STT→Agent→TTS スタックとどのように比較されるのか、そしてリアルタイム音声表面を犠牲にすることなくツールやサブエージェントスタイルの委任を追加する方法について説明します。
音声は、運転、料理、現場作業、アクセシビリティ、電話での簡単な確認など、手や目がふさがっているタスクにおいて最も摩擦の少ないチャネルです。ユーザーは低遅延、自然なターンテイキング、モデルが間違った場合や新しい情報が到着したときに割り込む機能を期待します。すべての発話が完全な記録→文字起こし→推論→合成サイクルを待つ場合、それは会話ではなくフォームに記入しているように感じられます。
プロバイダーのリアルタイム API は、そのリズムの多くをモデルとトランスポート層に押し込みます。ストリーミングオーディオ、組み込みの VAD、および割り込みセマンティクス(サポートされている場合)により、アプリケーションはユーザースペースでテレフォニースタックの半分を再実装する必要がなくなります。
基本的なコードサンプル
依存関係をインストールした後、LiveAgent、SoundDevicePlayer、SoundDeviceRecorder、および autogen.beta.live から OpenAI 設定ヘルパーをインポートします。実行セッションはわずか 3 行です。エージェントを構築し、1 つの非同期 with でセッションと共有 I/O を開き、キャンセルされるまでブロックします。
agent = LiveAgent("assistant", "You are a helpful voice assistant.", config=openai.RealTimeConfig("gpt-realtime-2", output=openai.AudioOutput(voice="ballad")))
async with agent.run() as context, SoundDevicePlayer(context=context), SoundDeviceRecorder(context=context):
await asyncio.Future() # run until cancelledこれが「マイクとスピーカーを GPT Realtime 2 に接続する」ループ全体です。インポートと asyncio.run を含む自己完結型スクリプトは次のようになります(省略)。
デフォルト以外にも、アシスタントのサウンドと発話タイミングを調整できます。OpenAI リアルタイム AudioOutput は voice と speed パラメータを受け入れ、InputConfig は VAD/ターン検出オプション(たとえば割り込み機能付きセマンティック VAD)を提供します。
ツールとサブエージェントの動作方法
ツール
LiveAgent はテキストエージェントと同じ @agent.tool デコレータを使用します。呼び出しは AG2 の通常のツール実行器を通過し、結果は自動的にリアルタイムセッションに送り返されます。したがって、他の場所で使用するミドルウェアや HITL パターンはスタックの残りと整合性を保つことができます。
@agent.tool
async def sum_numbers(a: int, b: int) -> int:
"""Add two integers and return the result."""
return a + bサブエージェント(委任)
LiveAgent はリアルタイムオーディオセッションを中心に構築されており、テキストエージェントと同じ ask() ループではありません。音声表面がより深い推論、より長いコンテキスト作業、またはテキスト側に保持したいツールを必要とする場合は、別のエージェントを Agent.as_tool() で呼び出し可能なツールとして公開し、tools=[...] で LiveAgent に渡します。リアルタイムモデルがツール呼び出しを発行し、AG2 がそのネストされたエージェントを実行して結果をライブセッションに送り返します。
researcher = Agent(name="researcher", prompt="You research topics thoroughly and return concise bullet facts.", config=OpenAIConfig("gpt-4o-mini"))
research_tool = researcher.as_tool(description="Use for multi-step research or when the user needs cited-style facts in text form.")
voice = LiveAgent(name="voice", prompt="You are a low-latency voice assistant. Call research when the user needs deep fact-finding.", config=OpenAIRealTimeConfig("gpt-realtime-2"), tools=[research_tool])これにより、リアルタイムセッションが完全な Agent.ask ループであるふりをすることなく、サブエージェントスタイルの委任が可能になります。
サポートされているプロバイダー
LiveAgent は任意の RealtimeConfig を受け入れます。AG2 Beta は現在、OpenAI と Gemini の実装を提供しています。
- OpenAI — gpt-realtime-2。AudioOutput は音声と速度、TextOutput はテキストのみの応答を提供。InputConfig は VAD とターン検出を制御(デフォルトは割り込み機能付きセマンティック VAD に傾倒)。
- Gemini — 例:gemini-3.1-flash-live-preview、ライブオーディオ対応。
LiveAgent か STT-TTS か
AG2 Beta は 2 つの音声パターンをサポートします。
- STT→Agent→TTS:離散ターン、文字起こし、テキストエージェントの呼び出し、合成。1 ターンあたりの典型的な遅延は 1~3 秒。
- LiveAgent(リアルタイム):会話全体に対して 1 つの全二重セッション。多くのセットアップで遅延 500 ミリ秒未満。
これらは補完的であり、競合しません。各ターンでエージェントの全機能(構造化出力、リッチミドルウェア、任意のモデルルーティング)が必要な場合は STT-TTS を選択します。遅延と会話の流れが最も重要であり、gpt-realtime-2 などのリアルタイムモデルでセッションを駆動しても構わない場合は LiveAgent を選択します。
次のステップ
- ドキュメントを読む:LiveAgent — Realtime Voice Sessions と Voice & Realtime overview から始めてください。
- インストールして試す:pip install "ag2[openai] sounddevice[numpy]"、その後 AG2 リポジトリの examples/live_playground/ にあるスケッチを実行します。
- リポジトリにスターを付ける:LiveAgent が役立つなら、github.com/ag2ai/ag2 のスターがプロジェクトの発見に役立ちます。
- コミュニティに参加する:AG2 Discord でビルドを共有し、質問し、意見を交換してください。