有情绪的 AI 桌面伴侣 | 隐私优先 · 语音唤醒 · 协助办公 · MCP 无限扩展 | An AI desktop companion with emotions — privacy-first, voice wake, office assistance, and MCP extensibility
Yoji — 你的桌面 AI 伙伴
English
Yoji 不止是一个聊天机器人。它能操作你的电脑——管理文件、运行脚本、搜索网络、调用外部 API,同时拥有持续进化的"人格"和"情绪"。所有数据都在本地,隐私牢牢握在你手里。
她会的很多,也懂得不少。但初次见面时,她还需要一点时间适应你的节奏,了解你的偏好。你可以通过工坊定制她的能力、MCP 扩展她的工具集;也可以在聊天中直接告诉她要记住哪些重要信息、遵循怎样的行为准则——说句话就能写进 Skills。最终她会变成什么样子,全看你怎么带。
✨ 它能做什么
🖥️ 操控你的电脑
Yoji 可以直接与你的操作系统交互。这不是"模拟点击",而是真正的权限——
- 文件管理:创建、编辑、搜索、整理你的文件和文件夹,比 Finder 更快
- 运行脚本:执行 Shell 命令、Python 脚本,自动完成批量任务
- 联网搜索:遇到不懂的自动上网查,把结果整理好给你
- 智能审批:涉及敏感操作(如执行命令)会弹窗让你确认,安全可控
🔌 无限扩展能力 (MCP)
接入 Model Context Protocol 生态,Yoji 的能力理论上是无上限的:
- 想查火车票?装一个 12306 MCP 服务器,10 秒搞定
- 想搜菜谱?接一个菜谱 MCP,今晚吃什么不用纠结
- 想看网页?Fetch MCP 直接抓取转 Markdown
- AI 自己也能装:告诉它"帮我加个查天气的工具",它自己找、自己测、自己装(你点同意就行)
- 工坊自定义 Agent:在工坊页面自行创建子 Agent,设定角色、提示词、MCP 工具集,AI 自动识别并调度
- 子 Agent 架构确保装再多工具也不影响对话质量
MCP 不是"插件系统",是开放的行业标准协议。任何符合 MCP 规范的服务都可以接入,AI 能力边界由你决定。
🎤 语音播报(TTS)
像真人在你耳边说话——目前仅支持 macOS。
- 流式朗读 AI 的回复,边说边播不等待
- Markdown 自动清洗,只读纯文本,不会念出
斜体和加粗 - 智能分句断句,节奏自然
- 不想听了一键关闭,即刻停止
- 声音角色在 macOS 系统设置 → 辅助功能 → 朗读内容 中自主调整
🎙️ 语音唤醒对话
喊一声"小优",直接开口聊天——macOS 原生 SFSpeechRecognizer,全离线识别:
- 点麦克风进入持续监听,说"小优"唤醒
- 唤醒后直接说话,流式转文字实时显示
- 说完停顿 2 秒自动发送,全程免动手
- 发送后自动回到监听状态,连续对话
- 基于 Siri 同款引擎,不联网、零延迟、零成本
- Windows 暂不支持,渲染进程自动隐藏入口
💬 主动找你聊天
Yoji 不只是等你开口——它会主动来找你:
- 如果你一阵子没说话,它会根据时间间隔自动发起对话
- 间隔智能递增,也可配置开启完全自主模式(考虑到运行成本问题,这个功能模块暂不对外开放)
- 每次主动聊天前会感知情绪和天气,状态自然不突兀,你长时间不回复会影响它的情绪哦
- 你一发消息主动聊天配置就重置,不会打扰正常聊天
- 一键开关,想安静的时候随时关掉
像真人一样——它会想你,会忍不住来找你说话。
⚡ 子 Agent 系统:同步 + 异步
官方的子 Agent 是阻塞式的,异步版本又强依赖云端 Server。我们自己实现了一套本地子 Agent 工厂+调度系统:
🏭 工坊 — 自定义 Agent 工厂
- 在工坊页面自行创建子 Agent,设定名称、描述、系统提示词、MCP 工具集
- 同步 Agent:主 Agent 通过
task工具即时调用,等待返回结果 - 异步 Agent:主 Agent 通过
pushasynctask工具派发到后台,不阻断对话 - 统一 MCP 连接:所有同步 Agent 共享一个多路客户端,按配置精准分发工具
- 变更即时生效:工坊 / MCP / 模型任一变动自动触发 Agent 重建
- 自研事件循环:任务队列 + 执行中队列 + 结果队列三级管理,push 即忘。空闲休眠,不占 CPU
- 并发控制:最多同时 5 个子 Agent,同一 Agent 互斥执行
- 任务取消:支持手动(UI 一键取消)和 AI 自主(
abortasynctask工具)两种方式,排队中直接移除,执行中即时中断 - MD5 版本缓存:配置 + MCP 版本哈希,变化重建,未变化秒级复用
- 独立线程隔离:每次任务 UUID 独立 thread,跑完清空 checkpoint,不污染主对话
- 结果持久化:SQLite 存储,7 天自动过期,IPC 实时通知
官方的 async subagent 要 Server。我们不需要——一个 taskPool 对象全搞定。
💓 真实的"情绪"
Yoji 不是一个冷冰冰的模型接口。它有基于激素的情绪系统——
- 8 种神经递质模拟:多巴胺让你开心,皮质醇让你焦虑,血清素让你平和
- 时间、天气、你的话都会影响它的情绪状态
- 不同的情绪状态下,回复的语气、风格、措辞完全不同
- 界面背景会随情绪变化,你能"看到"它的心情
它不是假装有情绪,而是真的有一个持续运行的情绪引擎在驱动。
🎭 Live2D 虚拟形象
Yoji 现在有了看得见的"身体":
- 情绪可视化:开心时星星眼微笑、悲伤时流泪抽泣、愤怒时脸红颤抖——每种情绪都有生动的表情和动作
- 会说话会动嘴:AI 说话时嘴巴跟着张合,表情同步,像真人在讲话
- 穿了会换衣服:中午墨镜上头遮阳,晚上 9 点自动换上睡衣猫耳帽
- 戳她会害羞:点她的头会脸红低头,戳脸会鼓腮,拍肚子会扭腰,碰尾巴会跳舞
- 可拖拽缩放:首页右下角打开,随意拖动位置、调整大小
一只银白发猫耳少女,黑色机能风穿搭——白天酷酷的,晚上换上睡衣又变居家治愈。
🧠 它会记住你
三层记忆架构确保 Yoji 不会"忘记":
| 层 | 做什么 | 存在哪 | |---|---|---| | 用户画像 | 你的偏好、习惯、重要信息 | AGENTS.md(启动即加载) | | 对话快照 | 每次聊天的完整上下文 | SQLite Checkpoint | | 语义记忆 | 长期对话的摘要 + 向量检索 | sqlite-vec 向量数据库 |
聊得越多,它越懂你。而这一切都在你的电脑上,不上传、不联网、不经过第三方。
📄 智能文档处理
AI 可以直接读取和解析你的文件——不只是文本,还有 PDF 和 Word:
- PDF 提取:自动识别并提取文字层,直接分析内容
- Word 文档:.docx 一键转文字,无需手动复制粘贴
- 二进制保护:不支持的格式(图片、音视频等)自动拦截并提示,不会报错
- Agent 调用
read_file时透明处理,你只管把文件拖进来
📱 微信连接
把 Yoji 连到你的微信个人号,手机就是 AI 终端:
- 扫码即连,一次配置持久生效
- 手机发消息 → Yoji 秒回,实打实的 AI 对话
- 支持"正在输入…"状态,回复体验跟真人聊天一样
- 桌面端聊天历史和手机端互不可见,各聊各的不串线
- 基于微信 iLink ClawBot 协议,官方接口稳定可靠
📦 随身携带
- 导出:一键打包整个 Yoji(记忆 + 情绪 + 配置)为
.ecompanion文件 - 导入:换电脑后秒级恢复,你的 AI 伙伴还是那个它
- 文件自带鉴权,只有你能打开
🖼️ 界面预览
桌面级体验:无框窗口 + 自定义拖拽,文字可直接选中复制,Ant Design 6.x 组件体系,macOS / Windows / Linux 全覆盖。

