📡 AG-UI协议深度技术解剖:事件驱动架构、17种事件类型与生产实践
Agent-User Interaction Protocol: Architecture, Implementation & Ecosystem
---
目录
1. 协议概述与设计哲学 2. 核心架构:事件驱动的神经系统 3. 17种标准事件类型完全解析 4. 状态同步机制:JSON Patch与事件溯源 5. 传输层实现:SSE、WebSocket与HTTP 6. 与MCP、A2A的协议栈对比 7. 代码实现:从入门到生产 8. 性能优化与最佳实践 9. 生态系统与框架集成 10. 未来展望与开放问题
---
一、协议概述与设计哲学
1.1 什么是AG-UI?
AG-UI(Agent-User Interaction Protocol)是一个开放的、轻量级的、基于事件的协议,用于标准化AI Agent与用户界面之间的实时通信。它由CopilotKit团队于2025年5月发起并开源。
1.2 设计哲学
AG-UI的设计遵循几个核心原则:
| 原则 | 说明 |
|---|---|
| 事件驱动 | 一切通信都以事件为基本单位,而非传统的请求-响应模式 |
| 流式优先 | 原生支持实时流式传输,延迟可控制在100ms以内 |
| 状态即流 | 状态变更通过事件流传播,而非轮询或完整快照 |
| 框架无关 | 不绑定任何特定框架或技术栈 |
| 传输无关 | 支持SSE、WebSocket、HTTP/2等多种传输方式 |
1.3 协议定位
在现代Agent协议栈中,AG-UI占据独特的位置:
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ AG-UI (Agent ↔ 用户) │ │
│ │ 实时交互、状态同步、人机协作 │ │
│ └──────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 工具与数据层 │
│ ┌──────────────────┐ ┌──────────────────────────────┐ │
│ │ MCP │ │ A2A │ │
│ │ Agent ↔ 工具/数据 │ │ Agent ↔ Agent │ │
│ └──────────────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
- MCP(Anthropic):解决Agent如何调用工具和访问数据
- A2A(Google):解决Agent之间如何协作
- AG-UI(CopilotKit):解决Agent如何与用户界面交互
二、核心架构:事件驱动的神经系统
2.1 事件信封结构
每个AG-UI事件都遵循标准信封格式:
{
"protocol": "AG-UI/1.0",
"type": "TEXT_MESSAGE_CONTENT",
"timestamp": 1709827200000,
"runId": "run_abc123",
"threadId": "thread_xyz789",
"payload": {
// 事件特定数据
},
"extensions": {
// 可选扩展字段
}
}
2.2 核心组件
┌─────────────────────────────────────────────────────────────┐
│ AG-UI架构图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Agent后端 │◄───────►│ AG-UI事件 │ │
│ │ (任意框架) │ │ 编码器 │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 传输层抽象 │ │
│ │ (SSE/WS/HTTP)│ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ AG-UI事件 │ │
│ │ 解码器 │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 前端UI │◄───────►│ 状态管理 │ │
│ │ (React/Vue) │ │ (Store) │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
2.3 事件编码器
AG-UI提供了标准化的编码器:
# Python示例
from ag_ui.core import BaseEvent
from ag_ui.encoder import EventEncoder
encoder = EventEncoder()
# 编码事件
encoded = encoder.encode(event)
# 生成流式响应
yield encoder.encode(TextMessageContentEvent(
type=EventType.TEXT_MESSAGE_CONTENT,
content="Hello"
))
// TypeScript示例
import { EventEncoder } from '@ag-ui/core';
const encoder = new EventEncoder();
// 编码事件流
const stream = encoder.encodeStream(events);
---
三、17种标准事件类型完全解析
AG-UI定义了17种(含特殊变体)标准事件类型,分为五大类别:
3.1 生命周期事件(Lifecycle Events)
| 事件类型 | 描述 | 使用场景 |
|---|---|---|
RUN_STARTED | Agent执行开始 | 显示加载状态 |
STEP_STARTED | 单步执行开始 | 多步任务进度跟踪 |
STEP_FINISHED | 单步执行完成 | 更新进度条 |
RUN_FINISHED | Agent执行完成 | 清理加载状态 |
RUN_ERROR | 执行错误 | 错误处理和恢复 |
RUN_STARTED
├── STEP_STARTED (步骤1)
│ ├── ...工具调用事件...
│ └── STEP_FINISHED
├── STEP_STARTED (步骤2)
│ ├── ...状态变更事件...
│ └── STEP_FINISHED
└── RUN_FINISHED
3.2 文本消息事件(Text Message Events)
| 事件类型 | 描述 | 字段 |
|---|---|---|
TEXT_MESSAGE_START | 消息开始 | messageId, role |
TEXT_MESSAGE_CONTENT | 文本内容片段 | content (token) |
TEXT_MESSAGE_END | 消息结束 | messageId |
yield encoder.encode(TextMessageStartEvent(
type=EventType.TEXT_MESSAGE_START,
message_id="msg_001",
role="assistant"
))
for token in llm_stream():
yield encoder.encode(TextMessageContentEvent(
type=EventType.TEXT_MESSAGE_CONTENT,
message_id="msg_001",
content=token
))
yield encoder.encode(TextMessageEndEvent(
type=EventType.TEXT_MESSAGE_END,
message_id="msg_001"
))
3.3 工具调用事件(Tool Call Events)
| 事件类型 | 描述 | 字段 |
|---|---|---|
TOOL_CALL_START | 工具调用开始 | toolCallId, toolName |
TOOL_CALL_ARGS | 工具参数(流式) | toolCallId, delta |
TOOL_CALL_END | 工具调用结束 | toolCallId |
TOOL_CALL_RESULT | 工具返回结果 | toolCallId, content |
# 1. 开始调用
yield encoder.encode(ToolCallStartEvent(
type=EventType.TOOL_CALL_START,
tool_call_id="tool_123",
tool_call_name="fetch_weather"
))
# 2. 流式参数(大参数时分片传输)
yield encoder.encode(ToolCallArgsEvent(
type=EventType.TOOL_CALL_ARGS,
tool_call_id="tool_123",
delta=json.dumps({"city": "San Francisco"})
))
# 3. 调用结束
yield encoder.encode(ToolCallEndEvent(
type=EventType.TOOL_CALL_END,
tool_call_id="tool_123"
))
# 4. 返回结果
yield encoder.encode(ToolCallResultEvent(
type=EventType.TOOL_CALL_RESULT,
tool_call_id="tool_123",
content="72°F, Sunny"
))
前端处理:
async function handleToolEvents(event: AGUIEvent) {
switch(event.type) {
case 'TOOL_CALL_START':
showLoadingSpinner(`Calling ${event.tool_call_name}...`);
break;
case 'TOOL_CALL_ARGS':
displayToolParams(event.tool_call_id, event.delta);
break;
case 'TOOL_CALL_RESULT':
displayToolResult(event.content);
hideLoadingSpinner();
break;
}
}
3.4 状态管理事件(State Management Events)
这是AG-UI最精妙的设计之一:
| 事件类型 | 描述 | 使用场景 |
|---|---|---|
STATE_SNAPSHOT | 完整状态快照 | 初始同步、全量刷新 |
STATE_DELTA | 状态增量(JSON Patch) | 高频更新、协同编辑 |
MESSAGES_SNAPSHOT | 消息历史快照 | 会话恢复 |
STATE_SNAPSHOT (初始状态)
│
├── STATE_DELTA (增量1)
├── STATE_DELTA (增量2)
├── STATE_DELTA (增量3)
│
└── STATE_SNAPSHOT (周期性全量,防漂移)
Python示例:
# 发送完整快照
yield encoder.encode(StateSnapshotEvent(
type=EventType.STATE_SNAPSHOT,
snapshot={
"score": 0,
"tasks_completed": 0,
"current_step": "fetching_data",
"document": {
"title": "Draft",
"content": ""
}
}
))
# 发送增量变更(JSON Patch格式)
yield encoder.encode(StateDeltaEvent(
type=EventType.STATE_DELTA,
delta=[
{"op": "replace", "path": "/score", "value": 42},
{"op": "replace", "path": "/current_step", "value": "analyzing_data"},
{"op": "add", "path": "/document/content", "value": "New text"}
]
))
3.5 特殊事件(Special Events)
| 事件类型 | 描述 | 用途 |
|---|---|---|
HUMAN_IN_THE_LOOP / INTERRUPT | 暂停等待用户输入 | 人机协作、审批流程 |
HUMAN_RESPONSE | 用户响应 | 恢复Agent执行 |
CUSTOM | 自定义事件 | 协议扩展 |
RAW | 透传外部事件 | 第三方系统集成 |
# Agent暂停等待用户确认
yield encoder.encode(HumanInTheLoopEvent(
type=EventType.HUMAN_IN_THE_LOOP,
reason="USER_CONFIRMATION_NEEDED",
message="确认执行数据库删除操作?"
))
# ...等待用户响应...
# 收到用户响应后继续
yield encoder.encode(HumanResponseEvent(
type=EventType.HUMAN_RESPONSE,
response="confirmed"
))
自定义事件:
# 多Agent交接
custom_event = CustomEvent(
type=EventType.CUSTOM,
name="AGENT_HANDOFF",
value={
"from_agent": "Planner",
"to_agent": "Executor",
"context": {...}
}
)
---
四、状态同步机制:JSON Patch与事件溯源
4.1 为什么选择JSON Patch?
AG-UI使用 JSON Patch(RFC 6902) 作为状态增量格式,相比完整快照的优势:
| 对比项 | 完整快照 | JSON Patch |
|---|---|---|
| 带宽消耗 | O(完整状态大小) | O(变更大小) |
| 延迟 | 高(大状态) | 低(恒定) |
| 冲突检测 | 困难 | 相对容易 |
| 离线支持 | 需额外实现 | 天然支持(patch队列) |
| 审计追溯 | 需存储多版本 | 天然完整历史 |
4.2 JSON Patch操作类型
// 替换值
{"op": "replace", "path": "/score", "value": 100}
// 添加字段
{"op": "add", "path": "/tags/-", "value": "new_tag"}
// 删除字段
{"op": "remove", "path": "/temp_data"}
// 移动字段
{"op": "move", "from": "/old_path", "path": "/new_path"}
// 测试(条件更新)
{"op": "test", "path": "/version", "value": 1}
4.3 事件溯源模式
AG-UI的状态管理借鉴了 事件溯源(Event Sourcing) 架构:
┌─────────────────────────────────────────────────────────────┐
│ 事件溯源架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统方式: │
│ State ──► State ──► State ──► State │
│ │
│ 事件溯源: │
│ Event1 ──► Event2 ──► Event3 ──► Event4 │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ State1 State2 State3 State4 │
│ (派生) (派生) (派生) (派生) │
│ │
│ 当前状态 = fold(所有事件) │
│ │
└─────────────────────────────────────────────────────────────┘
好处: 1. 时间旅行:可以回到任意历史状态 2. 调试友好:完整的事件日志可追溯 3. 协同编辑:类似Google Docs的实时协作 4. 离线优先:本地应用patch,联网后同步
4.4 前端状态合并实现
import { applyPatch } from 'fast-json-patch';
class AGUIStateManager {
private state: any = {};
private eventLog: AGUIEvent[] = [];
handleEvent(event: AGUIEvent) {
switch(event.type) {
case 'STATE_SNAPSHOT':
this.state = event.snapshot;
this.eventLog = [event];
break;
case 'STATE_DELTA':
// 应用JSON Patch
applyPatch(this.state, event.delta);
this.eventLog.push(event);
break;
}
// 通知UI更新
this.notifySubscribers();
}
// 时间旅行:回到第n个事件
timeTravel(eventIndex: number) {
this.state = {};
for(let i = 0; i <= eventIndex; i++) {
this.handleEvent(this.eventLog[i]);
}
}
}
---
五、传输层实现:SSE、WebSocket与HTTP
5.1 Server-Sent Events (SSE) - 推荐
AG-UI的参考实现使用SSE,原因:
| 特性 | SSE | WebSocket |
|---|---|---|
| 基于HTTP | ✅ 是 | ❌ 否 |
| 自动重连 | ✅ 内置 | ⚠️ 需实现 |
| 防火墙友好 | ✅ 是 | ⚠️ 可能受阻 |
| 双向通信 | ❌ 否 | ✅ 是 |
| 二进制支持 | ⚠️ Base64 | ✅ 原生 |
| 复杂度 | 低 | 较高 |
# FastAPI + SSE
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from ag_ui.encoder import EventEncoder
app = FastAPI()
encoder = EventEncoder()
@app.post("/agent")
async def run_agent(request: AgentRequest):
async def event_stream():
# 发送事件流
async for event in agent.execute(request):
yield encoder.encode(event) + "\n\n"
return StreamingResponse(
event_stream(),
media_type="text/event-stream",
headers={
"Cache-Control": "no-cache",
"Connection": "keep-alive",
}
)
5.2 WebSocket支持
对于需要双向高频通信的场景:
// 前端WebSocket客户端
import { AGUIWebSocketClient } from '@ag-ui/ws';
const client = new AGUIWebSocketClient({
url: 'wss://api.example.com/agent',
onEvent: (event) => {
console.log('Received:', event);
}
});
// 发送用户输入
client.send({
type: 'USER_MESSAGE',
content: 'Hello, Agent!'
});
5.3 HTTP长轮询(Fallback)
@app.post("/agent/poll")
async def poll_agent(request: AgentRequest, last_event_id: str = None):
events = await get_events_since(last_event_id)
return {
"events": events,
"last_event_id": events[-1].id if events else None
}
---
六、与MCP、A2A的协议栈对比
6.1 三大协议完整对比
| 维度 | AG-UI | MCP | A2A |
|---|---|---|---|
| 发起方 | CopilotKit (2025) | Anthropic (2024) | Google (2025) |
| 核心问题 | Agent如何与用户交互 | Agent如何调用工具 | Agent之间如何协作 |
| 通信模式 | 单向事件流 | 请求-响应 | 请求-响应 + 推送 |
| 协议格式 | JSON事件 | JSON-RPC 2.0 | JSON-RPC 2.0 |
| 传输方式 | SSE/WebSocket/HTTP | stdio/SSE/HTTP | HTTP/SSE |
| 状态管理 | 事件溯源 | 无状态 | 有状态任务 |
| 流式支持 | 原生 | 通过SSE | 原生 |
| 主要用例 | 实时UI、协同编辑 | 工具调用、数据访问 | 多Agent编排 |
6.2 协议协作架构
┌─────────────────────────────────────────────────────────────┐
│ 用户层 │
│ ┌──────────┐ │
│ │ 用户 │ │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ AG-UI: Agent ↔ UI │ │
│ │ 实时交互、状态同步、人机协作 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
├─────────────────────────┼───────────────────────────────────┤
│ Agent层 │
│ ┌─────────────────┐ │ ┌─────────────────────────┐ │
│ │ Agent A │◄───┼───►│ Agent B │ │
│ │ (规划者) │ │ │ (执行者) │ │
│ └────────┬────────┘ │ └──────────┬──────────────┘ │
│ │ │ │ │
│ │ ┌──────────┴──────────┐ │ │
│ │ │ A2A: Agent ↔ Agent │ │ │
│ │ │ 任务委托、协作 │ │ │
│ │ └───────────────────────┘ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ MCP: Agent ↔ 工具/数据 │ │
│ │ 数据库、API、文件系统、搜索等 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
├─────────────────────────┼───────────────────────────────────┤
│ 基础设施层 │
│ ┌───────────────┼───────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ PostgreSQL│ │ REST API │ │ File System│ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
6.3 使用场景决策树
你需要什么?
│
├── 用户界面交互?
│ └── 使用 AG-UI
│
├── 调用外部工具/API?
│ └── 使用 MCP
│
├── 多个Agent协作?
│ └── 使用 A2A
│
└── 全部都需要?
└── AG-UI + MCP + A2A 组合使用
6.4 AG-UI vs A2UI
还有一个容易混淆的协议:A2UI(Agent-to-User Interface),由Google提出。
| 维度 | AG-UI | A2UI |
|---|---|---|
| 性质 | 传输协议 | UI描述规范 |
| 关注点 | "如何传输" | "显示什么" |
| 类比 | HTTP | HTML |
| 关系 | AG-UI可以承载A2UI数据 | A2UI定义UI组件抽象 |
AG-UI (传输层)
│
├── 事件: TEXT_MESSAGE_CONTENT
├── 事件: STATE_DELTA
└── 事件: CUSTOM
│
└── payload: A2UI描述
{
"type": "form",
"fields": [...]
}
---
七、代码实现:从入门到生产
7.1 最小可行示例
后端(Python + FastAPI):
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from ag_ui import EventEncoder, EventType
import asyncio
app = FastAPI()
encoder = EventEncoder()
@app.post("/chat")
async def chat(message: str):
async def generate():
# 开始事件
yield encoder.encode({
"type": EventType.RUN_STARTED,
"runId": "run_001"
})
# 文本消息开始
yield encoder.encode({
"type": EventType.TEXT_MESSAGE_START,
"messageId": "msg_001",
"role": "assistant"
})
# 模拟流式输出
response = "Hello! I'm an AI assistant."
for token in response.split():
yield encoder.encode({
"type": EventType.TEXT_MESSAGE_CONTENT,
"messageId": "msg_001",
"content": token + " "
})
await asyncio.sleep(0.1)
# 文本消息结束
yield encoder.encode({
"type": EventType.TEXT_MESSAGE_END,
"messageId": "msg_001"
})
# 运行结束
yield encoder.encode({
"type": EventType.RUN_FINISHED,
"runId": "run_001"
})
return StreamingResponse(
generate(),
media_type="text/event-stream"
)
前端(React):
import { useAGUI } from '@ag-ui/react';
function Chat() {
const { messages, sendMessage, isLoading } = useAGUI({
endpoint: '/api/chat'
});
return (
<div className="chat">
{messages.map(msg => (
<div key={msg.id} className={`message ${msg.role}`}>
{msg.content}
</div>
))}
{isLoading && <div className="loading">...</div>}
<input
onKeyPress={(e) => {
if (e.key === 'Enter') {
sendMessage(e.target.value);
e.target.value = '';
}
}}
/>
</div>
);
}
7.2 LangGraph集成
from langgraph.graph import StateGraph
from ag_ui import EventEncoder, EventType
encoder = EventEncoder()
class AgentState:
messages: list
current_step: str
graph = StateGraph(AgentState)
@graph.node()
def planner(state: AgentState):
# 发送步骤开始事件
yield encoder.encode({
"type": EventType.STEP_STARTED,
"step": "planning"
})
# 执行规划逻辑...
plan = generate_plan(state.messages)
# 发送状态更新
yield encoder.encode({
"type": EventType.STATE_DELTA,
"delta": [
{"op": "add", "path": "/plan", "value": plan}
]
})
# 发送步骤结束
yield encoder.encode({
"type": EventType.STEP_FINISHED,
"step": "planning"
})
return {"current_step": "executing"}
# 更多节点...
7.3 生产级错误处理
from contextlib import asynccontextmanager
@asynccontextmanager
async def safe_agent_execution():
try:
yield
except AgentError as e:
yield encoder.encode({
"type": EventType.RUN_ERROR,
"error": {
"code": e.code,
"message": str(e),
"recoverable": e.recoverable
}
})
except Exception as e:
# 未知错误
yield encoder.encode({
"type": EventType.RUN_ERROR,
"error": {
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred",
"recoverable": False
}
})
logger.exception("Unexpected error in agent execution")
7.4 人机协作实现
import asyncio
class HumanInTheLoopManager:
def __init__(self):
self.pending_confirmations = {}
async def request_confirmation(self, context: dict) -> str:
confirmation_id = generate_id()
# 发送中断事件
yield encoder.encode({
"type": EventType.HUMAN_IN_THE_LOOP,
"confirmationId": confirmation_id,
"context": context
})
# 等待用户响应
future = asyncio.Future()
self.pending_confirmations[confirmation_id] = future
try:
response = await asyncio.wait_for(future, timeout=300)
return response
except asyncio.TimeoutError:
raise HumanTimeoutError("User did not respond in time")
def handle_human_response(self, confirmation_id: str, response: str):
if confirmation_id in self.pending_confirmations:
future = self.pending_confirmations.pop(confirmation_id)
future.set_result(response)
---
八、性能优化与最佳实践
8.1 性能指标
| 指标 | 目标值 | 说明 |
|---|---|---|
| 首字延迟 | <100ms | 从发送到首token返回 |
| 事件处理延迟 | <10ms | 前端处理单个事件 |
| 状态同步带宽 | 减少90%+ | 相比完整快照 |
| 并发连接 | 10K+ | 单服务器 |
8.2 优化策略
1. 事件批处理
# 小token合并发送,减少网络开销
buffer = []
for token in llm_stream():
buffer.append(token)
if len(buffer) >= 5 or time_since_last_send() > 50:
yield encoder.encode({
"type": EventType.TEXT_MESSAGE_CONTENT,
"content": "".join(buffer)
})
buffer = []
2. 状态压缩
import gzip
import base64
# 大状态快照压缩
def compress_large_snapshot(snapshot: dict) -> str:
json_str = json.dumps(snapshot)
compressed = gzip.compress(json_str.encode())
return base64.b64encode(compressed).decode()
3. 增量更新策略
# 高频更新合并
class StateBatcher:
def __init__(self, flush_interval=100):
self.pending_deltas = []
self.flush_interval = flush_interval
def add_delta(self, delta):
self.pending_deltas.extend(delta)
if len(self.pending_deltas) >= self.flush_interval:
return self.flush()
return None
def flush(self):
if not self.pending_deltas:
return None
deltas = self.pending_deltas
self.pending_deltas = []
return deltas
4. 连接池管理
// 前端连接复用
class AGUIConnectionPool {
private connections: Map<string, Connection> = new Map();
getConnection(endpoint: string): Connection {
if (!this.connections.has(endpoint)) {
this.connections.set(endpoint, new Connection(endpoint));
}
return this.connections.get(endpoint)!;
}
}
8.3 安全最佳实践
1. 事件验证
from pydantic import BaseModel, validator
class AGUIEvent(BaseModel):
type: str
timestamp: int
@validator('type')
def validate_type(cls, v):
allowed_types = [t.value for t in EventType]
if v not in allowed_types:
raise ValueError(f"Invalid event type: {v}")
return v
2. 速率限制
from ratelimit import limits, sleep_and_retry
@sleep_and_retry
@limits(calls=100, period=60)
def send_event(event):
# 发送事件
pass
3. 敏感数据过滤
def sanitize_event(event: dict) -> dict:
"""过滤敏感信息"""
sensitive_keys = ['password', 'token', 'secret', 'api_key']
def redact(obj):
if isinstance(obj, dict):
return {
k: '[REDACTED]' if k in sensitive_keys else redact(v)
for k, v in obj.items()
}
elif isinstance(obj, list):
return [redact(item) for item in obj]
return obj
return redact(event)
---
九、生态系统与框架集成
9.1 官方支持的框架
| 框架 | 状态 | SDK | 文档 |
|---|---|---|---|
| LangGraph | ✅ 官方支持 | Python/TS | docs.ag-ui.com |
| CrewAI | ✅ 官方支持 | Python | docs.ag-ui.com |
| Mastra | ✅ 官方支持 | TypeScript | docs.ag-ui.com |
| Pydantic AI | ✅ 官方支持 | Python | docs.ag-ui.com |
| Google ADK | ✅ 官方支持 | Python | docs.ag-ui.com |
| Microsoft Agent Framework | ✅ 官方支持 | .NET | docs.ag-ui.com |
| AWS Strands Agents | ✅ 官方支持 | Python | docs.ag-ui.com |
| Oracle Agent Spec | ✅ 官方支持 | Java | docs.ag-ui.com |
| AG2 | ✅ 官方支持 | Python | docs.ag-ui.com |
9.2 SDK支持
| 语言/平台 | SDK | 状态 |
|---|---|---|
| TypeScript | @ag-ui/core | ✅ 稳定 |
| Python | ag-ui | ✅ 稳定 |
| Kotlin Multiplatform | ag-ui-4k | ✅ 稳定 |
| Go | ag-ui-go | 🔄 Beta |
| Rust | ag-ui-rs | 🔄 Beta |
| Dart (Flutter) | ag_ui | 🔄 Beta |
| Java | ag-ui-java | 🔄 Beta |
| Ruby | ag-ui-ruby | 🔄 Alpha |
| .NET | AGUI.NET | 🔄 Alpha |
9.3 企业采用案例
| 公司/组织 | 用例 | 规模 |
|---|---|---|
| JPMorgan Chase | 交易台实时风险监控 | 生产环境 |
| Clifford Chance | 法律文件审查助手 | 生产环境 |
| Stanford BMI Lab | 神经假肢控制系统 | 研究阶段 |
| Shopify | 商家助手 | 试点阶段 |
| Walmart | 供应链Agent | 试点阶段 |
十、未来展望与开放问题
10.1 路线图
| 版本 | 特性 | 预计时间 |
|---|---|---|
| v1.1 | 语音/视频流支持 | 2025 Q3 |
| v1.2 | 端到端加密 | 2025 Q4 |
| v2.0 | 边缘计算优化 | 2026 Q1 |
| v2.1 | 多模态事件类型 | 2026 Q2 |
10.2 开放问题
1. 协议治理:多个竞争协议(AG-UI、A2UI、MCP-UI)如何统一或共存? 2. 安全边界:如何防止恶意Agent通过UI事件进行攻击? 3. 跨域兼容:不同厂商的实现是否存在碎片化风险? 4. 性能边界:在超低延迟场景(如AR/VR)下能否满足要求?
10.3 参与社区
| 资源 | 链接 |
|---|---|
| GitHub | github.com/ag-ui-protocol/ag-ui |
| 官方文档 | docs.ag-ui.com |
| Discord社区 | discord.gg/ag-ui |
| AG-UI Dojo(示例) | dojo.ag-ui.com |
| 贡献指南 | github.com/ag-ui-protocol/ag-ui/blob/main/CONTRIBUTING.md |
附录:快速参考卡
事件类型速查表
生命周期:RUN_STARTED, STEP_STARTED, STEP_FINISHED, RUN_FINISHED, RUN_ERROR
文本消息:TEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT, TEXT_MESSAGE_END
工具调用:TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END, TOOL_CALL_RESULT
状态管理:STATE_SNAPSHOT, STATE_DELTA, MESSAGES_SNAPSHOT
特殊事件:HUMAN_IN_THE_LOOP, HUMAN_RESPONSE, CUSTOM, RAW
JSON Patch操作速查表
{"op": "add", "path": "/field", "value": "data"} // 添加
{"op": "remove", "path": "/field"} // 删除
{"op": "replace", "path": "/field", "value": "new"} // 替换
{"op": "move", "from": "/old", "path": "/new"} // 移动
{"op": "copy", "from": "/src", "path": "/dst"} // 复制
{"op": "test", "path": "/field", "value": "expected"} // 测试
最小可运行代码
# 安装
npm install @ag-ui/core
pip install ag-ui
# 快速开始
npx create-ag-ui-app my-app
---
*报告版本:v1.0* *最后更新:2026年3月29日* *作者:AI Research Assistant* *协议版本:AG-UI/1.0*
---
#AG-UI #Agent协议 #MCP #A2A #AI架构 #技术深度解析 #小凯
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens