AG-UIプロトコル解説:ヒューマン・エージェント・インターフェースの新標準
AIエージェントが本格的なワークフローを担えるほど高度化するにつれ、新たなインフラ上の課題が浮上しています。人間とエージェントが実行中にどのようにコミュニケーションするか——開始時と終了時だけでなく、プロセス全体を通じて——という問題です。
AG-UIプロトコルは、まさにこの課題を解決するために設計されたオープン仕様です。AIエージェントがリアルタイムでイベントをストリーミングし、入力を要求し、フロントエンドアプリケーションや人間のオペレーターに状態を提示する方法の標準を定義しています。MCP(モデルコンテキストプロトコル)がエージェントのツールアクセス方法を標準化したとすれば、AG-UIはエージェントとユーザーのコミュニケーション方法を標準化します。
本ガイドでは、AG-UIとは何か、なぜ重要なのか、どのように機能するのか、そしてエージェントスタックへの導入方法を解説します。
AG-UIが解決する課題
AG-UI登場以前、ユーザー向けAIエージェントアプリケーションを構築するチームはそれぞれ独自の通信プロトコルを考案しなければなりませんでした。エージェントはどうやってフロントエンドに「思考中」と伝えるのか。人間の判断をどう要求するのか。ユーザーはタスクの途中でどのように修正を送れるのか。進捗はどう表示するのか。
その答えはチームによってまちまちで——多くの場合アドホックで、ドキュメントも貧弱、再利用も困難でした。その結果、断片化したエコシステムが生まれました。
- エージェントフレームワーク間でフロントエンドコンポーネントを共有できない
- 開発者はプロジェクトごとにストリーミングUIインフラをゼロから構築しなければならない
- ユーザーはエージェント製品ごとに異なる体験を強いられる
- エージェントの動作デバッグには各実装へのカスタムロギングが必要
AG-UIは共通の語彙とイベント構造を確立し、どのエージェントフレームワークが生成したイベントも、AG-UI対応フロントエンドならカスタム統合コードなしでレンダリングできるようにします。
AG-UIとは?
AG-UIはオープンなストリーミングイベントプロトコルであり、AIエージェントとユーザーインターフェース間でやり取りされるメッセージのフォーマットとセマンティクスを定義します。
特徴:
- トランスポート非依存:HTTP(Server-Sent Events)、WebSocket、またはあらゆるストリーミングトランスポートで動作
- フレームワーク非依存:任意の言語やエージェントフレームワークで実装可能
- 双方向:エージェントはフロントエンドにイベントを送信し、ユーザーはエージェントにメッセージや中断命令を送信
- ステートフル:フロントエンドが任意の時点でエージェントの完全なコンテキストを再構築できるよう、状態スナップショットを含む
AG-UIではないもの:
- ツールプロトコル(それはMCPの役割)
- エージェントフレームワーク自体
- UIコンポーネントライブラリ(リファレンス実装は存在する)
AG-UI対MCP:違いを理解する
AG-UIとAnthropicのモデルコンテキストプロトコル(MCP)の関係はよく混同されます。
| 次元 | MCP | AG-UI |
|---|---|---|
| 目的 | エージェント ↔ ツール通信 | エージェント ↔ 人間/フロントエンド通信 |
| 方向 | エージェントがツールを呼び出し、結果を受け取る | エージェントがイベントをストリーミング;人間がメッセージを送信 |
| 対象者 | ツール/サーバー開発者 | フロントエンドおよびエージェントフレームワーク開発者 |
| 焦点 | エージェントが使用できる機能 | エージェントが状態と進捗をどう伝えるか |
| 関係 | エージェントの「ツール」側を担当 | エージェントの「ユーザーインターフェース」側を担当 |
両者は補完的です。本番環境で稼働するエージェントは通常、ツールへのアクセス(ウェブ検索、画像生成、コード実行)にMCPを使い、進捗の伝達と人間への入力要求にAG-UIを使います。
AG-UIのコアコンセプト
イベントタイプ
AG-UIはエージェントが発するイベントの標準セットを定義しています:
ライフサイクルイベント:
RUN_STARTED/RUN_FINISHED— エージェントの実行開始または完了STEP_STARTED/STEP_FINISHED— ワークフロー内の個別ステップの開始または終了RUN_ERROR— エージェントが回復不能なエラーに遭遇
メッセージイベント:
TEXT_MESSAGE_START/TEXT_MESSAGE_CONTENT/TEXT_MESSAGE_END— エージェントからのストリーミングテキスト出力TOOL_CALL_START/TOOL_CALL_ARGS/TOOL_CALL_END— エージェントがツールを呼び出し中
状態イベント:
STATE_SNAPSHOT— 現在のエージェント状態の完全なスナップショットSTATE_DELTA— 状態の増分更新MESSAGES_SNAPSHOT— 特定時点での完全な会話履歴
カスタムイベント:
CUSTOM— 標準セットでカバーされないアプリケーション固有のイベント
ヒューマンターン
AG-UIは、人間が実行中のエージェントとやり取りする方法も標準化します。フロントエンドはAgentInputを送信して、実行中のエージェントに割り込み、方向転換させ、または情報を提供します。これは新しい会話ターンとは異なります——エージェントは動作中であり、人間がその現在のタスクに影響を与えています。
スレッドベースのアーキテクチャ
AG-UIはエージェントの実行をスレッドとして整理します——複数の実行にわたって状態を維持する永続的な会話コンテキストです。AG-UIのスレッドは他のフレームワークのセッションや会話に相当しますが、再開・分岐・リプレイのための明示的なプロトコルサポートを備えています。
AG-UIの動作方法:典型的なフロー
1. ユーザーがフロントエンドからタスクを送信
2. フロントエンドがRunAgentInputを含むInitialRunリクエストをエージェントバックエンドに送信
3. エージェントが実行を開始し、RUN_STARTEDイベントを発行
4. エージェントが各計画ステップでSTEP_STARTEDを発行
5. エージェントがツールを呼び出す → TOOL_CALL_START、TOOL_CALL_ARGS、TOOL_CALL_ENDを発行
6. エージェントがテキストを生成 → TEXT_MESSAGE_START、TEXT_MESSAGE_CONTENT(ストリーミング)、TEXT_MESSAGE_ENDを発行
7. エージェントがSTATE_DELTAを発行してフロントエンドの状態をリアルタイム更新
8. ユーザーがエージェントを方向転換する決断 → 修正を含むAgentInputを送信
9. エージェントが修正を取り込んで継続
10. エージェントがRUN_FINISHEDを発行
フロントエンドはこれらのイベントをストリームとして受信し、プログレッシブにレンダリングします——ツール呼び出しをリアルタイムで表示し、テキストをリアルタイムでストリーミングし、ステップイベントに基づいて進捗インジケーターを更新します。
AG-UIの実装
フレームワークサポート
AG-UIは主要なエージェントフレームワークでサポートを拡大しています:
- LangGraph:AG-UI Python SDKを使用してグラフノードからAG-UIイベントを発行できる
- AG-UI CopilotKit統合:CopilotKit(AI向けReactフロントエンドフレームワーク)がネイティブのAG-UIサポートを搭載
- カスタム実装:AG-UI仕様はオープン;任意のフレームワークがイベントタイプ定義をもとに実装可能
クイックスタート(Python)
from ag_ui.core import (
RunAgentInput, EventType,
RunStartedEvent, TextMessageStartEvent,
TextMessageContentEvent, TextMessageEndEvent,
RunFinishedEvent,
)
import uuid
async def run_agent(input: RunAgentInput):
run_id = str(uuid.uuid4())
yield RunStartedEvent(
type=EventType.RUN_STARTED,
thread_id=input.thread_id,
run_id=run_id,
)
msg_id = str(uuid.uuid4())
yield TextMessageStartEvent(type=EventType.TEXT_MESSAGE_START, message_id=msg_id, role="assistant")
for chunk in agent.stream(input.messages):
yield TextMessageContentEvent(
type=EventType.TEXT_MESSAGE_CONTENT,
message_id=msg_id,
delta=chunk
)
yield TextMessageEndEvent(type=EventType.TEXT_MESSAGE_END, message_id=msg_id)
yield RunFinishedEvent(type=EventType.RUN_FINISHED, thread_id=input.thread_id, run_id=run_id)
AnyCapとの連携
AG-UI対応エージェントが実世界の機能——ウェブ検索、画像生成、ファイルストレージ——を必要とする場合、AnyCapはオーケストレーション下のツール層として統合されます。エージェントは実行ループ中にAnyCapツールを呼び出し、対応するTOOL_CALL_*イベントを発行することで、フロントエンドに何が起きているかをリアルタイムで表示します:
ユーザー:「上位5つのAIフレームワークを調査してサマリー画像を作成して」
エージェント発行:TOOL_CALL_START (tool: "anycap_search", args: {...})
エージェント発行:TOOL_CALL_END (result: 検索結果)
エージェント発行:TOOL_CALL_START (tool: "anycap_image_generate", args: {...})
エージェント発行:TOOL_CALL_END (result: 画像URL)
エージェント発行:TEXT_MESSAGE(画像を埋め込んだストリーミングサマリー)
AG-UIイベントを通じて実現されるこの完全な透明性こそ、信頼できるヒューマン・エージェント・インターフェースをブラックボックスから区別するものです。
AG-UIが本番エージェントアプリケーションにとって重要な理由
エージェント駆動のプロダクトを構築するなら、AG-UIが提供するもの:
コンポーネントの再利用性。 AG-UI仕様に従って構築されたフロントエンドコンポーネントは、準拠するバックエンドであれば何でも動作します。ストリーミングチャットUIを一度構築すれば、LangGraph、CrewAI、AutoGenで変更なしに使用できます。
一貫したユーザー体験。 イベントタイプが標準化されているため、ユーザーは異なるエージェントワークフローでも同じインタラクションパターンを体験します。
デバッグ。 AG-UIの状態スナップショットとイベントストリームが、エージェント実行の完全な記録を提供します。イベントストリームをリプレイすると、エージェントが各ステップで何を見て何をしたかを正確に再現できます。
人間による監視。 タスク実行中の人間介入のためのAgentInputメカニズムはプロトコルに組み込まれており——後付けではありません。
まとめ
AG-UIはエージェントAIインフラスタックの真の空白を埋めます。エージェントがより高性能になり、よりユーザー向けになるにつれ、状態を伝え人間の入力を受け取るプロトコルは、アクセスできるツールと同じくらい重要になります。
2026年にエージェント駆動のプロダクトを構築する開発者にとって、AG-UIをいち早く採用することは、エコシステムが収束しつつある基盤の上に構築することを意味します——プロダクトの成長とともに負債になるカスタム通信層を保守し続けるのではなく。
関連リソース: