belt CLI スキルをインストール:
npx skills add belt-sh/cli
チャット UI コンポーネント
ui.inference.sh のチャット構築ブロック。

クイックスタート
# チャットコンポーネントをインストール
npx shadcn@latest add https://ui.inference.sh/r/chat.json
コンポーネント
チャットコンテナ
import { ChatContainer } from "@/registry/blocks/chat/chat-container"
<ChatContainer>
{/* ここにメッセージを配置 */}
</ChatContainer>
メッセージ
import { ChatMessage } from "@/registry/blocks/chat/chat-message"
<ChatMessage
role="user"
content="こんにちは、どのように手伝ってくれますか?"
/>
<ChatMessage
role="assistant"
content="多くのことをお手伝いできます!"
/>
チャット入力
import { ChatInput } from "@/registry/blocks/chat/chat-input"
<ChatInput
onSubmit={(message) => handleSend(message)}
placeholder="メッセージを入力..."
disabled={isLoading}
/>
タイピングインジケーター
import { TypingIndicator } from "@/registry/blocks/chat/typing-indicator"
{isTyping && <TypingIndicator />}
完全な例
import {
ChatContainer,
ChatMessage,
ChatInput,
TypingIndicator,
} from "@/registry/blocks/chat"
export function Chat() {
const [messages, setMessages] = useState([])
const [isLoading, setIsLoading] = useState(false)
const handleSend = async (content: string) => {
setMessages(prev => [...prev, { role: 'user', content }])
setIsLoading(true)
// API に送信...
setIsLoading(false)
}
return (
<ChatContainer>
{messages.map((msg, i) => (
<ChatMessage key={i} role={msg.role} content={msg.content} />
))}
{isLoading && <TypingIndicator />}
<ChatInput onSubmit={handleSend} disabled={isLoading} />
</ChatContainer>
)
}
メッセージのバリエーション
| ロール | 説明 |
|---|---|
user | ユーザーメッセージ(右寄せ) |
assistant | AI 応答(左寄せ) |
system | システムメッセージ(中央寄せ) |
スタイリング
コンポーネントは Tailwind CSS と shadcn/ui のデザイントークンを使用します:
<ChatMessage
role="assistant"
content="こんにちは!"
className="bg-muted"
/>
関連スキル
# 完全なエージェントコンポーネント(推奨)
npx skills add inference-sh/skills@agent-ui
# 宣言的ウィジェット
npx skills add inference-sh/skills@widgets-ui
# Markdown レンダリング
npx skills add inference-sh/skills@markdown-ui
ドキュメント
- エージェントとのチャット - チャットインターフェースの構築
- エージェント UX パターン - チャット UX のベストプラクティス
- リアルタイムストリーミング - 応答のストリーミング
コンポーネントドキュメント: ui.inference.sh/blocks/chat