概览
什么是 chat-ui?
chat-ui 是一组用于 React 和 Next.js 的聊天界面积木,来自 ui.inference.sh。它打包了可直接用于生产环境的组件,例如聊天容器、消息列表项、输入框、正在输入指示器以及头像,让你无需从零开始就能拼装出完整的聊天或 AI 助手前端界面。
这些组件以 shadcn 风格的 blocks 形式提供,你可以直接添加到项目中,在获得熟悉且易于定制的开发体验的同时,把聊天 UI 布局和行为中的重复工作交给它处理。
关键特性一览
- 聊天容器布局 – 提供现成的
<ChatContainer>组件,搭好完整聊天区域的结构。 - 消息渲染 – 使用
<ChatMessage>展示用户和助手消息,支持角色和内容配置。 - 聊天输入处理 –
<ChatInput>用于捕获用户文本、处理提交动作,并管理禁用/加载状态。 - 正在输入指示器 –
<TypingIndicator>在助手回复期间提供可视化反馈。 - 流式响应友好 – 消息列表与容器模式适合用于流式和增量式助手响应。
- 聚焦 React/Next.js – 专为现代 React 和 Next.js 应用设计,契合常见前端开发模式。
谁适合使用 chat-ui?
chat-ui 主要面向:
- 前端开发者:在现有 API 之上构建聊天或 AI 助手界面。
- 产品团队:希望快速获得精致的聊天布局,而不是花上几天时间在 UI 拼接上。
- Next.js 和 React 开发者:已经在使用 shadcn 风格的 UI blocks,并希望有一套风格统一的聊天组件。
如果你正在集成大语言模型、客服机器人,或依赖对话界面的内部工具,chat-ui 技能可以帮你快速搭建起专业的界面,同时保留对业务逻辑、样式和数据的完全控制权。
chat-ui 解决了哪些问题?
实现一个聊天前端通常意味着反复造同一批轮子:
- 搭建响应式的聊天布局
- 区分展示用户与助手的不同消息样式
- 处理消息提交、禁用状态和加载状态
- 展示“正在输入”提示并维护滚动行为
chat-ui 在 UI 层面提供了解法:
- 为 容器、消息、输入和正在输入状态 提供预定义组件
- 提供统一的 API 接口,方便连接你的后端或 AI 服务
- 在保持可定制性的前提下,给出符合现代设计预期的起点
业务逻辑和数据流仍由你掌控,但可以跳过大量样板 UI 工作。
什么时候适合使用 chat-ui
在以下场景优先考虑 chat-ui:
- 你正在构建一个 React 或 Next.js 应用。
- 你需要 可直接使用的聊天组件,并要与现有状态管理和 API 调用集成。
- 你已经有(或计划拥有)一个 聊天或 AI 助手后端,现在需要一层前端界面。
- 你更倾向于 组件级控制,而不是嵌入一个完整的聊天 SaaS 小挂件。
它尤其适合用在:
- 嵌入到各类控制台(dashboard)的 AI copilot/助手
- 客服系统或内部工单/帮助台工具
- 带有对话界面的开发者工具
- 快速原型开发新的聊天类产品
什么时候 chat-ui 可能不太合适
在以下情况中,chat-ui 可能不是最佳选择:
- 你 并未使用 React 或 Next.js。这些组件是专为 React 生态构建的。
- 你希望有一个 托管式、开箱即用的聊天小挂件,包含后端、鉴权和存储。chat-ui 只聚焦前端 UI。
- 你更偏好 与设计系统无关、不遵循 shadcn 风格的实现方式。
这种情况下,可以考虑通用 UI 库或一站式聊天服务商。
使用方法
安装前提条件
在安装 chat-ui 之前,你应该已经具备:
- 一个已创建好的 React 或 Next.js 项目
- 已安装 Node.js 和 npm(或兼容工具)
- 对导入和使用 React 组件有基本了解
chat-ui 组件通过 ui.inference.sh 上的 shadcn 风格 registry 分发,你可以通过一条 CLI 命令将它们添加到项目中。
安装 chat-ui 组件
在前端项目根目录运行下面的命令,将聊天组件添加进来:
# Install chat components
npx shadcn@latest add https://ui.inference.sh/r/chat.json
该命令会从 ui.inference.sh 的 registry 拉取所有与聊天相关的 blocks 到你的项目中。通常会在类似 @/registry/blocks/chat/ 的路径下创建条目(示例代码中的 import 路径会体现这一点)。
安装完成后,检查你的项目中是否包含类似以下文件:
chat-container.tsxchat-message.tsxchat-input.tsxtyping-indicator.tsx
具体文件名可能会根据你的 shadcn 配置略有不同,但 import 方式会保持与下方示例一致。
核心组件与基础用法
1. ChatContainer – 整体布局
ChatContainer 用于包裹整个对话区域,负责组织消息和输入框的整体布局。
import { ChatContainer } from "@/registry/blocks/chat/chat-container"
function Chat() {
return (
<ChatContainer>
{/* messages and input go here */}
</ChatContainer>
)
}
你可以在 ChatContainer 内嵌入消息列表、输入框及其他 UI 元素,把它当作聊天体验的基础布局容器即可。
2. ChatMessage – 渲染用户与助手消息
ChatMessage 用于展示单条消息,并根据角色(如 user 和 assistant)进行区分。
import { ChatMessage } from "@/registry/blocks/chat/chat-message"
function Messages({ messages }) {
return (
<div>
{messages.map((message) => (
<ChatMessage
key={message.id}
role={message.role}
content={message.content}
/>
))}
</div>
)
}
你需要自行管理 messages 数组,并将每条消息的 role 和 content 传给 ChatMessage。这样可以保证 UI 与你的后端或 AI 模型状态保持同步。
3. ChatInput – 接收并提交用户消息
ChatInput 提供文本输入区域和提交逻辑的封装。
import { ChatInput } from "@/registry/blocks/chat/chat-input"
function ChatBox({ onSend, isLoading }) {
return (
<ChatInput
onSubmit={(message) => onSend(message)}
placeholder="Type a message..."
disabled={isLoading}
/>
)
}
通过 onSubmit 回调把组件接入你的发消息逻辑。disabled 属性在等待响应时尤其有用,特别是在从 AI 模型进行 token 流式输出的场景。
4. TypingIndicator – 展示助手正在输入
TypingIndicator 用于告知用户助手或对话对方正在输入回复。
import { TypingIndicator } from "@/registry/blocks/chat/typing-indicator"
function Footer({ isTyping }) {
return <>{isTyping && <TypingIndicator />}</>
}
根据应用状态设置 isTyping,例如在等待服务器响应或进行流式补全时开启。
组合示例:一个简单的聊天流程
下面是一个在 React 或 Next.js 页面中组合这些组件的简化示例:
import { useState } from "react"
import { ChatContainer } from "@/registry/blocks/chat/chat-container"
import { ChatMessage } from "@/registry/blocks/chat/chat-message"
import { ChatInput } from "@/registry/blocks/chat/chat-input"
import { TypingIndicator } from "@/registry/blocks/chat/typing-indicator"
export function ChatPage() {
const [messages, setMessages] = useState([])
const [isTyping, setIsTyping] = useState(false)
async function handleSend(userMessage) {
const nextMessages = [
...messages,
{ id: Date.now(), role: "user", content: userMessage },
]
setMessages(nextMessages)
setIsTyping(true)
// Call your backend or AI service here
const reply = await fetch("/api/chat", {
method: "POST",
body: JSON.stringify({ messages: nextMessages }),
}).then((res) => res.json())
setMessages((prev) => [
...prev,
{ id: Date.now() + 1, role: "assistant", content: reply.content },
])
setIsTyping(false)
}
return (
<ChatContainer>
<div>
{messages.map((message) => (
<ChatMessage
key={message.id}
role={message.role}
content={message.content}
/>
))}
</div>
<ChatInput
onSubmit={handleSend}
placeholder="Ask me anything..."
disabled={isTyping}
/>
{isTyping && <TypingIndicator />}
</ChatContainer>
)
}
这个示例展示了 chat-ui 如何专注于 UI 原子组件,而状态管理和 API 集成则由你来实现。
自定义与样式
由于 chat-ui 组件以 shadcn 风格 blocks 的形式从 ui.inference.sh 引入,你通常可以:
- 在本地 查看并编辑组件源码,以调整布局、颜色或排版。
- 与现有的 design tokens 或 Tailwind CSS 配置集成。
- 通过增加 props 或封装组件,扩展头像、时间戳、消息操作等能力。
安装命令运行完成后,建议先查看项目中生成的组件文件,了解组件的具体实现方式,并据此决定如何与现有设计系统对齐。
常见问题(FAQ)
如何在已有的 React 或 Next.js 项目中安装 chat-ui?
在项目根目录运行 shadcn CLI 命令:
npx shadcn@latest add https://ui.inference.sh/r/chat.json
这会把来自 ui.inference.sh 的 chat-ui 组件添加到你的代码仓库中,通常位于 registry/blocks/chat 路径下。随后即可根据文档中的路径导入 ChatContainer、ChatMessage、ChatInput 和 TypingIndicator。
chat-ui 能在纯 React(非 Next.js)项目中使用吗?
可以。chat-ui 组件本质上是标准 React 组件。只要你的运行环境支持 React,就可以在纯 React SPA 中集成。关键是需要能够运行 npx shadcn@latest add ... 命令,并确保打包工具可以正确解析生成的 imports。
chat-ui 是否包含任何后端或 AI 逻辑?
不包含。chat-ui 只提供 前端 UI 组件。你需要自行负责:
- 管理
messages状态 - 调用你的后端、API 或 AI 模型
- 处理流式传输、错误和身份认证
这种前后端分离的方式让 chat-ui 更灵活:可以搭配任意聊天后端使用,从自建 API 到第三方 AI 平台均可。
我可以自定义 chat-ui 组件的外观吗?
可以。通过 ui.inference.sh registry 引入的组件会以常规 React 组件形式存放在你的项目中。你可以打开对应文件(例如 chat-container、chat-message、chat-input 和 typing-indicator),并进行:
- 布局和间距调整
- 颜色、字体和边框修改
- 集成头像、时间戳、消息状态等额外 UI 元素
由于源码在你手里,样式层面没有任何锁定。
chat-ui 适合用来构建 AI 助手或 copilot 吗?
非常适合。chat-ui 与 AI 助手、copilot 等对话式工具天然契合,它提供:
- 灵活的聊天容器和消息展示
- 适用于流式回复的输入框和正在输入指示组件
你只需将这些组件与 AI 后端连接起来,在状态管理中处理流式或增量更新,chat-ui 就能负责用户可见的界面部分。
在什么情况下我应该选择其他解决方案,而不是 chat-ui?
可以考虑其他方案的情况包括:
- 你需要 完全托管的聊天小挂件(UI + 后端 + 数据库 + 鉴权),并希望尽量少写代码。
- 你的技术栈 不是基于 React(如 Vue、Svelte 或完全不使用 React 的服务器渲染)。
- 你希望使用与某个后端产品深度耦合的组件库。
这类场景下,专门的聊天平台或与所用框架匹配的 UI 库可能更合适。
在哪里可以进一步了解 chat-ui 组件?
在该技能内,主要参考文档是 SKILL.md,其中列出了可用组件及使用示例代码片段。安装完成后,本地生成的组件文件则是更直接的文档来源,它们会展示 chat-ui blocks 在你项目中的具体结构,以及可以如何扩展或修改。
