Playa-0v0/Cyrene-Agent
GitHub: Playa-0v0/Cyrene-Agent
一款基于 Electron 构建的 Live2D 桌面 AI 伴侣,具备深度个性化记忆、语音交互、工具调用及多平台接入能力。
Stars: 37 | Forks: 5

# Cyrene-Agent
[English](./README.en.md) | **中文**
**Cyrene-Agent 是一个 Windows 桌面 Live2D AI 伴侣,支持聊天、记忆、语音、工具调用和多平台接入。**
## ✨ 为什么选择 Cyrene
- 🪟 **Live2D 桌宠** — 置顶陪伴,情感同步
- 💬 **AI 对话** — 多会话历史,人格风格切换
- 🧠 **记忆引擎** — L0/L1/L2 + 自研 DMAE Worldbook
- 🔊 **语音通话** — TTS + ASR,解放双手
- 🛠 **工具生态** — 文档生成、联网搜索、文件操作
- 📱 **多平台接入** — 飞书、微信 iLink
## 🚀 快速开始
### 前置条件
- 从源码构建需要 **Node.js 24 LTS**(`npm install` / `npm run build` 依赖此版本)
- Electron runtime 当前为 **Electron 33**(暂不升级)
- npm 10+(推荐 11)
- Windows 10/11(飞书 / 微信 / nut-js 键鼠自动化依赖 Win32 API)
- npm 10+(推荐 11)
### 首次使用 Checklist
☐ 克隆仓库
☐ npm install
☐ ⭐ 下载 BGE-M3(完整体验必需)
☐ npm run build
☐ npm start
### 1. 克隆仓库
git clone https://github.com/Playa-0v0/Cyrene-Agent.git
cd Cyrene-Agent
### 2. 安装依赖
npm install
首次安装会下载 Electron 二进制(约 100 MB)与 Pixi.js / Live2D 等渲染依赖,
耗时 3–10 分钟,取决于网络。
### 3. 安装本地模型(强烈推荐)
⭐⭐⭐⭐⭐ 强烈推荐:BGE-M3
作用:
✓ 贴纸语义匹配
✓ 场景语气注入
✓ Worldbook 语义增强
下载:https://github.com/Playa-0v0/Cyrene-Agent/releases
### 4. 构建并启动
npm run build
npm start
或者直接开发模式:
npm run dev
同时运行 `tsc`(主进程 / preload)+ `vite` + Electron,主进程改动自动
重启 Electron,渲染层改动 Vite HMR 热更新。
## 🔑 配置 API Key
应用启动后,**点系统托盘图标 → 打开设置**,完成以下基础配置:
1. **🔑 API 设置**:选 LLM 厂商 preset(OpenAI / Anthropic / MiniMax / ...),
填写 API Key(**必填**,Agent 才能工作)。
2. **🎙️ TTS 设置**:选语音合成引擎(默认 MiniMax,或 GPT-SoVITS /
自定义云端 / MiMo)。
3. **🎧 ASR 设置**:如需语音通话,填阿里云实时 ASR 的 AppKey / AccessKey。
4. **📱 连接手机**(可选):要接入飞书 / 微信 iLink 时配置。
配置保存在 `
/settings.json`,无需重启应用。
## ❓ 常见问题
### 本地 AI 模型
**Cyrene 默认无需本地模型即可聊天。**
为了获得完整体验,强烈推荐安装:
⭐⭐⭐⭐⭐ 强烈推荐
BGE-M3
作用:
✓ 贴纸语义匹配
✓ Scene Embedding(场景语气注入)
✓ Worldbook 语义增强
下载:https://github.com/Playa-0v0/Cyrene-Agent/releases
可选模型:
⭐⭐ 可选
ms-marco-MiniLM-L-6-v2(Reranker,轻量排序)
bge-reranker-base(Reranker,标准排序)
未安装这些模型不会影响聊天,只会自动关闭对应增强功能。
### 首次启动打不开 / 黑屏 / 没桌宠怎么办?
桌宠窗口**强依赖**打包内的 Live2D 模型文件。如果 `dist/renderer/public/models/cyrene/` 下的 `Cyrene.model3.json` / `model.moc3` / `texture_0.png` 任一缺失,桌宠会显示为透明白窗口(你看到的"黑屏")。
排查步骤:
1. **看 DevTools 报错** —— dev 模式(`npm run dev`)会自动打开开发者工具,生产模式可手动按 `Ctrl+Shift+I`(Windows/Linux)或 `Cmd+Option+I`(macOS)。
2. **关注控制台错误** —— 通常会看到 `[Cyrene] Failed to load model: ...`,说明 `/models/cyrene/Cyrene.model3.json` 资源没加载到。
3. **重新构建** —— `npm run clean && npm run build && npm start` 重新生成 dist。
4. **检查 Vite 复制** —— `dist/renderer/public/models/cyrene/` 下的文件大小应与 `src/renderer/public/models/cyrene/` 一致。
### 不用 ASR 能用语音通话吗?
**不能。** 当前语音通话强依赖阿里云 ASR(无麦克风权限 = 无法进入 LISTENING 状态;ASR 未配置 = 直接进 ERROR)。
call 窗口**没有文本输入框**或 PTT(Push-To-Talk)按钮,所有对话完全走麦克风 → ASR → LLM → TTS 的链路。如果你想纯文本聊天,**用聊天窗口**即可(不需要 ASR)。
### API Key 安全吗?
**⚠️ 简短结论:目前不建议在共享电脑或不可信环境运行。**
**聊天/视觉模型 API Key、ASR 阿里云凭证、TTS 引擎 Key 等都明文存盘**到 `/`:
- `/model-settings.json` —— LLM / Vision API Key
- `/app-settings.json` —— ASR / TTS / 高德 / 搜索 / 邮件密码
- `/weixin/credentials.json` —— 微信 iLink Bot 凭据
**唯一加密的字段**:飞书渠道的 `appSecret`(用 `safeStorage` = Windows DPAPI / macOS Keychain / Linux libsecret;无密钥环时回退 XOR 混淆)。
**防护依赖**:操作系统文件权限(`` 默认只有当前用户可读)。
**⚠️ 不要把 settings 目录打包分享、也不要同步到云盘** —— API Key 会泄露。如需重置,删除 `/model-settings.json` 和 `/app-settings.json` 后重启即可。
### macOS / Linux 能不能跑?
**理论上可以启动,但未完整验证**。已知平台假设:
| 平台 | 状态 | 备注 |
|---|---|---|
| Windows 10/11 | ✅ 完整测试 | 主要目标平台 |
| macOS | 🧡 理论上可跑 | Electron 跨平台,但桌宠透明 + 鼠标穿透在 macOS 上有 Z-order 已知问题 |
| Linux | 🧡 理论上可跑 | `safeStorage` 在 headless 环境下不可用,会回退到 XOR 混淆 |
`game-bot` 模块的 `nut.js` 是原生模块,三平台都有预编译的二进制(`package-lock.json` 里 darwin/linux/win32 三种 `libnut` 子包),但**仅在 Windows 上做了端到端测试**。
如果你在 macOS/Linux 上跑出兼容性问题,欢迎开 issue 反馈。
### 出现 OOM / 内存泄漏怎么办?
**当前没有内置内存监控 / heap dump 工具**。如果遇到 OOM,最常见的优化路径:
1. **关闭 Reranker** —— 设置 → 🧠 记忆 → Reranker 模式设为 `none`,省 23–279 MB。
2. **关闭 MCP 工具** —— 设置 → 🔌 插件,关闭 `Playwright MCP`,避免 Chromium 子进程吃几百 MB。
3. **清理 RAG 文档** —— 设置 → 🧠 记忆 → 导入文档,删除大文件(embedding 后会驻留在向量索引里)。
4. **重启应用** —— L2 长期记忆、relationship log、conflict log 都是 push 数组,无 cap,长时间运行后**重启是必要的**。
如果 OOM 频繁,**用 Chrome DevTools Memory profiler**(dev 模式自动开 DevTools)抓 heap snapshot 找根因,再开 issue 反馈。
## 📊 当前状态
| 模块 | 状态 |
| --- | --- |
| 🪟 桌宠 / 多窗口 / 表情互动 | ✅ 可用 |
| 💬 日常聊天 / 语音通话 / 多会话历史 / 贴纸 | ✅ 可用 |
| 🧠 记忆系统(L0/L1/L2 + 自研 DMAE Worldbook 引擎) | ✅ 可用 |
| 🔊 TTS / ASR / 文档生成 / 联网搜索 / 文件操作 | ✅ 可用(部分需配置) |
| 📱 飞书 Lark 长连接 | 🧪 实验性 |
| 📱 微信 iLink Bot | 🧪 实验性 |
| 🤖 Game Bot 游戏自动化 | 🧪 实验性 |
| 🔌 MCP(Model Context Protocol)生态 | 🧪 实验性 |
| ✨ Skill 系统 | ✅ 可用 |
| 📚 RAG 文档知识库(含混合检索 / reranker) | 🧪 实验性 |
## ✨ 功能
### 核心功能
#### 🪟 桌面伴侣
- **Live2D 桌宠** — 基于 `pixi-live2d-display` + Cubism 引擎的置顶桌宠,
表情切换、嘴型同步、点击交互,自然待机动画。
- **多窗口架构** — 7 个独立 BrowserWindow:聊天、侧栏、任务、设置、
贴纸管理、通话、桌宠本体。
- **AG-UI 表情广播** — Agent 调 `play_live2d_action` 工具把「表情 +
动作 + 气泡」推到桌宠,随对话情绪同步表演。
#### 💬 对话
- **日常聊天 + 语音通话** — 桌面 / 手机 / 通话三种人格风格切换,
状态机 `IDLE → LISTENING → THINKING → SPEAKING → ENDED`,
24 轮滑动窗口上下文。
- **多会话历史** — 每会话独立 JSON 持久化,自动派生标题、`updatedAt`
排序,双击重命名。
- **AG-UI 事件流** — 标准化事件(RUN_STARTED / TEXT_MESSAGE / TOOL_CALL /
RUN_FINISHED),逐字 delta 流式渲染。
- **拖拽文件摄入** — 拖入 PDF/MD/DOCX/XLSX... 直接进 RAG 知识库。
- **贴纸面板** — 内置贴纸选择器,AI 按相似度自动匹配最合适的贴纸。
#### 🧠 记忆系统
- **L0 核心画像 / L1 近期状态 / L2 长期记忆** — 完整证据链,
权重自动衰减(60/30/10 阈值 active/aging/archived)。
- **冲突检测与解决** — 词法候选 → RAG 召回 → 评分 → resolver,
解决类型覆盖无关/语境差异/偏好演变/直接冲突。
- **🧬 自研 DMAE Worldbook 引擎** — 词条格式(触发词/常驻/优先级/
内在价值/连带触发词),`Ru = Bu × (1 + γ·ln(1+U_old))` 激活公式,
Active / Dormant / Archived 三态状态机,One-Shot 连带触发。
#### 🔊 语音
- **多 TTS 引擎** — MiniMax / GPT-SoVITS / 自定义云端 / MiMo / off。
- **多 ASR 引擎** — 阿里云实时语音识别,token 自动获取 + JSON 协议 +
纯 PCM。
- **VAD 静默检测** — 通话期间检测用户停顿自动触发回复。
#### 🛠 工具调用
- **文档生成** — Excel (`exceljs`)、Word (`docx`)、PDF (`pdfkit`)、
Markdown。
- **联网搜索 / 网页抓取** — `web_search` + `fetch_url`(turndown 转 Markdown)。
- **文件操作** — `read_file` / `list_dir` / `write_file` / `read_image`。
- **生活小工具** — 记账、汇率、翻译、行程规划、unified diff 应用。
- **任务委派** — `delegate_task`(sub-agent)、`todo_write`(任务清单)、
`ask_user_choice`(用户选择卡片)。
🧩 高级功能(点击展开)
#### 📚 RAG 文档知识库
- 支持 txt/md/pdf/docx/xlsx/pptx/csv/json 多格式导入,`source: imported_doc` 可追溯。
- 混合检索:向量 + BM25 + reranker(light / standard / none 三档)。
- 双 embedding 后端:本地 `@xenova/transformers` + 云端 OpenAI 兼容。
- 实体关系图谱,jieba 词典注入防止"昔涟/小鹿"等被错误切分。
#### 🔌 MCP(Model Context Protocol)
- 支持 stdio / SSE / HTTP 三种 transport。
- 内置 servers 自动同步,`install_mcp_server` 工具让 Agent 自动装新 server。
- 自带 Playwright MCP 配置。
#### 📱 外部渠道
- **飞书 Lark 长连接** — 官方 SDK + WebSocket(无需公网 / 域名 / 内网穿透),
p2p 私聊,多模态 text / image / audio / video / file / sticker。
- **微信 iLink Bot** — iLink Bot HTTP / long-poll 35s 拉取 → 自动 sendText。
#### 🤖 Game Bot 游戏自动化
- `engine.ts` 步骤解释器:`launch / wait / key / click / vlm_click /
vlm_select / vlm_check / branch` 等指令。
- 配合 GameRecipe 格式描述自动化流程,VLM 视觉定位 + nut-js 键鼠输入。
- 暴露为 `game_bot_start` 工具,可被 Agent 调用。
#### ✨ Skill 系统
- 双源扫描:`prompts/skills/` 内置 + `/skills/` 用户覆盖,
目录级整体覆盖。
- Meta 工具 `invoke_skill` / `read_skill_reference`,路径穿越防护 + 读
重放拦截 + 大文本截断。
- 支持 `/skill_id ...` slash 命令。
🔧 开发功能(点击展开)
#### 🧪 单元测试
- Vitest 4 覆盖 asr / tts / channels / chats / game-bot / memory /
opener / orchestrator / rag / scheduler / skills 等核心模块。
- `npm test` 一次性 / `npm run test:watch` 监听模式。
#### 🎬 场景模拟
- `npm run sim` 默认场景 / `sim:coffee` / `sim:mix` / `sim:rescue` 单场景调试。
- `npm run sim:sweep --rewardGain=3,5,7,10` 跑 Worldbook 评分参数 sweep。
- 产物输出到 `sim-result/`。
#### 🔧 开发者体验
- 统一 IPC 总线:`shared/ipc-channels.ts` 定义 90+ 通道常量。
- 运行时状态 preview:设置面板实时预览情绪 / 状态文案。
- Embedding 模型热切换:自动检测维度不匹配并清空旧库。
- 文件监视 / 热更新:`watchWorldbookFile` 等运行时热加载。
## 🧱 技术栈
| 层 | 技术 |
|---|---|
| Shell | Electron 33 |
| 渲染层 | Vite 5 + TypeScript 5 + Pixi.js 7 |
| Live2D | `pixi-live2d-display` 0.5.0-beta + Cubism Core |
| AI / MCP | `@modelcontextprotocol/sdk`, `@ag-ui/core`, `@ag-ui/client` |
| 集成 | 飞书 OpenAPI、微信 iLink、Nodemailer、PDFKit、docx |
| 测试 | Vitest 4 |
## 📦 项目结构
models/ # 本地 AI 模型(用户放置,见 docs/local-models.md)
├── Xenova/
│ ├── bge-m3/ # Embedding 模型(贴纸语义 + 场景识别,~570MB)
│ │ ├── tokenizer.json
│ │ ├── config.json
│ │ └── onnx/model_quantized.onnx
│ └── all-MiniLM-L6-v2/ # 文档 / 记忆 Embedding(~23MB)
├── bge-reranker-base/ # 标准排序模型(~279MB,可选)
└── ms-marco-MiniLM-L-6-v2/ # 轻量排序模型(~23MB)
src/
├── main/ # Electron 主进程
│ ├── asr/ # 语音识别(阿里云实时 ASR)
│ ├── call/ # 语音通话核心逻辑
│ ├── channels/ # 外部渠道适配层(飞书 / 微信 iLink / ...)
│ ├── chats/ # 多会话历史与持久化
│ ├── game-bot/ # 游戏自动化(game-recipes 驱动)
│ ├── memory/ # L0/L1/L2 记忆引擎 + RAG
│ ├── opener/ # 启动器 / 托盘 / 单实例
│ ├── orchestrator/ # Agent 主循环 + 工具调度
│ ├── rag/ # 检索增强生成 + worldbook 注入
│ ├── relationship/ # 用户关系画像
│ ├── scheduler/ # 定时任务(提醒 / 日程)
│ ├── sim/ # 场景模拟工具
│ ├── skills/ # Agent skill 系统
│ └── tts/ # 语音合成(多引擎)
├── preload/ # Electron preload 桥接
├── renderer/ # Vite 渲染层
│ ├── call/ # 语音通话窗口
│ ├── chat/ # 主聊天界面
│ ├── live2d/ # Live2D 模型渲染逻辑
│ ├── public/ # 静态资源(音频 / 头像 / 模型 / 贴纸)
│ ├── settings/ # 设置中心
│ ├── sidebar/ # 侧边栏
│ ├── sticker-manager/ # 贴纸管理
│ ├── tasks/ # 任务面板
│ ├── types/ # 共享类型定义
│ └── ui/ # 通用 UI 组件
└── shared/ # 主进程与渲染进程共享代码
dist/renderer/ # Vite 构建产物(不在 git 跟踪范围内)
├── assets/ # 打包后的 JS/CSS
├── audio/ # 音频资源
├── avatars/ # 头像图片
├── call/ chat/ settings/ sidebar/ sticker-manager/ tasks/ # HTML 入口
├── models/cyrene/ # Live2D 模型 — 见 MODEL_LICENSE.md
└── stickers/ # 贴纸图片资源
## ⚠️ 免责声明
本项目为**非官方粉丝同人作品**,与 HoYoverse / 米哈游**无任何关联、
背书或赞助关系**。
《崩坏:星穹铁道》、"昔涟"角色及其相关美术,世界观、商标等知识产权
归 **HoYoverse / 米哈游**所有。
**关于授权范围的说明**:
- **源代码**采用 [MIT License](./LICENSE),仅约束本仓库的源代码。
- **角色 IP、Live2D 模型、美术资产** 不属于 MIT 授权范围,分别遵循
[MODEL_LICENSE.md](./MODEL_LICENSE.md) 与米哈游同人创作规范处理。
- 因底层角色 IP 涉及米哈游同人创作规范,**本项目及其衍生物严禁任何
商业用途**(售卖、付费社群、含广告变现、打包销售等)。
## 📄 许可证
本仓库的**源代码**遵循 [MIT License](./LICENSE),Copyright (c) 2026 Playa。
MIT 仅约束本仓库的源代码,不适用于角色、Live2D 模型与美术资产。
角色 IP(《崩坏:星穹铁道》"昔涟" 等)、Live2D 模型(`models/cyrene/`)、
美术资产遵循各自对应的授权:
- **Live2D 模型** — 详见 [MODEL_LICENSE.md](./MODEL_LICENSE.md),
模型作者 [@是依七哒](https://space.bilibili.com/457683484) 授权使用、
修改,再分发。
- **角色 IP / 美术** — 归 **HoYoverse / 米哈游**所有。
## 🙏 致谢
- **昔涟角色**:© HoYoverse / 米哈游
- **Live2D 模型**:由 [@是依七哒](https://space.bilibili.com/457683484) 制作 —
详见 [MODEL_LICENSE.md](./MODEL_LICENSE.md)
- **Live2D Cubism SDK**:© Live2D Cubism
特别感谢模型原作者慷慨授权本项目使用、修改并再分发其作品。
## 💌 联系
欢迎通过 GitHub Issues / PR 交流。请保持讨论的礼貌与主题相关性。
⭐ 如果你喜欢这个项目,欢迎点一个 Star。这会帮助更多喜欢昔涟的人发现它。标签:AI伴侣, Electron, Live2D, MITM代理, TypeScript, 安全插件, 桌面宠物, 自动化攻击, 语音交互