# 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) │ ├── bge-base-zh-v1.5/ # 嵌入模型(768 维,~98MB,onnx 需自行下载) │ ├── bge-large-zh-v1.5/ # 嵌入模型(1024 维,~312MB,onnx 需自行下载) │ ├── asr/ # Paraformer 流式语音识别模型(~376MB) │ └── punct/ # 标点恢复模型(~72MB) ├── 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://:17700`(配置模型路径、启动/停止服务) ## 模型文件 `models/` 目录中的 `.onnx` 文件通过 **Git LFS** 管理。克隆后拉取实体文件: ```bash git lfs install GIT_SSL_NO_VERIFY=true git lfs pull ``` **bge-base / bge-large** 的 onnx 文件需自行从 HuggingFace 下载: - [bge-base-zh-v1.5](https://huggingface.co/BAAI/bge-base-zh-v1.5)(下载 `onnx/model_quantized.onnx`,约 98MB) - [bge-large-zh-v1.5](https://huggingface.co/BAAI/bge-large-zh-v1.5)(下载 `onnx/model_quantized.onnx`,约 312MB) ## 开发模式 ```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