我做了个 6.4 MB 的 AI 助手,它比我的输入法还轻
一个快捷键唤出、问完即走的桌面悬浮窗助手:芝麻(Zhima) GitHub:MOONKEY0510/ZHIMA-agent
一、导火索:我受够了「切窗口」
我用 AI 的日常是这样的:
- 在编辑器里写代码,报错;
- 复制报错;
Alt+Tab切到浏览器 → 找到那个”永远不关的 AI 标签页” → 万一浏览器重启过,还得重新登录;- 粘贴、提问、等回答;
Alt+Tab切回来,然后发现自己已经忘了刚才在想什么。
第 5 步才是真正的成本。
更别提那些”只想翻译一个句子的场景”——为了 8 个单词的翻译,我要调动一个占着几百 MB 内存、开着 30 个标签页的浏览器。这就像下楼买瓶酱油,非要开一辆公交。
于是我给自己定了个需求,简单到有点朴素:
按一个键,它出现;点一下别处,它滚。
结果就是芝麻(Zhima)。做完之后体积是这样的:
| 项目 | 体积 |
|---|---|
| 芝麻安装包 | 6.4 MB |
| 一张手机壁纸 | 通常 3~8 MB |
| 一部 3 分钟 1080P 短视频 | 约 200 MB |
是的,装它和存一张壁纸的代价差不多。

△ 它平时就长这样:一个浮在桌面上的小窗,问完即走。
二、这只”芝麻”会干什么
🎯 Alt+Space:召唤术,且带社恐属性
任何时候按 Alt+Space,窗口从屏幕中间”水浮现”一般出现(我用 react-spring 做了个入场动画,纯粹因为好看)。
问完不用关——只要你点到别的地方,它自己就隐藏了。它不会赖在你桌面上不走,这一点让我对它的好感度远超某些”请勿关闭”的弹窗。
🖱 Alt+Q:选中哪段,就问哪段
这个功能我承认:做完之后我用得最多。
在任意程序里选中文字 → 按 Alt+Q → 文字自动进入输入框 → 直接问、或点「翻译 / 解释 / 总结 / 润色 / 起草回复」。
读英文文档时,翻译完的结果可以一键写回剪贴板,直接替换原文。看文档的速度大概快了一倍,摸鱼的时间大概多了一倍。
🧠 让它变成”你家的模型”<不绑定任何厂商>
它只要求对方是 Chat Completions 兼容接口。于是:
- 国产模型(DeepSeek / 智谱 / MiniMax / Kimi / 通义 / 硅基流动 / 火山方舟…)——一键预设,填个 Key 就完事;
- 中转 API、自建服务——填 Base URL 就行;
- 本地 Ollama——断网也能用,只要你显卡扛得住。
没有账号体系,没有”请升级到 Pro”,没有”该功能仅限会员”。
🥊 一问多答:让模型开个会
勾两个以上模型,同一个问题并行发给所有模型,分栏对照。
这是个非常实用的功能——不是为了找出谁最好,而是为了发现谁在胡说八道。
哪个模型答得靠谱,心里有数了;哪个模型一本正经地编了个不存在的函数名,也一目了然。

△ 点标题栏展开成完整模式:历史侧栏、消息级全文搜索、多模型对比都在这儿。
✏️ 提问可以改,回答可以重开
- 提问写错了?编辑该条提问,重跑这一轮;
- 回答不满意?原地重新生成,旧答案不丢,用
‹ n/m ›在历史版本间来回切。
这个功能治好了我”问错了只好新开一个对话,然后把之前上下文全部重讲一遍”的老毛病。

