AI Elements 是一个基于 shadcn/ui 的可组合组件库,专为 AI 聊天界面构建。Conversation、Message、Tool、Reasoning 和 PromptInput 等组件可以直接放入任何 React 项目,并用少量胶水代码连接到 stream.messages。
克隆并运行完整 AI Elements 示例,在可运行项目中查看工具调用渲染、推理展示、流式消息等功能。

工作方式

  1. 将组件作为源文件安装:AI Elements 通过 CLI 分发,直接将组件添加到项目中(shadcn/ui registry 风格)
  2. 将消息映射到组件:遍历 stream.messages,将 HumanMessage 实例渲染为用户气泡,将 AIMessage 实例渲染为助手响应
  3. 组合更丰富的 UI:用 <Tool> 包裹工具调用,用 <Reasoning> 包裹推理,并用 <Conversation> 包裹所有内容以管理滚动

安装

通过 CLI 安装 AI Elements 组件。它们会作为可编辑源文件添加到你的项目中:

连接 useStream

直接从 stream.messages 渲染 AI Elements 组件。每个 LangChain BaseMessage 都会映射到一个组件:

最佳实践

  • 自由编辑源文件:组件会随项目分发,而不是作为外部包依赖,因此你可以无需 fork 就修改任何内容
  • 使用 MessageResponse 处理流式输出:它能正确处理流式局部 token;避免在流式传输期间直接渲染原始消息内容
  • 用 Conversation 包裹:Conversation 组件会管理滚动行为,使新消息自动滚动到视图中
  • 基于 isInstance 判断:使用 HumanMessage.isInstance(msg) 和 AIMessage.isInstance(msg),而不是检查 msg.getType(),以便正确进行 TypeScript 类型收窄