返回博客

from-zero-one

从0到1:我们打造了一款完全离线的Mac AI助手

引言:一次让人想骂人的安装经历

OpenClaw火起来的时候,我也跟风试了一下。

作为一个写代码写了十几年的人,我自认为对安装配置这类事情有足够的耐心。读文档、装依赖、改配置、调参数,这些都是家常便饭。但那天晚上,我坐在电脑前折腾了两个多小时,最后还是没能让它正常运行。

坦白说,那一刻我挺想骂人的。

冷静下来之后,我开始想一个问题:这东西的理念确实不错——让AI在本地运行,保护隐私,还能操作本地文件。但为什么非要把体验做得这么复杂?安装像解谜,配置像写诗,启动像等一艘船靠岸。对技术老鸟都这么不友好,普通用户怎么办?让他们先拿个计算机学位再使用AI吗?

于是我冒出一个念头:能不能做一个完全相反的版本?

极简、快速、打开即用。不需要读半个小时的README,不需要在终端里敲十几行命令。下载,安装,打开,开始对话。就这么简单。

这个念头,就是Frily的起点。

一个周末的原型

第一个版本我花了一个周末。

目标很简单:让一个本地AI模型能在Mac上跑起来,能聊天,能回答问题,不用联网。至于什么UI精致、功能丰富,统统不在考虑范围内。能跑就行。

结果出乎意料地顺利。借助llama.cpp和Ollama的生态,很快就在本地跑通了一个小模型。虽然回答质量远不如ChatGPT,但它确确实实是在我自己的电脑上运行的。断网也能用,数据不出设备,这种感觉很踏实。

这个原型跑通的那一刻,我意识到两件事。

第一,本地AI的技术门槛已经很低了。社区把最难的部分都解决了,开发者只需要做最后一公里的整合。

第二,这件事值得认真做下去。因为我发现自己开始期待用它来处理一些不愿意发给云端AI的事情。比如整理报销单、总结会议录音、梳理项目笔记。这些数据太私人了,我不希望任何第三方看到。

从原型到产品:技术路线的三次选择

原型能跑之后,我开始认真思考怎么把它做成一个真正的产品。这个过程经历了三次技术路线的选择。

第一次考虑的是跨平台方案。我当时想,既然做了,能不能同时覆盖Windows和Linux?Node.js加Web技术是最快能想到的方向。但评估下来,问题很明显:Node本身就不轻量,再加上Web UI的渲染开销,整个应用还没开始做AI推理,就已经占了大量资源。这和"极简、快速"的初衷完全背道而驰。放弃。

第二次考虑的是Electron。理由很充分:生态好、开发快、跨平台。但Electron的臃肿是结构性的——它打包了整个Chromium。一个AI助手本身就要占用大量资源做推理,如果UI框架再吃掉两三百兆内存,对用户体验是双重消耗。放弃。

第三次,也就是最终的选择:Rust做底层引擎,Swift和SwiftUI做前端界面。这条路最辛苦,但换来的是极低的内存占用和流畅的交互响应。AI模型需要硬件资源的时候,不会被UI框架抢走。应用启动快,操作跟手,和整个系统融为一体。

回头来看,放弃跨平台的念头是最关键的决定。它让Frily从一开始就走上了"为一类设备做到极致"的路线,而不是"在所有设备上都勉强能用"。

意外收获:新的想法开始涌现

当这个本地AI助手真的跑起来之后,一些新的想法开始冒出来。

既然AI能理解自然语言,那能不能让它自动帮我整理新闻摘要?每天打开电脑,把关注的RSS源喂给它,它自动生成一份简洁的简报,告诉我今天发生了什么事。

既然AI能生成结构化内容,那能不能用它做幻灯片?输入一个主题,它先列大纲,再填充内容,最后导出一份像模像样的PPT。整个过程几分钟完成,不用打开Keynote或PowerPoint,不用调整字体和对齐。

这些功能在Frily上陆续实现了。它们不是什么革命性的创新,但在一个完全离线的环境里完成这些事情,体验确实很不一样。没有网络延迟,没有上传按钮,没有"您的数据可能被用于模型训练"的条款。所有事情都在你自己的电脑上发生,做完就完了,不留下任何痕迹。

为什么现在是做本地AI最好的时机

回顾这个项目的整个过程,一个感受越来越强烈:现在做本地AI,时机刚刚好。

硬件层面,Apple Silicon让Mac的AI推理能力有了质的飞跃。英伟达和摩尔线程在推进AI PC概念,未来的个人电脑都会配备AI加速单元。本地AI的算力瓶颈正在被硬件厂商主动打破。

模型层面,量化技术越来越成熟,GGUF、GPTQ这些格式让大模型能压缩到普通设备可以承受的体积。HuggingFace和Ollama社区发展迅速,开发者不需要从零开始训练模型,直接拿现成的就能用。

用户层面,越来越多人开始在意数据主权。云端AI很方便,但"方便"和"放心"有时候是冲突的。本地AI正好提供了一个两全的选项。

一些还未实现的想法

文章写到这里,其实还有很多想法停留在草稿阶段。

比如RAG的深度整合。让AI能检索本地文档,基于用户自己的知识库回答问题。这件事在技术上已经可行,但如何做到体验自然、响应及时,还需要进一步打磨。

比如更智能的自动化工作流。让AI能根据用户的日常操作习惯,主动提出优化建议,而不是被动等待指令。

这些想法之所以还没有落地,不是技术障碍,而是我对产品形态还不够满意。Frily的核心原则是"极简和快速",任何功能如果让应用变得臃肿或复杂,就需要重新思考。

结语

Frily目前已经在Mac上稳定运行。你可以在 frily.work 下载体验。

这篇文章记录的,不是一款完美的产品,而是一个真实的故事。从一个让人恼火的安装经历开始,到周末原型,再到现在的正式发布。我最初的动机很朴素:验证"极简、快速"的本地AI助手到底能不能实现。

事实证明,它不仅能实现,还带来了很多预期之外的可能性。新闻摘要、幻灯片生成、自动化工作流……这些东西不是提前规划好的,而是基座搭好之后,自然生长出来的。

如果这个故事能让你对本地AI多一些兴趣,或者对"数据属于自己"这件事多一些在意,那就足够了。