electron-builder 自带的 fpm 打包在 arm64 Kylin 板子上必现 "tar failed (exit code 2)",改用 electron-builder 的 dir target 产出 unpacked 目录后手工用 dpkg-deb 拼装,包含 chrome-sandbox setuid 修复(缺失会导致 Electron 沙箱初始化失败,启动即崩溃)。 版本号解析与 electron-builder.config.ts / electron.vite.config.ts 保持一致(git tag -> .app-version -> package.json 三级回退)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
elec_rag_ui — 智能电子手册前端
基于 Electron + Vue3 + TypeScript + LanceDB 构建的本地化 RAG(检索增强生成)桌面应用。
仅支持 Linux(银河麒麟 Kylin V10 / Ubuntu),适配 ER160(揽月 M50 NPU)和 ER25(芯动力 RPP)计算卡。服务进程管理委托给 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 | 8081 |
| ER25(芯动力 RPP) | 本地 CPU(固定) | llamacpp | 8080 |
目录结构
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 已运行:
# 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 管理。克隆后拉取实体文件:
git lfs install
GIT_SSL_NO_VERIFY=true git lfs pull
bge-base / bge-large 的 onnx 文件需自行从 HuggingFace 下载:
- bge-base-zh-v1.5(下载
onnx/model_quantized.onnx,约 98MB) - bge-large-zh-v1.5(下载
onnx/model_quantized.onnx,约 312MB)
开发模式
npm install
npm run dev:linux # Linux(--no-sandbox,开发专用)
开发模式下需要设置
DISPLAY环境变量(有图形界面时自动可用)。
打包
npm run package:kylin # Linux x64,产出 AppImage + .deb
npm run package:kylin:arm64 # Linux ARM64(在 ARM64 机器上执行)
# 须先安装系统 fpm:sudo gem install fpm
数据存储
| 内容 | 路径 |
|---|---|
| 配置文件 | ~/.config/simple-rag-app/config.json |
| 向量数据库 | ~/.config/simple-rag-app/lancedb/ |
许可证
MIT License
Description
Languages
F*
42.2%
TypeScript
33.8%
Vue
18.5%
JavaScript
2.4%
CSS
2%
Other
1.1%