はじめに
Google Developers Blogが2025年10月30日、AIエージェントの新しいアーキテクチャ設計に関する技術解説を公開しました。従来のリクエスト-レスポンス型モデルから、リアルタイム双方向ストリーミングへの移行を提唱し、オープンソースのAgent Development Kit(ADK)による実装手法を紹介しています。本稿では、技術提案の内容と実装上の考慮点について解説します。
参考記事
- タイトル: Beyond Request-Response: Architecting Real-time Bidirectional Streaming Multi-agent System
- 著者: Hangfei Lin(Tech Lead)
- 発行元: Google Developers Blog
- 発行日: 2025年10月30日
- URL: https://developers.googleblog.com/ja/beyond-request-response-architecting-real-time-bidirectional-streaming-multi-agent-system/
要点
- 従来のリクエスト-レスポンス型AIエージェントは、ターンベースの遅延、ツール統合の分断、マルチモーダル処理の複雑さという構造的限界を抱えている
- リアルタイム双方向ストリーミングアーキテクチャは、真の並行処理、割り込み可能性、プロアクティブな支援、統合的なマルチモーダル処理を実現する
- ストリーミング型システムでは、ターンの概念がない状態でのコンテキスト管理、高並行性とパフォーマンス、開発者体験の3つが主要な技術課題となる
- Googleのオープンソースツール「Agent Development Kit(ADK)」は、非同期I/O管理、状態管理可能なセッション、イベント駆動コールバック、ストリーミングネイティブツールの4つのコア機能を提供する
詳細解説
従来型アーキテクチャの構造的限界
Googleによれば、長年AIエージェント開発の中心となってきたリクエスト-レスポンス型通信パターンには、3つの重要な限界があります。
第一に「知覚される遅延」です。エージェントはユーザーの入力全体を受け取るまで処理を開始できないため、不自然なターンベースの遅延が発生し、会話の流れが途切れてしまいます。
第二に「分断されたツール統合」で、ツールの実行自体は非同期であっても、その結果が進行中の会話にシームレスに統合されません。ユーザーは確認を受け取った後、別の更新を待つか新しいリクエストを開始する必要があり、体験が断片的になります。
第三に「不器用なマルチモーダル処理」で、音声と映像のような同時ストリームを処理するには、別々の入力を単一の統一された体験に結びつける複雑で脆弱なロジックが必要になります。
これらの限界は、リクエスト-レスポンス型が本質的にターンベースの対話を前提としており、連続的なデータストリームや複数のエージェント間の高並行性・低遅延な対話には構造的に適していないことに起因すると考えられます。
リアルタイム双方向ストリーミングがもたらす可能性
提案されているリアルタイム双方向ストリーミングアーキテクチャは、ターンベースのトランザクションから永続的な双方向ストリームへの移行により、3つの新しいエージェント能力を実現します。
第一に「真の並行性と割り込み可能性」です。ストリーミングアーキテクチャでは、エージェントはユーザーがまだ入力を提供している間に情報を処理し行動できます。これにより、ノンブロッキングな対話と、自然な割り込み可能性(「バージイン」)が実現されます。エージェントは現在のアクションを即座に停止して新しいユーザー入力に対応でき、人間との自然な会話に近い体験が可能になると言えるでしょう。
第二に「ストリーミングツールによるプロアクティブな支援」です。ツールは単一のリクエスト-レスポンスサイクルに制限されなくなり、時間をかけてユーザーやエージェントに情報をストリーミングで返す永続的なバックグラウンドプロセスとして再定義できます。例えば、株価監視や長時間かかるデータ分析などのタスクで、完了を待たずに中間結果を継続的に受け取れるようになります。
第三に「統合的なマルチモーダル処理」です。ストリーミングアーキテクチャは、連続的で並行するストリーム(音声、映像、テキストなど)を単一の統合されたコンテキストとしてネイティブに処理します。この手法により、手動での同期なしにエージェントが周囲の環境にリアルタイムで反応できる、真の環境認識と状況認識が可能になります。
ストリーミング型マルチエージェントシステムの技術的課題
Googleは、リアルタイム双方向マルチエージェントアプリケーションの構築には、リクエスト-レスポンス型では存在しなかった新しいクラスの複雑なエンジニアリング問題を解決する必要があると指摘しています。
ターンレスな世界でのコンテキスト管理が最も根本的な課題です。連続ストリームでは「ターン」の概念が消失するため、デバッグ、分析、会話の再開のために、ストリームを論理的なイベントに分割する新しいメカニズムを設計する必要があります。また、明確な「ターン終了」シグナルがない状態で、連続的なコンテキストストリームを別のエージェントにパッケージ化して転送する方法を考案しなければなりません。従来のセッション管理やログ記録の手法が通用しないため、新しいアプローチが求められます。
並行性とパフォーマンスの問題も重要です。ストリーミングエージェントは、複数の非同期I/Oストリームを低遅延で処理する必要がある高並行システムです。アーキテクチャは、同時ユーザー入力(音声とテキストなど)、LLMのストリーミング出力(テキストとツール呼び出しなど)、複数の長時間実行バックグラウンドツールからのデータを優雅に処理しなければなりません。この本質的な並行性は、マルチエージェントシステムでは指数関数的に複雑になります。一般的に、このような高並行性システムでは、適切なリソース管理と負荷分散が実用化の鍵となると考えられます。
開発者体験と拡張性の課題もあります。ストリーミングシステムの根底にある複雑さは、シンプルで強力な抽象化の背後に隠される必要があります。成功するフレームワークには、一般的なタスクに対する直感的な開発者体験が必要です。例えば、時間をかけてユーザーやモデルに複数の結果をyieldできるツールを定義する簡単な方法や、エージェントのライフサイクルの重要なポイント(ツール呼び出しの前後など)でカスタムロジックを注入できるフックとコールバックを提供する拡張性が求められます。
ADKによる4つのコア実装手法
これらの課題に対処するため、GoogleはオープンソースのAgent Development Kit(ADK)で双方向ストリーミングネイティブなアーキテクチャを実装しました。ADKはPython向けのフレームワークで、GitHubで公開されています。

