一个全面的 Agent User Interaction Protocol (AG-UI) 演示,使用多种前端和后端技术实现,展示实时代理通信、流式事件和人机协作工作流。
此演示实现了 AG-UI 协议,在 AI 代理和前端应用程序之间创建标准化接口。它展示了:
- 实时流式通信 - 代理和 UI 之间
- 事件驱动架构 - 遵循 AG-UI 规范
- 工具调用机制 - 支持人机协作工作流
- 状态同步 - 代理和前端之间
- 多种后端实现 - SignalR/.NET 和 Socket.IO/Node.js
AG-UI 协议演示界面,显示演示场景(左)、聊天界面(中)和实时事件日志(右)
AG-UI 协议事件的实时演示,包括消息流传输、工具调用和状态同步
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 前端 │ │ 通信层 │ │ 后端 │
│ (Svelte) │◄──►│ │◄──►│ (.NET/Node) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AgentChat │ │ SignalR/ │ │ AgentHub/ │
│ 组件 │ │ Socket.IO │ │ AgentService │
└─────────────────┘ └──────────────────┘ └─────────────────┘
- 完整实现 AG-UI 事件
- 生命周期事件(RUN_STARTED、RUN_FINISHED 等)
- 文本消息流(TEXT_MESSAGE_START、CONTENT、END)
- 工具调用事件(TOOL_CALL_START、ARGS、END、RESULT)
- 状态管理(STATE_SNAPSHOT、STATE_DELTA)
- SignalR/.NET 8:企业级实时通信
- Socket.IO/Node.js:轻量级、灵活的实现
- 实时消息流:逐字符文本渲染
- 工具集成:可扩展的工具调用系统
- 状态同步:双向状态共享
- 事件日志:完整的 AG-UI 事件透明度
- 错误处理:强大的连接和错误管理
- Node.js 18+ 和 npm
- .NET 8 SDK(用于 SignalR 后端)
- 现代 Web 浏览器
# 克隆仓库
git clone <repository-url>
cd ag-ui-demo1
# 安装前端依赖
cd frontend
npm install
# 安装 Node.js 后端依赖
cd ../backend/nodejs-mock-server
npm install
# 返回项目根目录
cd ../..终端 1:启动 Node.js 后端
cd backend/nodejs-mock-server
npm run dev
# 或者:npm start这将在端口 5001 启动 Node.js 后端
终端 2:启动前端
cd frontend
npm run dev这将在端口 5173 启动前端
终端 1:启动 .NET 后端
cd backend/dotnet-signalr-server
dotnet run这将在端口 5000 启动 .NET SignalR 后端
终端 2:启动前端
cd frontend
npm run dev这将在端口 5173 启动前端
- 前端:http://localhost:5173
- 后端健康检查:http://localhost:5001/health (Node.js) 或 http://localhost:5000/health (.NET)
├── frontend/ # Svelte 前端应用
│ ├── src/
│ │ ├── lib/
│ │ │ ├── components/ # UI 组件
│ │ │ │ └── AgentChat.svelte
│ │ │ ├── SignalRAgent.ts # SignalR 客户端
│ │ │ ├── SocketIOAgent.ts # Socket.IO 客户端
│ │ │ └── types.ts # AG-UI 类型定义
│ │ ├── App.svelte # 主应用程序
│ │ └── main.ts
├── backend/
│ ├── dotnet-signalr-server/ # .NET SignalR 实现
│ │ ├── AgentHub.cs # 带 AG-UI 事件的 SignalR Hub
│ │ └── Program.cs
│ └── nodejs-mock-server/ # Node.js Socket.IO 实现
│ ├── server.js # Express + Socket.IO 服务器
│ └── package.json
└── docs/ # 多语言文档
├── en/ # 英文文档
├── zh/ # 中文文档
└── README.md # 此文件
此演示展示了完整的 AG-UI 协议实现:
-
生命周期事件
RUN_STARTED:代理执行开始RUN_FINISHED:代理执行完成RUN_ERROR:代理执行失败STEP_STARTED:代理步骤开始STEP_FINISHED:代理步骤完成
-
消息事件
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:增量状态更新
演示包含几个示例工具,展示 AG-UI 工具调用模式:
const tools = [
{
name: "getUserPreferences",
description: "获取用户偏好和设置",
parameters: {
type: "object",
properties: {
userId: { type: "string", description: "用户 ID" }
},
required: ["userId"]
}
},
// 更多工具...
];- 在
frontend/src/App.svelte中定义工具:
const newTool = {
name: "myTool",
description: "此工具的功能描述",
parameters: {
type: "object",
properties: {
param1: { type: "string", description: "参数描述" }
},
required: ["param1"]
}
};- 在后端处理工具执行
- 在前端界面测试工具调用
在 AgentChat.svelte 中扩展事件处理:
function handleAgentEvent(event: AGUIEvent) {
switch (event.type) {
case EventType.CUSTOM:
// 处理自定义事件
break;
// ... 其他情况
}
}提供多语言综合文档:
- 架构指南
- 开发设置
- API 参考
- 故障排除
- 贡献指南
我们欢迎贡献!请查看我们的贡献指南了解详情。
- Fork 仓库
- 创建功能分支
- 进行更改
- 如适用,添加测试
- 更新文档
- 提交拉取请求
此项目根据 MIT 许可证授权 - 请参阅 LICENSE 文件了解详情。
如有问题和支持:
- 在此仓库中创建问题
- 加入 AG-UI GitHub 讨论中的讨论
- 查看故障排除指南