- bge-base-zh-v1.5、bge-large-zh-v1.5:只有 tokenizer/config 元数据, onnx 权重从未提交(README 一直写"需自行下载”),代码里也完全没有 任何地方引用这两个目录,纯占位死文件。 - punct(标点恢复模型,75M onnx):electron-builder.config.ts 的 extraResources 从未把它纳入打包,装出来的应用里从来没有过这份模型, 语音识别的标点恢复功能实际一直是禁用状态。用户确认现阶段不需要, 直接删除源文件;代码逻辑保留(punctuationModelDir 为空时优雅跳过), 以后要用可以自行准备模型再在设置里指定目录。 models/ 从 ~475M 降到 399M。README 目录说明与模型文件章节同步更新。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
112 lines
4.4 KiB
Markdown
112 lines
4.4 KiB
Markdown
# elec_rag_ui — 智能电子手册前端
|
||
|
||
基于 Electron + Vue3 + TypeScript + LanceDB 构建的本地化 RAG(检索增强生成)桌面应用。
|
||
|
||
**仅支持 Linux(银河麒麟 Kylin V10 / Ubuntu)**,适配 ER160(揽月 M50 NPU)和 ER25(芯动力 RPP)计算卡。服务进程管理委托给 [er_backend](https://git.drumtm.com/EdgeRhythm/er_backend)(HTTP 17700),前端专注 RAG 逻辑与用户交互。
|
||
|
||
## 技术栈
|
||
|
||
- **框架**:Electron + electron-vite + Vue3 + TypeScript
|
||
- **UI**:Naive UI(弹窗/通知)+ 自定义工业风 CSS
|
||
- **状态管理**:Pinia
|
||
- **向量数据库**:LanceDB(嵌入式,无需额外服务)
|
||
- **本地向量化**:`@huggingface/transformers` + `onnxruntime-node`
|
||
- **生成引擎**:llama.cpp server(通过 er_backend 管理)
|
||
- **Markdown 渲染**:marked
|
||
|
||
## 支持硬件
|
||
|
||
| 计算卡 | 嵌入方式 | 生成方式 |
|
||
|--------|---------|---------|
|
||
| **ER160**(揽月 M50 NPU) | llamacpp NPU(默认)或本地 CPU | llamacpp |
|
||
| **ER25**(芯动力 RPP) | 本地 CPU(固定) | llamacpp |
|
||
|
||
推理请求(生成 + 嵌入)统一经 er_backend 代理转发(`http://127.0.0.1:17700`),实际 llama-server 监听哪个端口由 er_backend 后端配置决定,前端不感知、也不需要按计算卡型号推导端口。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
elec_rag_ui/
|
||
├── src/
|
||
│ ├── main/ # Electron 主进程
|
||
│ │ ├── index.ts # 入口:全屏启动、菜单禁用、信号处理
|
||
│ │ ├── config.ts # 配置读写(userData/config.json)
|
||
│ │ ├── ipc/ # IPC 处理器
|
||
│ │ └── rag/ # RAG 核心逻辑
|
||
│ ├── preload/index.ts # contextBridge
|
||
│ ├── renderer/ # Vue3 前端
|
||
│ │ └── src/
|
||
│ │ ├── App.vue # 根布局(顶栏 + 主区)
|
||
│ │ ├── components/ # ChatPanel / IndexPanel / SettingsModal 等
|
||
│ │ ├── stores/ # Pinia store
|
||
│ │ └── types/ # TypeScript 类型定义
|
||
│ └── batch_questions.txt # 批量测试问题示例
|
||
├── models/ # 本地模型(onnx 由 Git LFS 管理)
|
||
│ ├── bge-small-zh-v1.5/ # 嵌入模型(512 维,~24MB),本地 CPU 向量化回退用
|
||
│ └── asr/ # Paraformer 流式语音识别模型(~376MB)
|
||
├── docs/ # 示例文档(用于测试索引与问答)
|
||
├── resources/ # 应用图标、TTS/ASR worker
|
||
├── stubs/sharp/ # sharp 原生模块 stub
|
||
├── package.json
|
||
├── electron-builder.config.ts
|
||
└── electron.vite.config.ts
|
||
```
|
||
|
||
## 依赖:er_backend
|
||
|
||
本应用依赖 **er_backend**(端口 17700)管理 llama-server 推理服务进程。启动前请确保 er_backend 已运行:
|
||
|
||
```bash
|
||
# PAD 上
|
||
cd /opt/er-backend
|
||
nohup ./node/node manager/index.js &
|
||
|
||
# 或通过 systemd(deb 安装后自动配置)
|
||
systemctl status er-backend
|
||
```
|
||
|
||
er_backend 管理界面:`http://<PAD-IP>:17700`(配置模型路径、启动/停止服务)
|
||
|
||
## 模型文件
|
||
|
||
`models/` 目录中的 `.onnx` 文件通过 **Git LFS** 管理。克隆后拉取实体文件:
|
||
|
||
```bash
|
||
git lfs install
|
||
GIT_SSL_NO_VERIFY=true git lfs pull
|
||
```
|
||
|
||
> 语音识别默认不带自动加标点(标点恢复模型未随包分发);如需要可自行准备
|
||
> [sherpa-onnx punct 模型](https://k2-fsa.github.io/sherpa/onnx/punctuation/models.html),
|
||
> 在设置里把"标点恢复模型目录"指过去即可,代码本身已支持该功能。
|
||
|
||
## 开发模式
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev:linux # Linux(--no-sandbox,开发专用)
|
||
```
|
||
|
||
> 开发模式下需要设置 `DISPLAY` 环境变量(有图形界面时自动可用)。
|
||
|
||
## 打包
|
||
|
||
```bash
|
||
npm run package:kylin # Linux x64,产出 AppImage + .deb
|
||
npm run package:kylin:arm64:deb # Linux ARM64 deb(推荐,须在 ARM64 机器/真机上执行,已验证可行)
|
||
npm run package:kylin:arm64 # Linux ARM64(AppImage + deb),真机 Kylin 上 deb 目标
|
||
# 走 electron-builder 自带 fpm 必现 tar failed,
|
||
# 用 package:kylin:arm64:deb 代替
|
||
```
|
||
|
||
## 数据存储
|
||
|
||
| 内容 | 路径 |
|
||
|------|------|
|
||
| 配置文件 | `~/.config/elec_rag_ui/config.json` |
|
||
| 向量数据库 | `~/.config/elec_rag_ui/lancedb/` |
|
||
|
||
## 许可证
|
||
|
||
MIT License
|