ChatFly 开发实录 ①|五天,从零到一个能卖的 Mac 工具

先报数。

5 天。57 次提交。2.6 MB 的安装包。 一个全局热键、一枚悬浮胶囊、说完话文字直接进光标所在的输入框------支持任何 App。

这不是从零开始的五天。起点是一个叫 VoiceType 的开源底座:一个 Python 引擎拖着本地语音识别模型,能跑,但重得像拖着一头大象------用户装个工具,先下几个 G 的模型。我们要做的是把它换成一个普通人愿意装、装完就离不开的东西。

这个系列就是这五天的实录。不美化,不摆拍,包括被用户骂的那几段。

一、这是个什么东西

ChatFly 的核心体验一句话:不必想好,开口就好。

按下右 ⌥(或者点按一下进入免提模式),说人话,松开,一两秒后,你的话以通顺的书面文字出现在你正在打字的地方------微信、邮件、IDE、终端,哪儿都行。

中间发生了什么,用户不用知道:录音、人声检测、分段、语音识别、轻整理、模拟 ⌘V 上屏。他知道的只有那枚胶囊的状态:● 在听、◎ 在识别、◌ 在润色、✓ 完成。

产品上有两个关键取舍,值得先立此存照:

取舍一:不再 100% 离线。 VoiceType 的信条是纯离线,代价是体积和识别质量。我们反过来:识别走小米 MiMo 的 ASR 模型,润色走它的语言模型,音频和文本会出网。这意味着隐私边界必须对用户明说------设置页第一屏就写清楚什么数据去了哪里。离线换来的隐私感,我们用"诚实"来还。

取舍二:允许润色,但分层。 语音工具有个经典争论:转写要不要"整理"?我们的答案是分模式------直出模式 一个字不改,说出来就是字,零延迟零幻觉;润色模式去掉口水词、补标点、通顺语序,但禁止改语义、禁止翻译、禁止替你说话。整理是产品功能,篡改是产品事故,两者的边界写进了提示词,也写进了护栏。

二、它怎么长出来的

粗线条时间线(细的都在后面各篇里):

  • Day 1(9/23):Tauri 壳起起来了,热键、HUD、托盘、设置界面,一天内从"能跑"到"能用"。同一天撞上权限三件套、剪贴板竞态、左 Alt 误触。
  • Day 2(9/24):最乱的一天。手势交互(按住/点按/免提/双击切模式)打成一团,HUD 状态机失控,空音频把识别模型喂疯,润色模型开始答非所问。也是产品哲学定型的一天:双模式正式确立,思考默认开。
  • Day 3(9/25):品牌定了(一只线描的半边蝴蝶),打包链路打通(DMG + Apple 公证),自动更新接上,营销作业开题。
  • Day 4-5(9/26-27):发布准备------landing page、竞品调研、slogan 打架("不想被替着说话"被否,"不必想好,开口就好"上位)、SEO 词表、润色透明度。
  • Week 2(9/30):真实使用暴露深水区------ASR 长音频静默截断、一个缺失的 NUL 吃掉长文本、网关抽风。全部根治,这一批坑是这个系列里最硬核的三篇。

架构上的得意之笔一句话带过(第 2 篇展开):关键链路住在 HUD 窗里。录音、识别、上屏全部跑在一个透明常驻的小窗中,主窗口只是设置界面,关掉它、把它扔到别的桌面,口述一切照常。为这个决定付出的代价和换来的稳定,值得单开一篇。

三、这个系列怎么读

全系列规划 14 篇,三季:

第一季 · 从 0 到 1 的混乱与秩序 2. 把 Python 引擎扔掉那天(架构重写) 3. macOS 权限三件套的暗坑 4. 一个热键的一生(手势与快捷键的混乱史) 5. HUD 状态机:我说了三遍的需求

第二季 · 识别质量之战 6. 不说话,它就疯了(VAD 与空音频) 7. ASR 把我的话吃了(长音频静默截断) 8. 一个 VAD 的自我修养(分割点与测试) 9. 教模型念对你的名字(词库与提示词) 10. 数字的翻译学(中文数字转写的边界) 11. 润色到底润了什么(思考、护栏与透明度)

第三季 · 发布与商业化 12. 从源码到 DMG:公证地狱 13. 一个独立开发者的营销作业

番外 14. 网关抽风的那天:韧性设计 15. 说完就出:停顿即转写 16. 按下右 ⌥ 之后发生了什么:架构全景(系列地图)

顺序上不必按编号读。推荐三个入口:第 7 篇 (纯排查故事,最有传播力)、第 5 篇 (交互设计的血泪)、第 12 篇(Apple 生态的坑最实用)。想看全貌的,从本篇顺着读就行。

每篇的骨架是固定的:事故现场(真实日志)→ 走过的弯路 → 根因 → 修复与验证 → 一条可迁移的经验。物证都是真的------日志、实验数据、测试输出、commit 记录。

四、为什么值得写下来

独立开发的叙事里,最缺的不是成功学,是过程的真相。所有人都发"上线大吉"的截图,没人给你看第 40 小时那个卡死两分钟、历史记录全丢的夜晚。

而真相恰好是最有用的部分。这个系列里每一个坑------静默失败、UI 承诺、越界读、网关抽风------都不是语音工具独有的。它们是"调用一个不可控的服务端,给一个要求苛刻的用户做产品"的通用困境。你看完某一篇,未必做语音工具,但下次撞上类似的墙,大概能少熬一夜。

经验

产品的哲学不是文档里的条目,是取舍时的本能。"直出模式一个字不改"和"隐私边界明说",都是在具体事故里逼出来的------先有事故,后有哲学。


本篇是《ChatFly 开发实录》第 1 篇。下一篇:第 2 篇《把 Python 引擎扔掉那天》。

相关推荐
海宇数据1 小时前
零信任架构实战:基于海宇企业综合风险报告构建自动化供应商资质审查网关
运维·人工智能·架构·自动化
骇客野人1 小时前
企业4A架构(业务架构、应用架构、数据架构、安全架构)完整设计与搭建方案
安全·架构·安全架构
云策数链1 小时前
用友U8+ UAP开发平台技术架构
架构·erp·用友·用友u8·云策数链
霍格沃兹测试学院-小舟畅学1 小时前
AI Agent 运行时架构:Harness、Loop 与任务调度机制
人工智能·架构
AAA代码批发商1 小时前
DAYS 56【Linux 驱动深度】SPI 子系统驱动开发全指南:从架构、核心数据结构到设备驱动实战
linux·驱动开发·架构·内核开发·spi 子系统
m0_587383002 小时前
无人自助拼豆系统开发实战指南 核心功能架构搭建与落地经验分享
java·经验分享·spring·小程序·架构·需求分析
水圈模拟2 小时前
从"数字花瓶"到"数字实验场"
人工智能·架构
星云低代码开发平台2 小时前
企业 AI 连接架构:iPaaS、网关、RPA、MCP 与连接器边界
人工智能·架构·rpa·企业ai
nagualky1232 小时前
GPT-4 系列退役在即:一套可回滚的模型迁移验收法
java·开发语言·ai·架构