# 🎭 当AI学会"看见"用户:CopilotKit与AG-UI协议如何架起Agent与人类的桥梁
## 开篇:一个关于"对话"的想象
想象你走进一家餐厅。
传统的方式是:服务员递上菜单,你指着菜名说"我要这个"。整个交互是**命令式的**——你发指令,系统执行。
但现在想象另一种场景:服务员不只是记录订单,而是观察你皱眉看着菜单的困惑表情,主动过来说:"这道菜有点辣,如果您不太能吃辣,我推荐另一道口味相似的。"。
这就是**Copilot**(副驾驶)体验的精髓——
AI不是在等待你的命令,而是在**观察你的上下文**,在**合适的时机**提供**恰到好处的帮助**。
今天,我们要聊的就是让这种体验成为可能的两项技术:**CopilotKit**和**AG-UI协议**。
---
## 第一章:从"聊天机器人"到"副驾驶"——CopilotKit的诞生
### 🤖 为什么聊天不够?
你一定用过ChatGPT、Claude这样的AI助手。它们很强大,但有一个根本限制:
> 它们被困在**聊天窗口**里。
想象一下,你在用Photoshop修图,想让AI帮你调整一下色彩。传统的方式是:
1. 截图
2. 打开ChatGPT
3. 粘贴图片
4. 描述你的需求
5. 等待AI回复
6. 手动在Photoshop里执行操作
这个流程有什么问题?
- **上下文丢失**:AI看不见你的整个项目
- **操作断裂**:AI的建议需要你手动执行
- **体验割裂**:你在两个应用之间来回切换
**CopilotKit**要解决的就是这个问题。
### 🪁 什么是CopilotKit?
用最简单的话说:**CopilotKit是一个开源框架,让你能在自己的应用里快速搭建"副驾驶"体验。**
不是简单的聊天窗口,而是让AI能够:
- **理解应用的当前状态**(你在看什么、在做什么)
- **直接在应用内执行操作**(不只是给建议,而是直接动手)
- **与用户协同工作**(人机协作,不是人机对话)
### 🧩 三个核心概念
CopilotKit基于三个核心概念,我称之为"**Generative UI的三重境界**":
#### 第一重:Controlled(受控式)
就像餐厅里固定的菜单。AI只能在预设的选项中选择。
```
用户:"查看天气"
AI → 触发 WeatherCard 组件
```
这是最安全、最可控的模式。开发者定义好所有可能的UI组件,AI决定何时触发哪个。
#### 第二重:Declarative(声明式)
就像DIY餐厅,AI可以描述它想要的UI,前端负责渲染。
```
AI返回:
{
"type": "form",
"fields": [
{ "label": "目的地", "type": "text" },
{ "label": "日期", "type": "date" }
]
}
```
这更灵活,AI可以根据上下文动态生成UI结构。
#### 第三重:Open-ended(开放式)
就像一位真正了解你厨房的智能助手,它知道你的食材在哪里、调料放在哪、甚至记得你上周做过什么菜。它不只是给你食谱,而是可以直接帮你操作厨房设备。
这是最强大的模式,AI可以:
- 读取应用状态
- 调用前端功能
- 与用户实时协作
---
## 第二章:协议层的突破——为什么AG-UI很重要
### 🌉 巴别塔困境
在AG-UI出现之前,每个AI Agent框架都在用自己的方式与前端通信:
- LangChain有自己的一套
- CrewAI有另一套
- AutoGen又有不同的实现
- 每个团队还要自建WebSocket
这就像在建造一座**巴别塔**——大家都在说不同的语言,无法协作。
### 📜 AG-UI的诞生
AG-UI(Agent-User Interaction Protocol)是CopilotKit团队发起的一个开放协议。它的目标很简单:
> **像HTTP标准化网页通信一样,标准化AI Agent与用户界面的通信。**
### 🔍 AG-UI在协议栈中的位置
让我们看看现代AI生态的协议栈:
```
┌─────────────────────────────────────────┐
│ 👤 用户 │
│ ┌─────────────────────────────────┐ │
│ │ AG-UI (Agent ↔ 用户) │ │
│ │ - 实时流式响应 │ │
│ │ - 双向状态同步 │ │
│ │ - 人机协作 │ │
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ 🛠️ MCP (Agent ↔ 工具) │
│ Anthropic发起的工具连接协议 │
├─────────────────────────────────────────┤
│ 🤝 A2A (Agent ↔ Agent) │
│ Google发起的Agent间通信协议 │
└─────────────────────────────────────────┘
```
这三者分别解决不同的问题:
- **MCP**:Agent如何连接工具和数据
- **A2A**:Agent之间如何协作
- **AG-UI**:Agent如何与用户交互
### 📡 AG-UI的核心创新
#### 1. 17种标准事件类型
AG-UI定义了一套完整的事件语言。想象一下,如果没有标准的HTTP方法(GET/POST/PUT/DELETE),每个网站都需要自定义API风格——那会是一场灾难。
AG-UI做了同样的事情:它定义了Agent与UI通信的"标准词汇"。
| 事件 | 用途 |
|-----|------|
| `TEXT_MESSAGE_CONTENT` | 流式输出文字(一个字一个字出现) |
| `TOOL_CALL_START` | Agent开始调用工具 |
| `STATE_DELTA` | 状态变更(JSON Patch格式) |
| `HUMAN_IN_THE_LOOP` | 暂停等待用户输入 |
#### 2. 事件溯源状态同步
这是AG-UI最精妙的设计之一。
传统的状态同步是:每次变更都发送完整的新状态。
AG-UI采用的方式是:只发送**变更的部分**(JSON Patch)。
想象一下你在Google Docs里编辑文档:
- 传统方式:你每打一个字母,整个文档内容都重新传输一次
- AG-UI方式:只传输"在第3段第5个位置插入字母'a'"
这不仅节省带宽,还支持:
- **离线编辑**:可以先本地应用patch,联网后同步
- **冲突解决**:可以看到完整的历史变更记录
- **时间旅行**:可以回溯到任意历史状态
#### 3. 传输层无关
AG-UI不强制你用WebSocket还是SSE。它只定义事件格式,不关心你怎么传输。
这就像HTTP:你可以用HTTP/1.1、HTTP/2、甚至QUIC,只要遵循HTTP语义就行。
---
## 第三章:从理论到实践——AG-UI如何工作
### 🎬 一个完整的交互流程
让我们看一个实际的例子:用AI助手预订酒店。
**场景**:用户在旅行规划应用中,让AI帮忙预订酒店。
```
用户:"帮我订一家东京的商务酒店,下周三入住"
↓
AI(开始处理):
├─ TEXT_MESSAGE_START
├─ TEXT_MESSAGE_CONTENT: "正在为您搜索东京的商务酒店..."
├─ TOOL_CALL_START: search_hotels
├─ TOOL_CALL_ARGS: {"location": "东京", "type": "business", "date": "下周三"}
├─ TOOL_CALL_END: {"results": [...]}
├─ TEXT_MESSAGE_CONTENT: "找到了3家符合要求的酒店"
├─ STATE_DELTA: [{"op": "replace", "path": "/hotels", "value": [...]}]
└─ TEXT_MESSAGE_END
↓
用户看到UI更新,显示3家酒店卡片
↓
用户点击"查看详情":
├─ HUMAN_IN_THE_LOOP: 用户正在选择
└─ 用户选择第2家酒店
↓
AI继续:
├─ TOOL_CALL_START: book_hotel
├─ TEXT_MESSAGE_CONTENT: "正在为您预订..."
├─ STATE_DELTA: [{"op": "replace", "path": "/booking/status", "value": "processing"}]
├─ TOOL_CALL_END: {"confirmation": "BK123456"}
└─ RUN_FINISHED
```
整个过程中:
- 用户看到的是**流畅的UI更新**
- 背后是**标准化的事件流**
- 开发者不需要关心通信细节
### 🧠 为什么这很重要?
**类比:HTTP的诞生**
在HTTP出现之前,互联网应用需要用各种自定义协议通信。HTTP统一了这种通信,催生了:
- 浏览器(Chrome、Firefox)
- Web服务器(Nginx、Apache)
- 中间件(缓存、负载均衡)
- 开发框架(React、Django)
**AG-UI的潜力**
AG-UI可能成为AI原生应用的"HTTP"。一旦标准化:
- Agent框架可以专注于智能逻辑
- UI框架可以专注于用户体验
- 中间件可以处理调试、监控、安全
- 开发者可以跨框架复用组件
---
## 第四章:CopilotKit vs 其他方案
### 🏟️ 竞品对比
| 方案 | 定位 | 优势 | 劣势 |
|-----|------|-----|------|
| **CopilotKit** | Copilot框架 | 协议标准、框架集成丰富、双向状态 | 相对较新 |
| **Vercel AI SDK** | AI工具包 | Next.js深度集成、生态成熟 | 与Vercel生态绑定 |
| **Assistant UI** | 聊天组件 | 开箱即用、UI精美 | 功能相对单一 |
| **Langflow** | 可视化编排 | 无代码、快速原型 | 灵活性有限 |
### 🤔 如何选择?
**选择CopilotKit,如果你**:
- 需要深度集成到现有应用
- 需要状态双向同步
- 不想被单一供应商锁定
- 使用多种Agent框架
**选择Vercel AI SDK,如果你**:
- 使用Next.js
- 需要底层控制
- 熟悉React Server Components
**选择Assistant UI,如果你**:
- 只需要聊天界面
- 追求快速启动
---
## 第五章:AG-UI的生态系统
### 🌐 行业支持
AG-UI已经获得了令人瞩目的行业支持:
| 框架/平台 | 支持状态 |
|----------|---------|
| LangGraph | ✅ 官方集成 |
| CrewAI | ✅ 官方集成 |
| Mastra | ✅ 官方集成 |
| Google ADK | ✅ 官方集成 |
| Microsoft Agent Framework | ✅ 官方集成 |
| AWS Strands Agents | ✅ 官方集成 |
| Oracle Agent Spec | ✅ 官方集成 |
| Pydantic AI | ✅ 官方集成 |
这意味着:
> **你用任何一个框架开发的Agent,都可以通过AG-UI连接到同一个UI组件库。**
### 📱 跨平台支持
AG-UI不仅限于Web,还支持:
- **移动端**:Kotlin SDK(Android、iOS)
- **Flutter**:Dart SDK
- **桌面**:.NET SDK
- **后端**:Python、Go、Rust、Java、Ruby
---
## 结语:未来已来,只是分布不均
### 🎭 回到开头的餐厅
想象未来的软件体验:
- 你在Excel里分析数据,AI助手注意到你在反复尝试某个公式,主动说"这个需求用PIVOTTABLE会更高效,需要我帮你生成吗?"
- 你在写邮件,AI感知到你犹豫了很久,弹出提示"这段表述可能显得生硬,这是三个更委婉的表达方式"
- 你在设计网站,AI看到你调了三次颜色都不满意,说"我注意到你在找一种温暖但不刺眼的颜色,试试这个?"
这不是遥远的未来。**CopilotKit和AG-UI正在让这种体验成为现实。**
### 🚀 最后的思考
技术发展的规律是:**先分散,后集中,再统一**。
- 早期的Web:每个网站有自己的协议
- 后来的Web:HTTP统一了一切
- 现在的AI:每个框架有自己的通信方式
- 未来的AI:AG-UI可能成为那个统一的标准
CopilotKit团队不只是在做一款产品,他们在**铺设基础设施**——就像当年铺设互联网光纤的那些人。
而我们,正站在这个转折点上。
---
## 延伸阅读与资源
| 资源 | 链接 |
|-----|------|
| CopilotKit官网 | https://www.copilotkit.ai |
| CopilotKit GitHub | https://github.com/CopilotKit/CopilotKit |
| AG-UI协议官网 | https://ag-ui.com |
| AG-UI GitHub | https://github.com/ag-ui-protocol/ag-ui |
| AG-UI Dojo(互动示例)| https://dojo.ag-ui.com |
| 官方文档 | https://docs.copilotkit.ai |
---
*"当AI学会看见用户,交互就不再是对话,而是共舞。"*
*——小凯,2026年3月29日*
---
#CopilotKit #AG-UI #Agent协议 #GenerativeUI #AI应用框架 #小凯
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!