Files
xianren_studio/docs/LMStudio类Windows桌面软件_产品技术方案.md
T

316 lines
16 KiB
Markdown
Raw Normal View History

# LM Studio 类 Windows 桌面软件 —— 产品与技术方案
版本:v0.1(评审稿)
日期:2026-08-13
状态:待确认决策点后进入 Phase 0
---
## 0. 摘要
本项目目标是在 Windows 上打造一款对标 LM Studio 的本地大模型桌面应用:用户可以浏览与下载开源模型(GGUF 格式),在本机 CPU/GPU 上运行推理,获得流畅的聊天体验,并通过本地 OpenAI 兼容 API 将模型能力开放给其他工具。
本方案的核心推荐:
- 桌面框架:**Tauri 2 + Rust + React**(轻量、内存占用低、Rust 与推理引擎集成自然)
- 推理引擎:**llama.cpp 官方 llama-server 子进程**GGUF 事实标准,CPU/CUDA/Vulkan 全覆盖,省去自研推理内核)
- 数据存储:**SQLite + sqlite-vec**(应用元数据 + 向量检索)
- 模型源:**Hugging Face + ModelScope 双源**,支持国内镜像与本地导入
- 首发范围:纯 Windows,架构保留跨平台空间
---
## 1. 产品定位
### 1.1 一句话定位
一个 Windows 上的"本地大模型工作站":管模型、跑模型、用模型(聊天 + API + 知识库)。
### 1.2 目标用户
- **AI 开发者/工程师**:快速尝试不同开源模型、调试提示词、把本地模型接入自己的工具链(通过 OpenAI 兼容 API)。
- **数据敏感/科研用户**:数据不出本机,有隐私与合规诉求。
- **AI 爱好者**:低门槛体验本地模型,不需要命令行。
### 1.3 对标与差异化
| 维度 | LM Studio | 本产品(建议) |
| --- | --- | --- |
| 模型源 | Hugging Face | HF + ModelScope + 国内镜像 |
| 资源占用 | Electron,内存 300MB+ | Tauri,目标内存 < 200MB,安装包 < 150MB |
| 中文体验 | 一般 | 中文界面/文档/热门模型推荐 |
| RAG | 基础 | 内置本地文档知识库 |
| 扩展性 | 有限 | 预留插件机制(P2) |
---
## 2. 功能规划
### 2.1 P0 —— MVP(必须)
| 模块 | 说明 |
| --- | --- |
| 模型库 | 浏览/搜索/筛选 HF 与 ModelScope 的 GGUF 模型;量化版本列表;一键安装/更新/删除 |
| 下载管理 | 多分片断点续传、进度/速度展示、暂停恢复、SHA256 校验、磁盘空间预检 |
| 聊天 | 多会话、流式输出、Markdown/代码高亮、停止/重新生成、系统提示词、采样参数 |
| 推理引擎 | llama.cppCPU / CUDA / Vulkan 后端自动检测;GPU 层数、上下文长度可调 |
| 设置 | 模型目录、后端选择、显存/内存展示、主题、语言 |
| 本地模型导入 | 选择本地 GGUF 文件直接导入 |
### 2.2 P1(第二阶段)
- OpenAI 兼容 API 服务(`/v1/models``/v1/chat/completions``/v1/embeddings`SSE 流式)
- 提示词/角色模板库
- 会话导出与导入(JSON / Markdown
- 结构化输出(JSON Schema / grammar
- 多模型并发(双模型槽位)
### 2.3 P2(第三阶段)
- **RAG 知识库**:文档导入(PDF/Word/Markdown/TXT)、分块、本地嵌入模型、向量检索、带引用的回答
- 视觉模型支持(多模态输入)
- 本地语音(whisper.cpp
- LoRA / 适配器加载
- 插件系统
### 2.4 非目标(当前阶段不做)
- 云端模型托管/训练
- 移动端
- 模型微调训练(仅支持加载现成适配器)
---
## 3. 总体架构
### 3.1 架构总览
```
┌──────────────────────────────────────────────────────────────┐
│ UI 层(WebView2
│ React 18 + TypeScript + Tailwind + shadcn/ui │
│ 模型库 / 聊天 / 下载 / API 服务 / 设置 │
└───────────────▲──────────────────────────────────────────────┘
│ Tauri IPCinvoke / events
┌───────────────┴──────────────────────────────────────────────┐
│ 应用核心层(Rust) │
│ ├ 命令路由与状态管理 │
│ ├ 模型注册表(SQLite) │
│ ├ 下载管理器(tokio + reqwest,分片断点续传) │
│ ├ 会话 / 提示词管理 │
│ ├ 本地 API 服务(axumOpenAI 兼容) │
│ └ 引擎生命周期管理(spawn / monitor / restart
└───────────────▲──────────────────────────────────────────────┘
│ HTTP127.0.0.1 随机端口,仅本机)
┌───────────────┴──────────────────────────────────────────────┐
│ 推理引擎(llama.cpp llama-server 子进程) │
│ 每模型一个进程;CPU / CUDA / Vulkan 后端 │
│ 流式输出 / 采样 / grammar / embeddings │
└──────────────────────────────────────────────────────────────┘
```
### 3.2 进程模型(关键设计决策)
- **推理引擎独立子进程**:llama.cpp 偶发崩溃不会拖垮 UI;支持多模型并发;可随时重启引擎而不重启应用。
- 引擎只监听 `127.0.0.1` 随机端口,默认不对外暴露。
- 主进程做监管:健康检查、异常自动重启、退出时优雅关闭。
### 3.3 数据流(以"发送一条消息"为例)
1. UI 提交消息 → Rust 命令 → 存入 SQLite。
2. Rust 组装请求(系统提示词 + 历史 + 采样参数)→ 调用对应模型的引擎 `/v1/chat/completions``stream=true`)。
3. 引擎逐 token 返回 SSE → Rust 转发为 Tauri 事件 → UI 增量渲染。
4. 完成/中断 → 更新会话 token 统计 → UI 刷新。
---
## 4. 技术选型
### 4.1 桌面框架对比
| 方案 | 优势 | 劣势 | 结论 |
| --- | --- | --- | --- |
| **Tauri 2**(推荐) | 安装包小、内存低、Rust 后端与引擎集成天然 | 依赖 WebView2Win10/11 自带)、Rust 团队门槛 | ✅ 首选 |
| Electron | 生态最成熟、招人容易(LM Studio 同款) | 内存 300MB+、安装包 100MB+ | 备选 |
| WPF / WinUI 3 | 原生 Windows 体验 | 迭代慢、跨平台难 | 不推荐 |
| Qt / QML | 性能好、跨平台 | 许可与 UI 生态成本 | 不推荐 |
### 4.2 推理引擎
| 方案 | 优势 | 劣势 | 结论 |
| --- | --- | --- | --- |
| **llama.cpp**(推荐) | GGUF 事实标准;CUDA/Vulkan/ROCm/CPU 全覆盖;社区最活跃 | 需要持续跟进上游版本 | ✅ 选用 |
| ONNX Runtime + DirectML | Windows 原生 | LLM 聊天与量化生态弱 | 仅辅助 |
| MLC LLM | 编译优化好 | 工具链复杂、生态小众 | 不选 |
| vLLM | 高吞吐服务端 | Windows 部署重、不适合桌面 | 不选 |
**具体集成方式**:直接复用 llama.cpp 官方 `llama-server`,由 Rust 核心层作为子进程拉起。它已内置 OpenAI 兼容 API、grammar / JSON Schema、embeddings、健康检查与 metrics,能省去自研推理 IPC 的大量工作,并持续跟随上游修复。每个模型实例一个进程。
### 4.3 推荐技术栈清单
| 层次 | 选型 |
| --- | --- |
| 桌面壳 | Tauri 2Rust 1.8x |
| 前端 | React 18 + TypeScript + Vite + Tailwind CSS + shadcn/ui + Zustand |
| Markdown 渲染 | react-markdown + remark-gfm + shiki 代码高亮 |
| 应用后端 | Rusttokio、axum、reqwest、rusqlite、serde、tracing |
| 推理引擎 | llama.cppllama-server),构建矩阵:CPU + CUDA 12 + Vulkan |
| 数据库 | SQLite(元数据)+ sqlite-vec(向量检索,P2 |
| 下载 | reqwest 多分片 Range 下载 + SHA256 校验 |
| 模型源 | Hugging Face Hub API + ModelScope API;支持镜像切换 |
| 自动更新 | Tauri UpdaterNSIS/MSI + 代码签名) |
| 测试 | Rust 单测 + 集成测试(小 GGUF+ Playwright E2E |
---
## 5. 核心模块设计
### 5.1 模型注册表(SQLite
- `models` 表:repo_id、sourcehf/modelscope)、文件路径、量化等级、大小、SHA256、状态、元数据(参数量/上下文/License)、安装时间。
- 元数据展示:参数量、量化等级、上下文长度、显存/内存估算、License。
- 操作:安装、升级、删除(先进回收站)、导入本地文件。
### 5.2 下载管理器
- 流程:解析 repo 文件列表 → 获取直链 → 磁盘空间预检 → 多分片并行下载(每片 4–16MB)→ `.part` 临时文件 → 校验 → 原子改名。
- 断点续传:记录已完成分片,重启应用后自动恢复。
- 镜像切换:HF 失败自动重试 / 手动切换 hf-mirror 或 ModelScope。
- 安全:校验 SHA256,拒绝不匹配文件。
### 5.3 推理引擎管理
- 启动:读取模型配置 → 选择后端(CUDA > Vulkan > CPU)→ 估算默认 offload 层数 → 拉起 llama-server。
- 运行时监控:tok/s、显存/内存占用、上下文使用率。
- 参数控制:temperature、top_p、top_k、repeat_penalty、max_tokens、context_length。
- 结构化输出:JSON Schema 转 GBNF grammar。
- 多模型:每模型一个进程,默认允许 1–2 个并发,内存不足时给出提示。
### 5.4 会话与聊天
- 数据表:`conversations` / `messages`role、content、tokens、耗时)。
- 上下文管理:超过 context_length 时先做滑动截断(P2 升级为自动摘要)。
- 渲染:流式 Markdown、代码高亮、复制按钮、tok/s 与耗时展示。
- 能力:停止生成、重新生成、编辑上一条、多分支会话(P1)。
### 5.5 本地 API 服务
- axum 实现 `/v1/models``/v1/chat/completions``/v1/completions``/v1/embeddings`
- 默认仅监听 `127.0.0.1`,可配置端口与 API Key;默认关闭 CORS。
- API 请求使用独立上下文,不与 UI 会话互相污染。
- 内置快速测试面板。
### 5.6 设置与硬件检测
- 启动时枚举:GPU 型号、显存、驱动版本、CUDA/Vulkan 可用性。
- 模型内存估算:模型文件大小 + KV cache 估算,指导用户选择量化与 offload。
### 5.7 RAGP2 设计要点)
- 文档解析:PDFpdfium)、docx、md、txt;分块采用 text-splitter(按结构 300500 tokens,带重叠)。
- 嵌入:本地 bge-m3 / nomic-embed-textllama.cpp embeddings)。
- 检索:sqlite-vec 近似最近邻 + BM25 混合召回,重排后拼入提示词。
- 引用:回答附来源文档与页码。
---
## 6. 关键技术难点与对策
| 难点 | 对策 |
| --- | --- |
| Windows 多 GPU 后端 | 预编译 CPU/CUDA/Vulkan 三套引擎;运行时检测驱动;用户可手动指定 |
| AMD / Intel GPU | Vulkan 兜底;保留 ROCm 实验通道 |
| 下载稳定性 / 大文件 | 分片断点续传、SHA256 校验、镜像切换、磁盘预检 |
| llama.cpp 崩溃 | 子进程隔离 + 监管自动重启 + 本地崩溃日志 |
| 流式体验 | SSE 直通 + 前端增量渲染;首 token 延迟埋点 |
| 中国网络环境 | ModelScope 直连 + HF 镜像 + 本地模型导入 |
| 安装分发 | WebView2 引导安装、NSIS/MSI、代码签名、自动更新 |
| 数据安全 | 全部本地存储;API 默认仅本机;遥测默认关闭 |
---
## 7. 工程化与质量
### 7.1 仓库结构(建议 monorepo
```
apps/desktop # Tauri 壳
crates/core # 业务核心(模型注册表、会话)
crates/engine # 引擎生命周期管理
crates/download # 下载管理器
crates/api # OpenAI 兼容 API 服务
ui/ # React 前端
scripts/ # llama.cpp 构建脚本、打包脚本
models/ # 测试用迷你模型
```
### 7.2 CI/CD 与质量
- GitHub Actions Windows 矩阵:CPU / CUDA / Vulkan 构建缓存;nightly 自动构建;release 签名发布。
- 测试:核心逻辑单测;下载管理器用本地 mock HTTP 测断点续传;引擎集成测试用 0.5B 小模型;GPU 冒烟测试矩阵。
- 日志:Rust tracing 滚动日志,支持一键导出诊断包。
---
## 8. 里程碑与排期
| 阶段 | 内容 | 周期 |
| --- | --- | --- |
| Phase 0 技术验证 | Tauri 骨架、llama.cpp 编译、llama-server 集成、单文件下载 | 12 周 |
| Phase 1 MVP | 模型库、下载、聊天、引擎管理、设置 | 8–10 周 |
| Phase 2 生态 | API 服务、提示词库、结构化输出、多模型 | 4–6 周 |
| Phase 3 RAG | 文档知识库、嵌入、检索、引用 | 6–8 周 |
| Phase 4 进阶 | 多模态、语音、插件、对比评测 | 持续迭代 |
人员配置建议:Rust 后端/引擎集成 1 人 + 前端 1 人 + ML 顾问 0.5 人 + 设计/测试 0.5 人 → MVP 约 2.5–3 个月;单人全职约 4–5 个月。
---
## 9. 风险清单
1. **CUDA 构建/驱动兼容性**(高)→ 多后端 + 预编译矩阵 + 运行时检测。
2. **与成熟竞品差距**(中)→ 差异化:中文生态 / 轻量化 / RAG / 插件。
3. **HF 访问不稳定**(中)→ ModelScope + 镜像 + 本地导入。
4. **长期跟进 llama.cpp 成本**(中)→ 使用官方 llama-server 降低耦合。
5. **生成内容合规**(低)→ 本地优先、免责声明、可选内容过滤。
6. **本地 API 安全**(低)→ 默认回环监听 + API Key。
---
## 10. 待确认决策点
1. **桌面技术栈**:推荐 Tauri 2 + Rust + React;若团队以 JS 为主可改用 Electron。
2. **推理引擎方案**:推荐 llama.cpp llama-server 子进程;不推荐自研推理内核。
3. **首发范围**:确认纯 Windows(架构保留跨平台空间)。
4. **差异化优先级**:中文模型生态 / 内置 RAG / 轻量化 / 插件系统,先做哪个。
5. **开源 or 闭源 / 商业化**:影响社区运营与分发策略。
---
## 11. 评审确认与 Phase 0 进展(v0.2
### 11.1 决策确认(2026-08-13
用户已确认:
1. 技术栈:**Tauri 2 + Rust + React**。
2. 推理引擎:**llama.cpp llama-server 子进程**。
3. 首发:**纯 Windows**,架构保留跨平台扩展空间。
4. 差异化:中文模型生态 / RAG / 轻量化 / 插件系统**全部纳入规划**,后续高级功能逐步迭代。
### 11.2 Phase 0 完成情况
- **Monorepo 骨架**`apps/desktop`Tauri 壳)+ `crates/core|engine|download|api` + `ui/`React+ `scripts/`
- **工具链**Rust 1.97.1、VS Build Tools 17.14MSVC + Windows SDK)、Node 22 就绪。
- **编译验证**4 个 crate 与桌面应用(debug)全部编译通过;前端 tsc + vite 构建通过。
- **推理链路**llama.cpp b10375 预编译 CPU 引擎 + Qwen2.5-0.5B Q4_K_M 冒烟测试通过(普通请求 + 流式 SSE)。
- **应用启动**:桌面应用可正常启动并初始化 SQLite(`%APPDATA%\XianrenStudio`)。
- **已有页面**:模型库(导入/删除)、聊天(流式、参数调节、会话)、下载(进度事件)、本地 API 服务、设置。
### 11.3 下一步(Phase 0 收尾 → Phase 1
1. CUDA / Vulkan 后端引擎接入与运行时自动检测。
2. 模型库浏览/搜索(HF + ModelScope API 列表页)。
3. 下载页集成模型源(量化版本选择、SHA256 展示)。
4. 会话持久化增强(标题自动生成、上下文管理)。
5. 打包分发(NSIS 安装包、自动更新、代码签名)。