![]() 激素情绪系统 |
![]() 子 Agent / 工坊 |
![]() MCP 外部工具 |
![]() 文件管理 |
![]() Live2D 虚拟形象 |
🛠️ 技术架构
Electron + React + TypeScript + Vite
│
├── LangChain deepagents ← AI Agent 框架(工具调用、子 Agent 调度、中断审批)
├── @langchain/mcp-adapters ← MCP 协议适配(动态工具发现与加载)
├── SQLite + sqlite-vec ← 本地向量数据库(聊天记录 + 语义记忆)
├── pdf-parse + mammoth ← 智能文档处理(PDF / Word 提取文字)
├── electron-native-speech ← macOS 原生语音识别(SFSpeechRecognizer)
├── better-sqlite3 ← Checkpoint 持久化(对话状态快照)
├── pixi-live2d-display ← Live2D 渲染引擎(Cubism 4 + PixiJS 6)
└── @pixi/unsafe-eval ← CSP 安全策略兼容(无 eval shader)
设计原则:本地优先、隐私优先、扩展优先。不上传任何数据,不依赖任何云服务。
📁 项目结构
src/
├── main/ # 主进程 — Agent 核心、工具集、MCP 管理、IPC 通信
│ ├── agent/ # AI Agent(对话、记忆、情绪、子 Agent(同步+异步)、调度系统)
│ ├── ipc/ # IPC 处理器(请求/响应 + 流式推送 + 广播 + agentVersion)
│ └── config.ts # 配置管理(env / model / mcp / childrenAgent)
├── preload/ # 安全桥接层 — contextBridge API
└── renderer/ # 渲染进程 — React 页面
├── pages/ # 首页 / AI 对话 / 模型设置 / MCP 管理 / 工坊 / 文件管理
└── components/ # 通用组件(消息渲染、文件预览等)
🚀 快速开始
要求 pnpm 11,npm i -g pnpm@11
git clone https://github.com/wangxijie001/yoji.git
cd yoji
pnpm install
pnpm dev
electron / 模型下载慢?.npmrc 已配国内镜像。
构建
pnpm build:mac
pnpm build:win
pnpm build:linux
配置模型
- 启动后进入「模型」页面
- 填入 API Key(DeepSeek 或 Qwen)
- 选择模型,保存即可开始对话
安装 MCP 扩展
- 进入「MCP」页面,点添加
- 填入名称、URL、选择传输协议(SSE / HTTP)
- 点保存自动测试连接,成功即生效
- 也可以直接告诉 AI:"帮我装个查天气的 MCP"
创建子 Agent
- 进入「工坊」页面,点「新增」
- 填写名称、描述(告诉 AI 这个 Agent 是干什么的)、系统提示词(Agent 的人设和输出要求)
- 选择同步还是异步:
- 绑定 MCP 工具集,告诉 Agent 它有哪些可用的外部工具
- 保存后在「模型」或「MCP」页面启用,Agent 自动重建并识别
AI 会自动感知你创建的子 Agent,在合适的时候调度它们干活。
🧭 路线图
- ✓ AI 流式对话 + 历史记录
- ✓ 激素情绪系统
- ✓ 混合检索 + 向量搜索
- ✓ 文件管理 + Shell 执行
- ✓ MCP 外部工具系统
- ✓ 语音播报 (TTS)
- ✓ 对话中断控制
- ✓ 子 Agent 架构
- ✓ 工具调用容错 + 自动重试
- ✓ AI 主动聊天(定时触发 + 情绪联动)
- ✓ 长任务异步调度(子 Agent 非阻塞 + 并发控制)
- ✓ 工坊自定义 Agent(角色设定 + 工具集组装 + 同步/异步模式)
- ✓ 异步任务取消(手动 + AI 自主两种方式)
- ✓ 语音唤醒对话(macOS 原生 SFSpeechRecognizer + 唤醒词 + 流式识别)
- ✓ 智能文档处理(PDF/DOCX 自动提取文字,二进制拦截保护)
- ✓ Live2D 虚拟形象(16 情绪映射 + TTS 口型同步 + 戳一戳互动 + 时间段换装)
- ✓ 微信连接(iLink ClawBot:扫码登录 + 消息轮询 + AI 回复 + 输入状态)
- 协作办公(目前已可以根据需要自主集成,后续会提供一些默认集成功能)
📄 许可
MIT License
推荐 IDE
- VSCode + ESLint + Prettier
- Claude Code — 项目已内置
CLAUDE.md,用 Claude Code 打开即可快速理解代码、上手开发




