适合关注这个主题的客户和场景
希望 AI 不只是聊天,而能读取业务数据、调用工具和推动流程的企业。
正在建设 IoT 控制台、运维平台、内部工作台或智能助手的团队。
需要把模型调用、MCP 工具和前端交互做成可审计闭环的项目。
AI Agent技术路径
Agent 边界定义
先明确哪些任务可以自动执行,哪些必须人工确认,避免直接让模型控制高风险动作。
工具与协议连接
通过 MCP、Function Calling、API 或消息系统把模型接入设备、工单、数据库和业务系统。
前端交互协议
使用 AG-UI 或类似事件模型,让用户能看到 Agent 状态、建议、执行和回退。
审计与安全
为每次读取、推理、命令和结果记录上下文,支持权限、回滚和责任追踪。
AG-UI 项目启动前,需要交接哪些业务与工程输入?
已有企业工作台、Agent 或 IoT 平台的团队,可先选一个用户任务,把可读数据、有限工具、人工确认与验收结果写清楚。协议接通只是实现条件之一。
| 决策环节 | 先准备什么 | 需要明确的边界 |
|---|---|---|
| 业务任务 | 用户角色、一条高频流程、当前处理方法与脱敏样本 | 输出是只读建议、草稿还是业务写入;先约定不做什么 |
| 交互与状态 | 现有前端、Agent运行时与版本,等待/失败/转人工的界面需求 | AG-UI负责Agent与用户界面的事件交互,具体SDK和状态契约需验证 |
| 数据与工具 | 接口负责人、授权范围、资料版本、租户与设备隔离规则 | MCP或普通API只是连接方式,访问权限必须由业务系统校验 |
| 人工确认 | 执行目标、参数、影响、审批人以及拒绝/参数变化的处理规则 | 前端确认不替代后端授权;设备控制与高风险动作独立评估 |
| 验收与恢复 | 样本预期结果、越权/超时/重复提交/断连用例、证据与责任人 | 只对已定义并验证的补偿流程承诺回退,不把失败提示当成功 |
公开协议文档不是团队项目实测,也不证明某个SDK或所有框架均兼容。准备工具仅组织需求,不运行Agent或访问您的系统。
AG-UI 事件怎样变成可见的回答、工具状态和失败提示?
面向已有业务工作台或 IoT 平台的开发团队,逐步回放同一套事件,检查文本拼接、工具参数与结果的区别,以及失败后的终止行为。全部使用固定模拟记录,不调用模型、不连接设备。
核验于 2026-10-29 · @ag-ui/core@1.0.3 · 协议 1.0 · 3 条完整事件流 / 10 组反例测试
固定模拟文本;没有调用模型或检索服务。
- RUN_STARTED
- TEXT_MESSAGE_START
- TEXT_MESSAGE_CONTENT
- TEXT_MESSAGE_CONTENT
- TEXT_MESSAGE_END
- RUN_FINISHED
工具结果来自模拟记录;TOOL_CALL_END 仅代表参数结束,结果事件到达后才能显示查询返回。
- RUN_STARTED
- STATE_SNAPSHOT
- TOOL_CALL_START
- TOOL_CALL_ARGS
- TOOL_CALL_ARGS
- TOOL_CALL_END
- TOOL_CALL_RESULT
- TEXT_MESSAGE_START
- TEXT_MESSAGE_CONTENT
- TEXT_MESSAGE_END
- RUN_FINISHED
模拟后端拒绝写操作;没有真实授权校验或设备指令,失败后不能显示执行成功。
- RUN_STARTED
- TOOL_CALL_START
- TOOL_CALL_ARGS
- TOOL_CALL_END
- RUN_ERROR
界面消费结果 · 仅模拟
尚未开始
0 / 6 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
1 / 6 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
2 / 6 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
3 / 6 个事件已消费
- 回答文本
- 设备告警需要先核对发生时间与采样记录。
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
4 / 6 个事件已消费
- 回答文本
- 设备告警需要先核对发生时间与采样记录。本段仅演示界面如何拼接文本事件。
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
5 / 6 个事件已消费
- 回答文本
- 设备告警需要先核对发生时间与采样记录。本段仅演示界面如何拼接文本事件。
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
模拟回放完成
6 / 6 个事件已消费
- 回答文本
- 设备告警需要先核对发生时间与采样记录。本段仅演示界面如何拼接文本事件。
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
尚未开始
0 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
1 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
2 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
3 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- lookup_alarm:接收参数
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
4 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- lookup_alarm:接收参数
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
5 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- lookup_alarm:接收参数
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
6 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 参数接收完成,等待工具结果(不代表执行成功)
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
7 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 模拟工具返回:{"source": "模拟记录", "alarm": "温度偏高", "nextStep": "请现场人员核对探头与柜门"}
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
8 / 11 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 模拟工具返回:{"source": "模拟记录", "alarm": "温度偏高", "nextStep": "请现场人员核对探头与柜门"}
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
9 / 11 个事件已消费
- 回答文本
- 模拟查询已返回。建议生成待人工确认的排查清单,不下发设备指令。
- 工具状态
- 模拟工具返回:{"source": "模拟记录", "alarm": "温度偏高", "nextStep": "请现场人员核对探头与柜门"}
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
回放中
10 / 11 个事件已消费
- 回答文本
- 模拟查询已返回。建议生成待人工确认的排查清单,不下发设备指令。
- 工具状态
- 模拟工具返回:{"source": "模拟记录", "alarm": "温度偏高", "nextStep": "请现场人员核对探头与柜门"}
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
模拟回放完成
11 / 11 个事件已消费
- 回答文本
- 模拟查询已返回。建议生成待人工确认的排查清单,不下发设备指令。
- 工具状态
- 模拟工具返回:{"source": "模拟记录", "alarm": "温度偏高", "nextStep": "请现场人员核对探头与柜门"}
- 共享状态快照
- {"device":"演示冷柜 A","mode":"只读模拟"}
- 错误提示
- 尚无错误
尚未开始
0 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
1 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 尚无工具调用
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
2 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- request_setpoint_change:接收参数
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
3 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- request_setpoint_change:接收参数
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
回放中
4 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 参数接收完成,等待工具结果(不代表执行成功)
- 共享状态快照
- 尚无状态快照
- 错误提示
- 尚无错误
模拟失败,已终止
5 / 5 个事件已消费
- 回答文本
- 等待文本事件
- 工具状态
- 本轮失败;不能据参数结束认定设备执行成功
- 共享状态快照
- 尚无状态快照
- 错误提示
- 模拟后端拒绝:当前角色无写权限。未下发任何设备指令。
参数结束、工具返回和设备成功是三个不同判断
TOOL_CALL_END 仅表示参数接收结束。示例会继续等待 TOOL_CALL_RESULT;收到模拟结果也不能证明真实设备已经动作。写操作还需要业务后端授权、人工确认和设备回执,AG-UI 事件本身不授予权限。
下载包在 Node.js 中使用官方 EventSchemas 校验事件字段,并单独检查本示例的顺序与 ID。页面逐步展示同一事件流预先计算的消费结果;下载包可实际运行处理器。这里没有验证网络传输、重连或真实后端。
解压后运行 npm ci --ignore-scripts 和 npm test,使用 Node.js ≥22.12。版本组合、边界和复现步骤见包内 README。
查看全部原始事件(无需运行)
知识问答:文本分段返回
固定模拟文本;没有调用模型或检索服务。
[
{
"type": "RUN_STARTED",
"threadId": "demo-thread",
"runId": "demo-text",
"protocolVersion": "1.0"
},
{
"type": "TEXT_MESSAGE_START",
"messageId": "answer-1",
"role": "assistant"
},
{
"type": "TEXT_MESSAGE_CONTENT",
"messageId": "answer-1",
"delta": "设备告警需要先核对发生时间与采样记录。"
},
{
"type": "TEXT_MESSAGE_CONTENT",
"messageId": "answer-1",
"delta": "本段仅演示界面如何拼接文本事件。"
},
{
"type": "TEXT_MESSAGE_END",
"messageId": "answer-1"
},
{
"type": "RUN_FINISHED",
"threadId": "demo-thread",
"runId": "demo-text"
}
]运维助手:只读查询与结果展示
工具结果来自模拟记录;TOOL_CALL_END 仅代表参数结束,结果事件到达后才能显示查询返回。
[
{
"type": "RUN_STARTED",
"threadId": "demo-thread",
"runId": "demo-tool",
"protocolVersion": "1.0"
},
{
"type": "STATE_SNAPSHOT",
"snapshot": {
"device": "演示冷柜 A",
"mode": "只读模拟"
}
},
{
"type": "TOOL_CALL_START",
"toolCallId": "lookup-1",
"toolCallName": "lookup_alarm"
},
{
"type": "TOOL_CALL_ARGS",
"toolCallId": "lookup-1",
"delta": "{\"deviceId\":"
},
{
"type": "TOOL_CALL_ARGS",
"toolCallId": "lookup-1",
"delta": "\"demo-cabinet-a\"}"
},
{
"type": "TOOL_CALL_END",
"toolCallId": "lookup-1"
},
{
"type": "TOOL_CALL_RESULT",
"toolCallId": "lookup-1",
"messageId": "result-1",
"role": "tool",
"content": "{\"source\": \"模拟记录\", \"alarm\": \"温度偏高\", \"nextStep\": \"请现场人员核对探头与柜门\"}"
},
{
"type": "TEXT_MESSAGE_START",
"messageId": "answer-2",
"role": "assistant"
},
{
"type": "TEXT_MESSAGE_CONTENT",
"messageId": "answer-2",
"delta": "模拟查询已返回。建议生成待人工确认的排查清单,不下发设备指令。"
},
{
"type": "TEXT_MESSAGE_END",
"messageId": "answer-2"
},
{
"type": "RUN_FINISHED",
"threadId": "demo-thread",
"runId": "demo-tool"
}
]权限拒绝:终止本轮并保留错误
模拟后端拒绝写操作;没有真实授权校验或设备指令,失败后不能显示执行成功。
[
{
"type": "RUN_STARTED",
"threadId": "demo-thread",
"runId": "demo-error",
"protocolVersion": "1.0"
},
{
"type": "TOOL_CALL_START",
"toolCallId": "command-1",
"toolCallName": "request_setpoint_change"
},
{
"type": "TOOL_CALL_ARGS",
"toolCallId": "command-1",
"delta": "{\"deviceId\":\"demo-cabinet-a\",\"setpoint\":4}"
},
{
"type": "TOOL_CALL_END",
"toolCallId": "command-1"
},
{
"type": "RUN_ERROR",
"code": "PERMISSION_DENIED",
"message": "模拟后端拒绝:当前角色无写权限。未下发任何设备指令。"
}
]推荐阅读文章
建议先读首篇建立整体判断,再根据现场协议、部署方式、AI 能力或业务场景继续深入。