△ 长对话有轮次索引,点一下直接跳到对应那一轮。
📚 知识库:把你的资料喂给它,但绝对不喂到别人服务器
把 Word / Excel / PPT / PDF / 网页 / 文本丢进去,本地分块入库,提问时自动检索并注入上下文,界面上会礼貌地提示一句”已参考知识库 n 条”。
检索用的是 SQLite FTS5 + BM25,我故意没有引入向量模型——理由后面讲。
它还带了个「检索测试」面板:先验证召回效果,再决定要不要拿它回答问题。这个设计源于我自己的翻车经历:有些知识库工具,你问它,它答了,你完全不知道它是从哪段资料里编出来的。
🧩 技能:把”老规矩”变成自动执行
周报模板、代码评审规范、文案风格……这类”每次都要重复交代一遍”的格式要求,写成技能:
- 常驻的只有名称 + 描述,几乎不占上下文;
- 命中触发词(或在输入框手动激活)时才注入完整说明。
支持导入 SKILL.md / JSON / ZIP。说白了就是:让 AI 记住你的规矩,而不是每次都要你重新立规矩。
📊 图表:说一句”画个流程图”就行
mermaid 图表直接在对话里渲染:流程图 / 时序图 / 状态图 / 类图 / ER 图 / 甘特图 / 饼图都能画,4 种风格(跟随主题 / 科技蓝 / 莫兰迪 / 手绘风),复杂图自动切换到 ELK 布局。
支持全屏缩放预览、导出 SVG / PNG。写完技术方案顺手配张图,不用再开画图软件。
🎨 文生图工作台 + 📈 用量统计
内置文生图(含参考图生图),参数面板 + 画布 + 历史一条龙。
还有模型用量统计:累计 / 峰值 token、最长聊天时长、连续天数,以及一张一年活动热力图——我做完之后第一反应是”原来我上个月 8 号问了 47 次 AI”。

△ 文生图工作台:参数面板 + 画布 + 历史。
三、为什么它只有 6.4 MB
这是个技术问题,也是这个项目最有意思的地方。
我用的技术栈是 Tauri 2 + React,而不是 Electron。核心区别一句话:
Electron 是给每个应用打包一整个 Chromium 浏览器;Tauri 是向系统”借”一个 WebView2。
| 对比项 | 芝麻(Tauri) | 典型 Electron 客户端 |
|---|---|---|
| 安装包 | 6.4 MB | 100 MB+ |
| 浏览器内核 | 用系统的(WebView2) | 自带一整套 |
| 网络请求 / 流式解析 | Rust 侧 | 通常在 JS 侧 |
| 密钥存储 | Windows 凭据管理器 | 视实现而定 |
代价是什么呢?——目标机器上得有 WebView2。Win10/11 现在大多自带,没有的话安装包会联网下载。这是一笔很划算的交易:我不内置浏览器内核,所以我不需要为它付 90 多 MB 的房租。
除此之外,为了保持轻,我还做了这些事:
- 零外部依赖的检索:知识库用 SQLite 自带的 FTS5 / BM25,不引向量模型、不引 embedding 服务;
- 文档解析自己写:docx / xlsx / pptx 的解析全部手搓,新增的依赖只有
zip一个(GBK 解码复用了 reqwest 已经带的encoding_rs); - 重的东西按需加载:代码高亮、KaTeX、设置面板,以及体积最大的 mermaid(含 ELK 布局)全部按需分块,首屏不背这个包袱。

△ 服务商与模型管理:预设一键导入,模型可拉取、收藏、设默认。
四、关于隐私:数据不出门
这一点我很认真,不是宣传话术:
- 对话历史(含图片)、记忆、知识库、助手、生成的图片,全部存在本机 SQLite;
- API Key 存进 Windows 凭据管理器,不落配置文件;
- 工具调用的参数和结果不写数据库,历史里只留一条调用时间线;
- 除你配置的模型服务商、搜索接口和你自己的 MCP 服务器之外,不请求任何第三方服务。
另外它有个我觉得挺关键的设计——数据流防泄漏:
一旦某个会话里出现过本地敏感内容(比如你读了本地的文件),之后要联网搜索或者再发给模型时,它会再问你一次。
AI 工具最危险的时刻,是你以为它只是在聊天、其实它正拿着你的本地文件往外发。这层二次确认,就是给那个时刻准备的。
五、翻车现场(诚实版)
一个只讲优点的博客是广告,所以下面是它的坑,一个都不藏:
- ⚠️ 没有代码签名:我没买证书,所以首次运行大概率会看到 SmartScreen 那个蓝色的”未知发布者”警告。点”更多信息 → 仍要运行”即可。那个”未知发布者”就是我,一个没交保护费的独立开发者。
- 🙅 划词对管理员窗口无效:UAC 提升的窗口(比如以管理员身份运行的程序)取不到词。这是 Windows 的系统限制,不是 bug,我也无能为力。
- 🧠 知识库是 BM25 关键词检索:有意不引向量模型。所以它擅长”我记得文档里提过 XX”这种关键词型召回,不擅长”意思相近但用词完全不同”的语义召回。这是为了零外部依赖做出的取舍。
- 🪟 只有 Windows 版:只有中文界面,没有 macOS / Linux / 手机版。
- 💾 备份不含全部内容:一键备份包含会话、记忆、技能与生成的图片,不含知识库、助手和 MCP 配置。
- 🔤 一个至今没修的尴尬:提交历史里有条 commit 叫「docs: 鐣岄潰棰勮绉昏嚦鏂囨湯」——某次编码事故留的化石。我决定留着它,当作编码规范的反面教材。

