Yoji 不止是一个聊天机器人。它能操作你的电脑——管理文件、运行脚本、搜索网络、调用外部 API,同时拥有持续进化的"人格"和"情绪"。所有数据都在本地,隐私牢牢握在你手里。
Yoji 可以直接与你的操作系统交互。这不是"模拟点击",而是真正的权限——
- 文件管理:创建、编辑、搜索、整理你的文件和文件夹,比 Finder 更快
- 运行脚本:执行 Shell 命令、Python 脚本,自动完成批量任务
- 联网搜索:遇到不懂的自动上网查,把结果整理好给你
- 智能审批:涉及敏感操作(如执行命令)会弹窗让你确认,安全可控
接入 Model Context Protocol 生态,Yoji 的能力理论上是无上限的:
- 想查火车票?装一个 12306 MCP 服务器,10 秒搞定
- 想搜菜谱?接一个菜谱 MCP,今晚吃什么不用纠结
- 想看网页?Fetch MCP 直接抓取转 Markdown
- AI 自己也能装:告诉它"帮我加个查天气的工具",它自己找、自己测、自己装(你点同意就行)
- 工坊自定义 Agent:在工坊页面自行创建子 Agent,设定角色、提示词、MCP 工具集,AI 自动识别并调度
- 子 Agent 架构确保装再多工具也不影响对话质量
MCP 不是"插件系统",是开放的行业标准协议。任何符合 MCP 规范的服务都可以接入,AI 能力边界由你决定。
像真人在你耳边说话——目前仅支持 macOS。
- 流式朗读 AI 的回复,边说边播不等待
- Markdown 自动清洗,只读纯文本,不会念出
*斜体*和**加粗** - 智能分句断句,节奏自然
- 不想听了一键关闭,即刻停止
- 声音角色在 macOS 系统设置 → 辅助功能 → 朗读内容 中自主调整
- 有本地语音模型方案,但包体太大暂未(发布)集成
Yoji 不只是等你开口——它会主动来找你:
- 如果你一阵子没说话,它会根据时间间隔自动发起对话
- 间隔智能递增,也可配置开启完全自主模式(考虑到运行成本问题,这个功能模块暂不对外开放)
- 每次主动聊天前会感知情绪和天气,状态自然不突兀,你长时间不回复会影响它的情绪哦
- 你一发消息主动聊天配置就重置,不会打扰正常聊天
- 一键开关,想安静的时候随时关掉
像真人一样——它会想你,会忍不住来找你说话。
官方的子 Agent 是阻塞式的,异步版本又强依赖云端 Server。我们自己实现了一套本地子 Agent 工厂+调度系统:
🏭 工坊 — 自定义 Agent 工厂
- 在工坊页面自行创建子 Agent,设定名称、描述、系统提示词、MCP 工具集
- 同步 Agent:主 Agent 通过
task工具即时调用,等待返回结果 - 异步 Agent:主 Agent 通过
push_async_task工具派发到后台,不阻断对话 - 统一 MCP 连接:所有同步 Agent 共享一个多路客户端,按配置精准分发工具
- 变更即时生效:工坊 / MCP / 模型任一变动自动触发 Agent 重建
⚙️ 异步调度引擎
- 自研事件循环:任务队列 + 执行中队列 + 结果队列三级管理,push 即忘。空闲休眠,不占 CPU
- 并发控制:最多同时 5 个子 Agent,同一 Agent 互斥执行
- MD5 版本缓存:配置 + MCP 版本哈希,变化重建,未变化秒级复用
- 独立线程隔离:每次任务 UUID 独立 thread,跑完清空 checkpoint,不污染主对话
- 结果持久化:SQLite 存储,7 天自动过期,IPC 实时通知
官方的 async subagent 要 Server。我们不需要——一个 taskPool 对象全搞定。
Yoji 不是一个冷冰冰的模型接口。它有基于激素的情绪系统——
- 8 种神经递质模拟:多巴胺让你开心,皮质醇让你焦虑,血清素让你平和
- 时间、天气、你的话都会影响它的情绪状态
- 不同的情绪状态下,回复的语气、风格、措辞完全不同
- 界面背景会随情绪变化,你能"看到"它的心情
它不是假装有情绪,而是真的有一个持续运行的情绪引擎在驱动。
三层记忆架构确保 Yoji 不会"忘记":
| 层 | 做什么 | 存在哪 |
|---|---|---|
| 用户画像 | 你的偏好、习惯、重要信息 | AGENTS.md(启动即加载) |
| 对话快照 | 每次聊天的完整上下文 | SQLite Checkpoint |
| 语义记忆 | 长期对话的摘要 + 向量检索 | sqlite-vec 向量数据库 |
聊得越多,它越懂你。而这一切都在你的电脑上,不上传、不联网、不经过第三方。
- 导出:一键打包整个 Yoji(记忆 + 情绪 + 配置)为
.ecompanion文件 - 导入:换电脑后秒级恢复,你的 AI 伙伴还是那个它
- 文件自带鉴权,只有你能打开
桌面级体验,每个细节都打磨过——
- 无框窗口 + 自定义拖拽,干净利落
- 文字可直接选中复制
- Ant Design 6.x 组件体系,交互流畅
- macOS / Windows / Linux 全覆盖
Electron + React + TypeScript + Vite
│
├── LangChain deepagents ← AI Agent 框架(工具调用、子 Agent 调度、中断审批)
├── @langchain/mcp-adapters ← MCP 协议适配(动态工具发现与加载)
├── SQLite + sqlite-vec ← 本地向量数据库(聊天记录 + 语义记忆)
└── better-sqlite3 ← Checkpoint 持久化(对话状态快照)
设计原则:本地优先、隐私优先、扩展优先。不上传任何数据,不依赖任何云服务。
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 install
# 开发(热重载)
pnpm dev
# 构建
pnpm build:mac # macOS
pnpm build:win # Windows
pnpm build:linux # Linux- 启动后进入「模型」页面
- 填入 API Key(DeepSeek 或 Qwen)
- 选择模型,保存即可开始对话
- 进入「MCP」页面,点添加
- 填入名称、URL、选择传输协议(SSE / HTTP)
- 点保存自动测试连接,成功即生效
- 也可以直接告诉 AI:"帮我装个查天气的 MCP"
- 进入「工坊」页面,点「新增」
- 填写名称、描述(告诉 AI 这个 Agent 是干什么的)、系统提示词(Agent 的人设和输出要求)
- 选择同步还是异步:
- 同步:即时执行(读文件、跑命令、调 MCP),结果立等可取
- 异步:后台执行(联网搜索、批量处理),不打断当前对话
- 绑定 MCP 工具集,告诉 Agent 它有哪些可用的外部工具
- 保存后在「模型」或「MCP」页面启用,Agent 自动重建并识别
AI 会自动感知你创建的子 Agent,在合适的时候调度它们干活。
- ✓ AI 流式对话 + 历史记录
- ✓ 激素情绪系统
- ✓ 混合检索 + 向量搜索
- ✓ 文件管理 + Shell 执行
- ✓ MCP 外部工具系统
- ✓ 语音播报 (TTS)
- ✓ 对话中断控制
- ✓ 子 Agent 架构
- ✓ 工具调用容错 + 自动重试
- ✓ AI 主动聊天(定时触发 + 情绪联动)
- ✓ 长任务异步调度(子 Agent 非阻塞 + 并发控制)
- ✓ 工坊自定义 Agent(角色设定 + 工具集组装 + 同步/异步模式)
- 多会话并行管理
- MCP 市场(一键安装社区共享的工具集)
- 自定义 Skill 编辑器
MIT License
- VSCode + ESLint + Prettier