AG-UI Headless UI 接入
@cloudbase/agent-react-core 提供在 React 应用中接入 AG-Kit 对话能力所需的核心 API,可用于快速对接符合 AG-UI 协议的 AI Agent。
功能概览
- 聊天状态管理
- 消息发送与中止
- 会话线程切换
- 客户端工具注册
- 自定义 Tool Call 渲染
- 传输层接入
安装
npm install @cloudbase/agent-react-core
快速开始
推荐先使用 AgKit 初始化运行时,再在子组件中通过 useChat 读取消息和发送内容。
import cloudbase from "@cloudbase/js-sdk";
import { AgKit, CloudBaseTransport, useChat } from "@cloudbase/agent-react-core";
const app = cloudbase.init({ env: "your-env-id" });
const transport = new CloudBaseTransport({
app,
agentId: "your-agent-id",
});
function ChatView() {
const { uiMessages, sendMessage, streaming, abort } = useChat();
return (
<div>
<button onClick={() => sendMessage("你好")}>发送</button>
<button onClick={abort} disabled={!streaming}>
停止
</button>
{uiMessages.map((message) => (
<div key={message.id}>
<strong>{message.role}:</strong> {message.content}
</div>
))}
</div>
);
}
export function App() {
return (
<AgKit transport={transport}>
<ChatView />
</AgKit>
);
}
API 参考
AgKit
AgKit 用于初始化聊天运行时,并向子组件提供上下文。
AgKitProps
| 选项 | 必填 | 类型 | 说明 |
|---|---|---|---|
transport | 是 | Transport | 传输层实例,负责把消息发送到后端并消费事件流 |
defaultThreadId | 否 | string | 首次初始化时使用的默认线程 ID,仅在运行时初始化时生效 |
instanceId | 否 | string | 多聊天实例场景下用于隔离状态的实例标识 |
children | 是 | React.ReactNode | 子组件 |
示例
<AgKit transport={transport} defaultThreadId="thread-001">
<ChatView />
</AgKit>
useChat
useChat 提供聊天过程中的核心状态和操作方法。
入参 UseChatOptions
| 选项 | 必填 | 类型 | 说明 |
|---|---|---|---|
instanceId | 否 | string | 多实例场景下的实例标识,用于关联特定的 AgKit 实例 |
返回值 UseChatReturn
| 选项 | 类型 | 说明 |
|---|---|---|
messages | Message[] | 底层原始消息数据 |
uiMessages | UIMessage[] | 适合直接渲染的消息列表(合并连续 assistant 消息,支持 parts 结构) |
streaming | boolean | 是否正在流式响应 |
error | AGUIClientError | null | 当前错误状态 |
initialized | boolean | 运行时是否已完成初始化 |
actions | Record<string, Action> | 当前已注册的工具(Action)字典 |
sendMessage | (input: string | ToolMessage) => Promise<void> | 发送文本消息或工具消息 |
clearMessages | () => void | 清空所有消息 |
addAction | (action: Action) => void | 注册一个 Action |
removeAction | (actionName: string) => void | 按名称移除一个 Action |
switchThread | (threadId: string, options?: SwitchThreadOptions) => void | 切换会话线程 |
abort | () => void | 中止当前请求 |
SwitchThreadOptions
| 选项 | 必填 | 类型 | 说明 |
|---|---|---|---|
clearMessages | 否 | boolean | 切换线程时是否清空当前消息 |
abortActiveRun | 否 | boolean | 切换线程时是否中止正在进行的请求 |
示例
function ChatActions() {
const { uiMessages, sendMessage, streaming, abort, clearMessages } = useChat();
return (
<div>
<button onClick={() => sendMessage("介绍一下 AG-Kit")}>发送消息</button>
<button onClick={abort} disabled={!streaming}>
停止生成
</button>
<button onClick={clearMessages}>清空消息</button>
{uiMessages.map((message) => (
<div key={message.id}>{message.content}</div>
))}
</div>
);
}
useHeadlessChat
useHeadlessChat 是 useChat 的独立版本,无需 AgKit Provider 即可使用,适合需要完全控制运行时生命周期的场景。
入参 UseHeadlessChatOptions
| 选项 | 必填 | 类型 | 说明 |
|---|---|---|---|
transport | 是 | Transport | 传输层实例 |
threadId | 否 | string | 初始线程 ID |
instanceId | 否 | string | 多实例场景下的实例标识 |
返回值
与 useChat 返回值一致,参见 UseChatReturn。