elec_rag_ui/README.md
ssurui b512857629 docs: 更新文档以反映 er_backend 代理重构、arm64 打包脚本与图标修复
- applyPlatformOverrides 章节改为描述统一走 er_backend 代理的现状,
  删除已废弃的按 cardType 推导端口的旧逻辑说明
- AppConfig 里 voice 字段结构更新为实际的 asr/tts 嵌套结构
- 新增"应用图标打包踩坑":files 数组遗漏 resources/icon.png、
  桌面菜单图标需要装全常规尺寸这两个真实踩过的坑
- 版本号管理章节补充三处版本号解析保持一致的说明
- 打包命令统一指向验证过的 package:kylin:arm64:deb(真机 fpm bug 的
  绕行方案),标注旧 package:kylin:arm64 在真机上会失败
- README 数据存储路径修正为实际的 ~/.config/elec_rag_ui/(原文档
  写的 simple-rag-app 是错的,真机验证过实际路径)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 23:52:33 +08:00

115 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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://<PAD-IP>: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