概觀
什麼是 chat-ui?
chat-ui 是一組專為 React 與 Next.js 準備的聊天介面積木,來源為 ui.inference.sh。它將聊天容器、訊息項目、輸入框、輸入中指示器與頭像等元件打包成可供正式上線使用的組件,讓你不用從零開始,就能組裝出完整的聊天或 AI 助理前端。
這些元件以 shadcn 風格的 blocks 形式提供,你只要將它們加入專案,就能在熟悉且可客製的開發體驗下,讓版面與互動中重複繁瑣的聊天 UI 部分自動被處理好。
主要功能一覽
- 聊天容器版面 – 預先設計好的
<ChatContainer>元件,用來組構完整聊天區域。 - 訊息渲染 – 使用
<ChatMessage>顯示使用者與助理訊息,支援角色與內容設定。 - 聊天輸入處理 –
<ChatInput>用來接收使用者輸入文字、處理送出動作,以及管理 disabled/loading 狀態。 - 輸入中指示器 –
<TypingIndicator>在助理回應期間提供視覺回饋。 - 適合串流 – 訊息列表與容器模式設計上適用於串流與逐步回應的場景。
- 專注 React/Next.js – 為現代 React 與 Next.js 應用打造,符合常見前端開發模式。
chat-ui 適合哪些人?
chat-ui 主要適用於:
- 前端開發者:在既有 API 之上實作聊天或 AI 助理介面的開發人員。
- 產品團隊:希望擁有精緻聊天版面,但不想花好幾天綁 UI 的團隊。
- Next.js 與 React 開發者:習慣使用 shadcn-style UI blocks,並希望聊天元件也能維持一致風格的開發者。
如果你正在整合語言模型、客服機器人或內部工具,並仰賴對話式介面,chat-ui 技能可以協助你在保留邏輯、樣式與資料完全掌控權的前提下,快速打造專業的前端介面。
chat-ui 解決的問題
實作聊天前端通常會一再重複建構相同的元件:
- 建出具回應式設計的聊天版面
- 區分並呈現使用者與助理訊息的不同樣式
- 處理訊息送出、禁用狀態與載入狀態
- 顯示輸入中指示器並維持捲動行為
chat-ui 透過以下方式處理 UI 這一段:
- 提供 容器、訊息、輸入與輸入中指示器 等預先定義的元件
- 提供一致的 API 介面,便於串接你的後端或 AI 服務
- 提供符合現代設計預期的起始點,同時保留高度客製空間
你仍完全掌握商業邏輯與資料流程,只是可以跳過大量樣板式的 UI 工程。
何時適合使用 chat-ui
在以下情況很適合使用 chat-ui:
- 你正在開發 React 或 Next.js 應用程式。
- 你希望有 可直接使用的聊天元件,能與既有的 state 與 API 呼叫整合。
- 你已經有,或計畫建立一個 聊天或 AI 助理後端,需要一層前端介面。
- 你偏好 以組件為中心的掌控度,而不是嵌入一個完整的 chat SaaS 小工具。
特別適用於:
- 嵌入在儀表板中的 AI copilot 或助理
- 客戶支援或內部服務台工具
- 具對話介面的開發者工具
- 快速原型開發新的聊天產品
何時 chat-ui 可能不適合
以下情況 chat-ui 可能不是最佳選擇:
- 你 沒有使用 React 或 Next.js。這些元件是為 React 生態系打造的。
- 你需要的是 託管式、一插即用的聊天小工具,包含後端、驗證與儲存功能。chat-ui 專注在前端 UI。
- 你希望使用 不偏向任何設計系統、且不採用 shadcn 風格的實作。
這類需求可考慮選擇一般 UI 函式庫或一站式聊天服務供應商。
使用方式
安裝前準備
在安裝 chat-ui 之前,你應該先具備:
- 已建立好的 React 或 Next.js 專案
- 已安裝 Node.js 與 npm(或相容工具)
- 對於匯入與使用 React components 有基本熟悉度
chat-ui 元件透過 ui.inference.sh 上的 shadcn-style 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 設定有所差異,但匯入寫法會依照下方範例的模式進行。
### 核心元件與基本用法
#### 1. ChatContainer – 整體版面配置
`ChatContainer` 負責包住整個對話區域,決定訊息與輸入框如何排列。
```tsx
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 callback 與你的送訊邏輯串接。disabled prop 很適合在等待回應期間使用,尤其是當你從 AI 模型串流 tokens 時。
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-style blocks 的形式從 ui.inference.sh 匯入,你通常可以:
- 在本地 檢視並編輯元件原始碼,微調版面、色彩或字型。
- 與既有的 設計 tokens 或 Tailwind CSS 設定整合。
- 透過額外的 props 或 wrapper 擴充元件,加入頭像、時間戳記或訊息動作等功能。
安裝指令執行完後,檢查專案中產生的檔案,了解元件實際實作方式,並評估如何最佳地與你的設計系統整合。
常見問題(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 路徑下。之後你就可以依照說明使用對應的 import 路徑匯入 ChatContainer、ChatMessage、ChatInput 與 TypingIndicator。
chat-ui 可以在沒有 Next.js、只有純 React 的專案中使用嗎?
可以,chat-ui 元件本質上是標準 React components。只要你的環境支援 React,就可以在純 React SPA 中整合。重點是能順利執行 npx shadcn@latest add ... 指令,並讓你的打包工具正確解析產生出來的 import 路徑。
chat-ui 是否內建後端或 AI 邏輯?
沒有。chat-ui 僅提供 前端 UI 元件。你需要自行負責:
- 管理
messages狀態 - 呼叫你的後端、API 或 AI 模型
- 處理串流、錯誤與身份驗證
這樣的分工讓 chat-ui 具有高度彈性:你可以搭配任何聊天後端,從自建 API 到第三方 AI 平台都可以。
可以自訂 chat-ui 元件外觀嗎?
可以。透過 ui.inference.sh registry 匯入的元件是存放在你專案內的 React components。你可以開啟對應檔案(例如 chat-container、chat-message、chat-input 與 typing-indicator),並進行:
- 調整版面與間距
- 修改顏色、字型與邊框
- 加入額外 UI 元素,如頭像、時間戳記或訊息狀態
由於你擁有原始碼,因此在樣式上完全沒有綁定限制。
chat-ui 是否適合用來打造 AI 助理與 copilot?
很適合。chat-ui 天然就是為 AI 助理、copilot 和類似的對話式工具設計。它提供:
- 彈性的聊天容器與訊息呈現方式
- 適合串流回應的輸入與輸入中指示器元件
你只需要把這些元件串接到 AI 後端,在 state 中處理串流或逐步更新,剩下的使用者介面就交由 chat-ui 負責。
什麼情況下應該選擇其他方案,而不是 chat-ui?
可以考慮其他方案的情境包括:
- 你需要的是 全託管的聊天小工具(同時提供 UI、後端、資料庫與驗證),且希望工程投入最小化。
- 你的技術棧 不是基於 React(例如 Vue、Svelte,或不使用 React 的純伺服器渲染)。
- 你想要與特定後端產品高度耦合、深度整合的元件。
在這些情況下,專門的聊天平台或針對你框架的 UI 函式庫可能更合適。
要到哪裡了解更多 chat-ui 元件資訊?
在此技能中,主要參考文件是 SKILL.md,其中整理了可用元件與使用範例程式碼。安裝之後,你本機專案中的元件檔案會是最實用的參考來源,因為它們直接呈現 chat-ui blocks 在你的專案中是如何實作、以及你可以如何擴充或修改它們。
