mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3569 字
10 分钟
我做了个 6.4 MB 的 AI 助手,它比我的输入法还轻
2026-10-04
2026-10-08

我做了个 6.4 MB 的 AI 助手,它比我的输入法还轻#

一个快捷键唤出、问完即走的桌面悬浮窗助手:芝麻(Zhima) GitHub:MOONKEY0510/ZHIMA-agent


一、导火索:我受够了「切窗口」#

我用 AI 的日常是这样的:

  1. 在编辑器里写代码,报错;
  2. 复制报错;
  3. Alt+Tab 切到浏览器 → 找到那个”永远不关的 AI 标签页” → 万一浏览器重启过,还得重新登录;
  4. 粘贴、提问、等回答;
  5. 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 MB100 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 兼容接口”]

================================================================================
-->
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

我做了个 6.4 MB 的 AI 助手,它比我的输入法还轻
http://www.zhima778.cloud/posts/002/
作者
知不知马
发布于
2026-10-04
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录