△ 6 套主题、自定义头像与背景、工具授权策略。
六、技术栈与”被测试教育过”的部分
前端 React 18 · TypeScript · Vite · Tailwind CSS · Zustand
react-virtuoso · KaTeX · mermaid(ELK) · react-spring
后端 Rust · Tauri 2 · reqwest · rusqlite(SQLite + FTS5) · keyring
机制 SSE 流式解析 · FTS5 trigram 中文检索 · BM25 · MCP JSON-RPC · SendInput 取词两个值得说的工程细节:
1. SSE 流式解析比想象中难。 网络回来的不是一条条整齐的 data: 行,而是粘包、拆包、UTF-8 字符被从中间劈成两半……这套解析在 Rust 侧写死并加了单测,前端只负责渲染。
2. 消息级中文全文搜索。 用 FTS5 的 trigram 分词器实现,所以中文不用先分字切词也能搜。点搜索结果直接跳到那条消息——不用再”我记得好像在哪次对话里说过”然后一页页往上翻。
顺带一提,为了让它处于”能交付”的状态,我攒了:
Rust 219 个单测 + 前端 133 个测试(15 个测试文件)
每次提交跑 typecheck、vitest、vite build、cargo fmt、clippy -D warnings 和 cargo test。CI 比我自律。

△ 通用设置:快捷键、代理、自动更新(Ed25519 签名校验)等。
七、它适合谁(以及不适合谁)
适合:
- 每天高频问 AI 的人(写代码、写文档、查资料);
- 用国产模型 / 中转 API / 自建服务的人;
- 在意”我的对话历史不出本机”的人;
- 喜欢键盘流的人(
Alt+Space/Alt+Q,手不离键盘)。
不适合:
- 需要 macOS / Linux / 手机版的人;
- 需要向量检索的重型知识库的人;
- 需要笔记、小程序、IM 机器人全家桶的人;
- 需要团队协作与云端同步的人。
八、上手(三行命令)
前置:Node.js ≥ 18、Rust stable-msvc、Windows MSVC 构建工具。
git clone https://github.com/MOONKEY0510/ZHIMA-agent.git
cd ZHIMA-agent
npm install && npm run tauri:dev想要现成的安装包,直接去 Releases 下载那 6.4 MB:
🔗 GitHub 仓库:https://github.com/MOONKEY0510/ZHIMA-agent 📦 下载安装包:https://github.com/MOONKEY0510/ZHIMA-agent/releases
九、最后
这个项目的出发点特别小:我不想为了问一句话而切换窗口。
做下来才发现,一个”随唤随到”的 AI 助手真正解决的不是技术问题,而是心流问题——你不用离开当前的工作现场,不用重新找回思路,问完就继续干活。
它现在有 12 个内置工具、MCP 接入、知识库、长期记忆、自定义技能、图表渲染、文生图、多模型对比……但我最喜欢的仍然是那两个快捷键。
毕竟,工具最好的状态,就是你几乎感觉不到它的存在。
如果它对你有用,欢迎去 GitHub 点个 ⭐;如果它崩了,欢迎开 Issue——我会看,也会修,只是不保证什么时候。 毕竟这仍然是一个人在业余时间维护的项目。
B["窗口层
Rust · 全局快捷键 · 取词"]
B —> C[“前端 React 18
悬浮窗 ↔ 完整模式”]
C —> D[“Tauri IPC”]
D —> E[“Rust 后端”]
E —> F[“api/ SSE 流式 · 多引擎搜索”]
E —> G[“agent/ 上下文预算 · 记忆 · 知识库”]
E —> H[“tools/ 12 内置工具 · 文档解析”]
E —> I[“mcp/ stdio JSON-RPC”]
E —> J[“storage/ SQLite FTS5 + keyring”]
E —> K[“模型服务
任意 Chat Completions 兼容接口”]
================================================================================
-->如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