1. 非同期リアルタイムI/O管理
連続的なマルチモーダル入力(テキスト、音声/映像ブロブ)を処理するため、ADKはLiveRequestQueueという重要な抽象化を導入しています。このasyncioベースのキューにより、クライアントアプリケーションは到着時に様々なデータ型をシームレスにエンキューできます。エージェントの非同期ランナー(run_live)がこのキューから消費し、正式な「ターン終了」を待つことなくモデルがほぼリアルタイムでデータを処理できます。
class LiveRequestQueue:
def close(self):
self._queue.put_nowait(LiveRequest(close=True))
def send_content(self, content: types.Content):
self._queue.put_nowait(LiveRequest(content=content))
def send_realtime(self, blob: types.Blob):
self._queue.put_nowait(LiveRequest(blob=blob))
async def get(self) -> LiveRequest:
return await self._queue.get()
# エージェントランナーがキューから消費してイベントをストリーム
async for event in agent.run_live(session=my_session, live_request_queue=queue):
# エージェントのストリーミングレスポンスを処理
pass
ここで使われているasyncioは、Pythonで非同期処理を実現するための標準ライブラリです。従来の同期処理では処理が完了するまで次の処理に進めませんが、非同期処理ではI/O待機中に他の処理を実行できるため、リアルタイムストリーミングのような高並行性が求められるシステムに適しています。
2. 状態管理可能で転送可能なマルチエージェントセッション
マルチエージェントにおけるストリーミング対話には、堅牢なコンテキスト管理が必要です。ADKセッションはライブ対話を通じて永続化され、履歴だけでなく、ツール呼び出し、ツールレスポンス、様々なシステムシグナルも保持します。
主要な課題は、連続ストリーム(音声など)をロギングと状態管理のための離散的なイベントに分割することです。ADKのアプローチには以下が含まれます:
- シグナルベースのイベント分割: 割り込み、明示的な「完了」シグナル、エージェント転送などの手がかりを使用してイベントを区切る
- 効率的なメディアストレージ: より大きなメディアブロブをオブジェクトストレージ(Google Cloud Storageなど)に保存し、トランザクショナルデータベースに保存されたセッションイベント内で参照する
- 文字起こし: 音声/映像ストリームからテキスト文字起こしを生成し、タイムスタンプ付きの個別イベントとしてキャプチャする
この状態保持セッションは、マルチエージェント協調のための「ブリーフィングパケット」となります。ハンドオフが発生すると(例えば、トリアージエージェントからスペシャリストへ)、セッションコンテキスト全体が転送され、次のエージェントがユーザーに情報の繰り返しを求めることなくシームレスに引き継ぐことができます。これにより、複雑で多段階のワークフローが単一の知的な会話のように感じられるようになります。
3. リアルタイムカスタマイズのためのイベント駆動コールバック
実際の双方向ストリーミングエージェントアプリケーションでは、単一のrun_live()呼び出しでは不十分です。開発者はカスタマイズのためにエージェントの動作へのフックが必要です。ADKは次のコールバックを実装しています:
- before_tool_callback: ツール実行前にカスタムロジックを注入
- after_tool_callback: ツール実行後にカスタムロジックを注入
これらのコールバックにより、ツールステータスのロギング、リアルタイムコンテンツモデレーション、エージェントへの新しい情報の注入などの動的制御が可能になります。
コールバックパターンは、ソフトウェア開発において特定のイベント発生時に実行される関数を指定する一般的な設計パターンです。ADKでは、開発者がエージェントのライフサイクルの重要な時点で独自の処理を追加できるようにすることで、フレームワークの柔軟性と拡張性を高めています。
4. ストリーミングネイティブツール
従来のツールはリクエスト-レスポンスモデルに従い、モデルによって生成されるI/Oストリームとリアルタイムで対話できません。ADKは「ストリーミングツール」を可能にします。これは非同期ジェネレーター(AsyncGenerator)として定義されたツールで、以下の機能を持ちます:
- 標準入力を受け取り、時間をかけて複数の結果をyield
- オプションでLiveRequestQueueを受け取り、ユーザー入力ストリームを直接処理
- 長時間実行タスクがバックグラウンドで実行される間、ユーザー/モデルに中間更新を提供
# ストリーミングツールの概念例
async def monitor_stock_price(symbol: str, alert_price: float) -> AsyncGenerator[str, None]:
while True:
current_price = await fetch_price(symbol)
if current_price >= alert_price:
yield f”Alert: {symbol} reached {current_price}”
break
yield f”Current price: {current_price}, waiting…”
await asyncio.sleep(60)
このコード例では、株価を監視し、目標価格に達するまで1分ごとに現在価格を報告し続けます。yieldキーワードは、関数を一時停止して値を返し、次の呼び出しで再開できるPythonの機能です。これにより、エージェントはリアルタイムデータ分析、継続的モニタリング、大規模メディアストリームの処理などのタスクを実行しながら、ユーザーとの中断のない対話を通じてバックグラウンドでフィードバックを提供できます。
今後の研究課題と展望
Googleによれば、このアーキテクチャは深い探求と研究の出発点であり、リアルタイムでインタラクティブなAIをさらに改善するため、いくつかの重要な最前線に焦点を当てています。
パフォーマンスが最も重要な課題とされています。起動時間とエージェント転送時間を改善し、マルチエージェント対話を瞬時でシームレスに感じさせることに取り組んでいます。また、before-model-callbackやafter-model-callbackなどのより豊富なコールバックタイプを導入することで、開発者にエージェントのライフサイクルに対するさらに深い制御を提供することを目指しています。
これらの今後の方向性は、ストリーミングアーキテクチャがまだ発展途上の技術であり、実用化に向けてはパフォーマンスの最適化と開発者体験の向上が継続的な課題となることを示唆していると考えられます。特に、エンタープライズ環境での採用を考えると、レイテンシとスループットの両面での最適化が重要になると考えられます。
まとめ
Googleは、従来のリクエスト-レスポンス型AIエージェントの構造的限界を指摘し、リアルタイム双方向ストリーミングアーキテクチャへの移行を提唱しました。オープンソースのADKを通じて、非同期I/O管理、状態管理可能なセッション、イベント駆動コールバック、ストリーミングネイティブツールという4つのコア実装手法を提示しています。この技術提案は、AIエージェントの対話性と実用性を大きく向上させる可能性がある一方で、コンテキスト管理、並行性、開発者体験といった新しい技術課題への取り組みも必要とします。実際のプロダクション環境での採用には、パフォーマンスやコスト面での検証が重要になるでしょう。
