AG-UI¶
AgUiBackend 基于官方 AG-UI kotlin-core 类型实现 AG-UI 1.x 客户端:以 POST 发送 RunAgentInput,通过 SSE 接收运行事件。Pydantic AI、LangGraph、CrewAI 和 Mastra 均可提供该协议;参考服务 的入口为 /api/agui。
ChatController(backend = { approver ->
AgUiBackend(
"https://agents.example.com/api/agui",
approver = approver,
tools = listOf(myDeviceTool), // frontend tools, run on the device
context = listOf("Client capabilities" to "…"), // RunAgentInput.context
)
}, scope = viewModelScope)
支持范围¶
- 前端工具:在
RunAgentInput.tools中声明tools。Agent 调用时,本次运行以待执行工具结束;设备执行工具(需要时先审批),下一次运行携带tool消息。 - 中断与人工参与:运行以
outcome: interrupt结束时向用户提问。有toolCallId时可批准、附理由拒绝或修改参数;恢复 payload 为{approved, reason?, editedArgs?},对应 AG-UI 的 approve-with-edits 模式和 Pydantic AI schema。没有工具 ID 而有responseSchema时,按 schema 生成表单并用回答恢复运行。恢复通过RunAgentInput.resume(携带 payload 的resolved或cancelled);超过expiresAt的中断不再显示。 - 子 Agent:
SUBAGENT_STARTED及携带subagentRunId的事件归入委派工具的嵌套运行,由Subagent显示。 - 共享状态:
STATE_SNAPSHOT/STATE_DELTA(JSON Patch)映射为state数据 part,下一轮作为RunAgentInput.state返回。状态中的plan或task显示为 Plan / Task 组件。 - 活动:
ACTIVITY_SNAPSHOT/ACTIVITY_DELTA映射为以activityType命名的数据 part;a2ui-surface活动通过 生成式 UI 渲染。 - 步骤 显示为 chain of thought;
RUN_FINISHED的 用量 用于ContextUsage。 - 模型上下文:MCP Apps 的
ui/update-model-context进入RunAgentInput.context。
扩展¶
使用协议自身的状态(JSON Patch)、活动、子 Agent、中断等扩展点,最后才考虑 CUSTOM 事件。