chat-ui 从 ui.inference.sh 提供一套适用于 React/Next.js 的现成聊天界面组件,包括聊天容器、消息项、输入框、正在输入指示器以及头像。它帮助开发者快速实现现代聊天和 AI 助手界面,支持流式消息列表和输入处理。

Stars0
收藏0
评论0
收录时间2026年3月27日
分类前端开发
安装命令
npx skills add https://github.com/inferen-sh/skills --skill chat-ui
概览

概览

什么是 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.tsx
  • chat-message.tsx
  • chat-input.tsx
  • typing-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 用于展示单条消息,并根据角色(如 userassistant)进行区分。

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 数组,并将每条消息的 rolecontent 传给 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 tokensTailwind 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 路径下。随后即可根据文档中的路径导入 ChatContainerChatMessageChatInputTypingIndicator

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-containerchat-messagechat-inputtyping-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 在你项目中的具体结构,以及可以如何扩展或修改。

评分与评论

暂无评分
分享你的评价
登录后即可为这个技能评分并发表评论。
G
0/10000
最新评论
保存中...