@ag-kit/ui-react 包提供了一个轻量级的React钩子和TypeScript类型,用于构建支持消息流式传输、带可选UI的工具调用以及Human-in-the-loop中断的Agent聊天界面。
安装
- 同级依赖:
zod(v3.25+ 或 v4) - 使用
fetch+ 服务器发送事件(SSE)。您的服务器端点必须流式传输与AG‑Kit兼容的事件。
快速开始
应用程序接口
useChat
用于聊天状态、流式传输、工具调用和中断的React钩子。- sendMessage形式:
sendMessage("text"):发送用户消息sendMessage({ toolCallId, content }):提交工具结果消息sendMessage({ interruptId, payload }):通过携带有效载荷从中断恢复
工具
使用zod创建强类型工具。工具可以声明为三种能力之一:handler、render或renderAndWaitForResponse。
useChat({ tools: [...] })。当服务器发出与提供的工具名称匹配的工具调用时:
- 如果工具具有
handler,它会在输入流式传输完成时自动运行,并将其结果作为工具消息发送。 - 如果工具具有
render,它将出现在uiMessages中,并带有可选的render()函数用于自定义UI。 - 如果工具具有
renderAndWaitForResponse,则提供submitToolResult回调以返回字符串结果,该结果将发送回Agent。
在UI中渲染工具调用
客户端工具调用注册与执行模式
- 自动运行(handler):提供带有
handler的工具。它将在input-available时自动执行并继续下一轮。 - 自处理运行(renderAndWaitForResponse):提供
renderAndWaitForResponse并调用submitToolResult("...")发送结果。 - 手动提交(仅UI工具):对于没有处理器的工具,使用
sendMessage({ toolCallId, content })手动提交结果。
uiToolCalls以显示进度/状态:
中断
通过interrupt选项为Human-in-the-loop审批/输入提供自定义渲染器。
uiMessages包含一个type: "interrupt"的部分。如果提供了renderWithResume UI,调用resume(payload)将继续对话。