Files
EzVibeR/README.md
2026-06-19 16:41:23 +08:00

163 lines
8.3 KiB
Markdown
Raw Permalink 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.
# EzVibeR+
A Tauri + Vue desktop pet that lives on your screen: a Live2D mascot you can chat with, take screenshots through, and have remember your conversations.
---
## 核心能力
- **Live2D 桌宠** — 透明置顶窗口上的可交互模型,点头/身子有不同反应
- **多会话聊天** — 每个对话独立存档,刷新不丢,支持重命名/删除/搜索/导出
- **日期分割线** — 仿微信风格,跨日自动插入分割线(今天/昨天/具体日期)
- **截图 → AI** — 点击模型即可全屏截图,预览、附文、发送给 LLM 分析
- **自动标题** — 聊满 5 条消息后AI 自动给当前对话起个短标题
- **全局搜索** — 当前会话高亮 + 跨会话关键词检索
- **导出** — Markdown / JSON 两种格式,保留全部消息
- **提醒中心** — 独立的伪对话,自动汇聚所有健康提醒(喝水/伸展/早安等)
- **LLM 对话** — 兼容 OpenAI含各类自部署网关与 Anthropic配置中心填 key 即可
- **情绪引擎** — 模型在闲置时会随情绪变化切换微表情
- **后台调度** — 60s 心跳驱动情绪、提醒、行为编排
- **系统托盘** — 显示/隐藏/配置/健康提醒/退出
## 架构(高层)
| 层 | 作用 |
|---|---|
| **Vue 3 + Vite 前端** | 桌宠窗口Live2D + 聊天面板)、配置窗口、健康提醒管理窗口 |
| **PixiJS / pixi-live2d-display** | Live2D 模型渲染与点击命中 |
| **Tauri 2 IPC** | 前端 ↔ Rust 命令与事件通道 |
| **Rust 后端** | LLM 接入、情绪引擎、调度器、会话持久化、截图、系统通知 |
| **SQLite (rusqlite)** | 记忆与向量检索 |
| **Axum 本地服务** | 给 webview 提供本地 Live2D 模型文件 |
两个长驻子系统:
- **情绪引擎**:维护 idle / happy / focused / annoyed / sleepy 等状态
- **60s 调度器**:触发健康提醒、推进情绪、生成主动消息
## 数据存储
| 数据 | 位置 |
|---|---|
| 主配置 | `~/.live2D/live2d.conf.json` |
| 会话数据 | `<系统 app-data 目录>/com.ezviber.plus/sessions/` |
| ├─ | `_index.json` — 会话索引(标题/消息数/时间) |
| └─ | `<session-id>/chat.jsonl` — 消息流(一行一条 JSON仅 user/assistant/system/reminder图片只存相对路径 |
| └─ | `<session-id>/images/<uuid>.{png,jpg}` — 截图原图PNG给 LLM 多模态用)+ 压缩预览JPEG给聊天气泡用 |
| 数据库 | `ezvibe_memory.db` — 向量记忆 |
> 启动时自动 GC扫描每个 session 的 `images/` 目录,删除没被任何消息引用的孤儿图片。
## 配置项
主配置里的关键字段:
| 字段 | 含义 |
|---|---|
| `model_dir` | Live2D 模型目录 |
| `width` / `height` / `x` / `y` | 窗口几何 |
| `llm_provider` | `openai`(含兼容服务)/ `anthropic` |
| `llm_model` | 模型名 |
| `llm_base_url` | API 端点 |
| `llm_api_key` | API key |
| `behaviors` | 健康提醒规则(可在托盘菜单里 CRUD |
## 构建与运行
```bash
# 一次性安装
npm install
# 开发模式(前端 + 后端热重载)
npm run tauri:dev
# 生产构建
npm run build # 前端
cd src-tauri && cargo build --release
./src-tauri/target/release/live2d
```
环境要求Node 18+、Rust 1.65+。
---
## 更新日志
### 2026-06-19 — reload 修复 / 截图流程收尾 / 日期分割线 / 启动 GC
- **reload 后历史截图正常显示** — 修正了 Rust `PersistedMessage` 的字段命名snake_case → camelCase 显式标注 + 旧数据 alias 兼容),消息里的图片路径在重启后能被前端正确读回
- **截图后整面板可点** — 截图 hide→show 后补齐 `set_focus()`X11 透明窗口不再卡死
- **截图预览气泡生命周期干净** — 点"取消"或"发送给AI"立刻从内存移除screenshot 消息被三层防御彻底排除出聊天记录(前端清 debounce timer + 后端拒绝写入 + reload 跳过读出)
- **截图后窗口属性保留** — hide→show 后自动恢复 `always_on_top``visible_on_all_workspaces`,不再需要去托盘点"显示桌宠"
- **搜索 / 导出改为弹出工具栏** — 顶部 🔍 按钮折叠展开,主聊天区更清爽
- **日期分割线** — 仿微信风格,自动按本地时区分组消息,跨日插入「今天 / 昨天 / YYYY-MM-DD」灰底圆角标签
- **启动时图片 GC** — 应用启动异步扫描 `images/` 目录,清理不被任何消息引用的孤儿 PNG / JPEG释放磁盘
### 2026-06-15 — 重建窗口保持置顶 + 全工作区可见
- **关闭后再开,置顶属性不丢** — 关闭桌宠窗口后,从托盘"显示桌宠"重建,新窗口仍是「始终在最前」
- **切换工作区桌宠跟着走** — 重建后的窗口在所有工作区都可见,切桌面不会丢
### 2026-06-14 — 多会话 / 截图存档 / 提醒中心 / UI 收尾
- **多会话聊天持久化** — 每个对话独立存档到磁盘,刷新 / 重启不丢;顶部下拉切换,新建 / 重命名 / 删除
- **截图存档** — 截图自动保存为图片文件PNG + JPEG 预览),消息里只存路径,气泡内直接预览
- **截图发送给 AI** — 在聊天里就能把截图 + 文字发给 LLM 分析
- **自动标题** — 5 条消息后异步调 LLM 生成 ≤20 字短标题
- **当前会话搜索** — 顶部输入框即时过滤 + 黄色高亮命中
- **全局搜索** — 跨会话搜索弹窗,命中后一键跳转
- **导出** — 当前会话一键导出为 Markdown 或 JSON
- **提醒中心伪 session** — 所有健康提醒自动汇聚到独立的「🔔 提醒中心」对话,触发时自动跳转
- **模型位置 / 大小** — 模型水平居中,高度贴近聊天面板,宽度不超窗格
- **浮动工具栏** — 9 个按钮(聊天切换 / 配置 / 背景 / 换模型 / 位置 / 大小 / 复制 URL / 穿透 / 关闭)常驻可见
- **LLM 多模态兼容性** — 适配严格 OpenAI 兼容服务(去除冗余 detail 字段),多模态请求延长超时
- **右侧滚动条修复** — 页面不再因窗口边缘滚动而抖动
- **帮助横幅移除** — 不再每次启动弹出「?」说明
### 2026-06-12 — 动作标签 / Idle 表情 / 截图 AI
- **AI 动作标签** — LLM 回复末尾附带 `[MOTION: xxx]`,自动驱动 Live2D 动作与表情
- **Idle 微表情** — 长时间无交互时,模型随当前情绪切换微表情
- **截图 + AI 分析** — 点击模型身体 → 截图 → 气泡预览 → 可附文字 → 发给 AI
- **配置中心展示模型能力** — 显示当前模型的动作组、表情列表、情绪映射表
- **透明窗口下 ChatPanel 点击修复** — 解决了 Linux + Tauri 透明窗口里 WebGL 画布拦截鼠标事件的问题
### 2026-06-11 — Tauri v2 升级 / 健康提醒 / 窗口交互
- **升级到 Tauri v2**
- **健康提醒 CRUD 面板** — 托盘「健康提醒」菜单进入,实时增删改查、变更立刻同步到调度器
- **禁双击全屏** — 透明窗口不再被双击意外最大化
- **情绪 → 表情 / 动作映射** — 自动根据模型实际可用的 expression / motion 匹配
- **前景遮罩修复** — 模型始终显示在最上层
### 2026-06-01 ~ 2026-06-02 — LLM 对话能力
- **LLM 对话上线** — 桌宠从「能显示」进化为「能对话」
- 兼容 OpenAI含自部署网关与 Anthropic Claude
- 配置中心填 key / model / base_url 即可启用
- 聊天面板常驻在桌宠窗口右侧
- 聊天面板可一键收起,模型自动占满整个窗口
- **思考气泡** — DeepSeek / QwQ / o1 等推理模型的 `<think>…</think>` 块折叠显示,主回复独立
- **健康提醒显示为气泡** — 提醒事件实时以绿松石色气泡出现在聊天里,并自动注入 LLM system prompt 引导健康小贴士
- **窗口默认尺寸调整** — 600×480可缩放
- **删除本地 llama.cpp 路径** — 不再支持内嵌本地推理,仅保留云端 API
### 2026-05-31 — 基础修复
- 「选择本地模型」按钮恢复响应
- 工具栏按钮全部正常显示
- 模型显示比例修复
- 切换 workspace 后模型尺寸不再重置
- 窗口置顶可配置
---
## 相关链接
- [Live2D Cubism Core](https://www.live2d.com/)
- [pixi-live2d-display](https://github.com/guansss/pixi-live2d-display)
- [实施记录](docs/impl/) — 按日期的详细变更记录
## 免责声明
本软件仅供个人学习使用,禁止商用或非法用途。