github: github.com/DaoxingHuan…
随着大模型(LLM)逐渐成为基础设施,“如何构建一个真正好用、可扩展、可产品化的 Chat UI”,已经成为前端和全栈开发者绕不开的问题。
Simple LLM Chat 正是围绕这一目标构建的一个现代化 LLM 聊天界面方案。它不仅是一个 Demo,而是一个从架构层面就考虑了 多端适配、流式通信、内容渲染、扩展能力和工程化 的完整解决方案。
本文将从产品能力、技术架构和扩展设计三个层面,系统解析这个项目。
一、项目定位:不只是一个聊天框
Simple LLM Chat 是一个基于 React + Tailwind CSS + TypeScript 构建的现代 LLM Chat UI,采用 Monorepo 架构,同时支持 PC Web 和 Mobile Web。
它的目标并不是“能聊天”,而是:
构建一个可以承载复杂 LLM 应用能力的 UI 基础设施
这意味着它天然适合用于:
-
内部 AI 工具
-
企业级 Copilot
-
垂直领域智能助手
-
LLM 产品原型与快速验证
二、核心能力概览
1️⃣ 多平台统一架构
项目从一开始就考虑了多端问题:
-
PC Web
-
侧边栏(会话 / 设置)
-
Artifact 面板(代码 / 内容输出)
-
更适合生产力场景
-
-
Mobile Web
-
针对触摸操作优化
-
响应式布局
-
更轻量的交互体验
-
👉 核心逻辑与 UI 组件高度复用,避免“两个项目两套逻辑”的维护成本。
2️⃣ 高级流式传输设计(Streaming First)
LLM 体验的关键在于“实时感”,Simple LLM Chat 在这一点上做了完整设计:
-
✅ 实时 Token 级流式响应
-
✅ 同时支持 SSE 与 WebSocket
-
✅ 可插拔的
StreamAdapter架构StreamAdapter ├── SSEAdapter ├── WebSocketAdapter └── CustomAdapter(可扩展)
这种设计让你可以:
-
无缝切换不同模型服务
-
兼容 OpenAI / 自建服务 / 本地模型
-
在不影响 UI 的情况下替换通信协议
3️⃣ 富内容渲染体系
LLM 的输出从来不只是纯文本。
Markdown 全能力支持
-
标题 / 列表 / 表格
-
链接 / 引用
-
内联样式
代码块体验优化
-
语法高亮
-
一键复制
-
适合开发者场景
Artifact 面板(非常关键)
对于 代码生成 / 长文本 / 结构化输出:
-
聊天区负责“对话”
-
Artifact 面板负责“结果展示”
👉 这是一种明显偏 Copilot / IDE 思路 的 UI 设计,而不是传统聊天工具。
4️⃣ 思考过程(Chain-of-Thought)可视化
项目支持将模型的 思维链 / 推理过程 独立展示:
-
默认折叠,避免干扰
-
可手动展开查看
-
非常适合:
-
调试 Prompt
-
教学 / 研究
-
复杂推理场景
-
这是一个对高级用户极其友好的能力。
5️⃣ 高度可配置的个性化设置
-
🌗 亮色 / 暗色主题
-
🤖 模型切换
-
🎯 使用模式切换
-
通用
-
开发者
-
创意写作
-
这些设置并不是“UI 点缀”,而是直接影响 Prompt 构造与模型行为。
三、真正的亮点:可扩展设计
1️⃣ Markdown 指令 → React 组件注入
这是整个项目最具想象力的设计之一。
你可以通过类似下面的语法:
::component-name[content]{prop="value"}
直接在 LLM 输出中 渲染真实的 React 组件。
内置示例
用户资料卡片
::user-profile[用户简介]{
name="张三"
role="开发工程师"
avatar="https://example.com/avatar.png"
bio="全栈开发者"
}
增强图片组件
::image-plus[图片描述]{
src="https://example.com/image.png"
name="图片名称"
info="详细信息"
link="https://example.com"
}
结构化数据列表
::data-list[项目状态]{
title="Q4 交付物"
data='[
{"title":"前端迁移","status":"已完成"},
{"title":"后端 API","status":"进行中"}
]'
}
👉 这使得 LLM 不再只是“生成文本”,而是“生成 UI”。
2️⃣ 提示词 DSL(# 触发器 + 胶囊 UI)
项目引入了一套 Prompt DSL + 标签化 UI 的设计:
-
输入
#即可触发 -
选择后以「胶囊 / 标签」形式展示
-
发送时自动拼接到 Prompt 前
示例:
-
#gen-image→ 图像生成 -
#search→ 搜索增强
这种方式相比“把所有提示写进文本框”:
-
✅ 更直观
-
✅ 更不易出错
-
✅ 更适合复杂指令组合
四、工程架构:Monorepo 的正确打开方式
项目采用 pnpm workspace + Monorepo 结构:
apps/
├── pc # PC Web 应用
└── mobile # Mobile Web 应用
packages/
├── core # 核心逻辑 & StreamAdapter
├── ui # Chat UI & Markdown 渲染
├── store # Zustand 状态管理
└── utils # 通用工具
这种拆分带来的好处:
-
逻辑与 UI 解耦
-
多端共享核心能力
-
包级别可独立发布
-
极其适合长期演进
对于正在做 AI 平台 / Copilot 产品 的团队来说,这是一个非常健康的工程结构。
五、快速上手
pnpm install
pnpm dev:pc # 启动 PC Web
pnpm dev:mobile # 启动 Mobile Web
构建:
pnpm build:all
六、总结:这是一个“为未来 LLM 产品准备的 UI”
Simple LLM Chat 的价值不在于:
“我能不能和模型聊天”
而在于:
“当 LLM 能力不断升级时,UI 是否还能承载新的交互范式