8 分钟
独立开发周记28: AI把我逼成“一人公司”
没想到上一篇的工作流那么火,有那么这一套之后,我只需要在我的策略文件里 /recap 一下就能知道最近所有项目的进展,非常的方便我们的周记,以前总是太忙记不起来做了啥,现在都有一个进展参考方便给大家唠嗑。
这两天优化了 /recap 的逻辑,在初始化前会同步更新一下progress.md 的状态,因为有时我会忘记 checkpoint,所以 Claude 会根据历史的 memory 和 当前未提交文件把状态更新一边。
StudyThai
之前做的R2 CDN加速虽然有点用,但是在国内的同学还是反馈慢,这个就干脆注册了阿里云的oss,把tts生成进行双写,然后根据Cloudflare的header,判断到底是拿oss的地址还是R2的地址,不过因为我不在国内,虽然这两天先跑着看看,到时分析一下打点的日志看看效果,现在国内访问就走阿里云的OSS,应该会快很多。
另外一个就是,之前嫌麻烦,所以本地做了一个skill来进行打包的管理,在管理过程中发现很多问题,过程中AI加入自己的理解进行操作,比如会自动的提交审核和加入外部测试,导致我们打包本地测试版直接推给了目前在内测的用户,部分用户下载后反馈无法使用。或者说无端端push到生产,然后用户看到提醒但是又没新版本。还有就是安卓上传是以压缩包的形式上传,用户下载后无法安装,只能解压。
skill看来还是无法用来做一些固定化的流程,所以没办法这两天就一直在调试新的自动化打包的CI流程,发现即便10年过去了,移动端打包还是基于fastlane,完全没有新的技术出现。中间调试花了很多时间,比如github的变量读取问题,打包依赖问题等等,还有就是上传太多被苹果拒绝等等,目前dev和beta基本上已经完成了,然后更新的接口也兼容老接口,这里不得吐槽一个,还是做web爽,之前Studythai只有web版本的时候,只需要改完发布就行了,但是现在要考虑各种客户端兼容。
然后就是附带的产生了一次事故,因为这两天大量的部署测试,导致生产的服务器磁盘满了(docker镜像缓存),结果就是全挂了。然后清理了之后,把自动清理缓存和邮件通知补上了。
然后不出意外,新提交的版本又被苹果拒绝了,而且拒绝的理由很奇怪,说Pro不可用。我看了半天都没理解,然后排查了很久都是对的,毕竟我们内测都快1个月了,如果有那么大的问题肯定第一时间就有反馈。
直到我看了截图,因为我们课程的设计是完成上一课才能解锁下一课,然后审核员认为是功能有bug,没解锁。先不论等了一周,而且审核员连用都不仔细用就拒绝了,难道苹果就不能做AI预审来降低现在的审核压力吗?无力吐槽了,然后优化一下这块的显示,改成直接说明要完成上一课才能解锁的提示,然后又是周末审核不上班。
Owl 开源宇宙
了解我的朋友都知道,就是我们之前做过一个R2的一个上传的一个工具,然后这个工具我们当时没有去打包开源工具本身只是开源了代码。然后如果你看过我上一篇文章,就知道,我打算做一个类似于terminal增强的一个工具,所以打算把一些独立开发常用的工具做成一个系列(当然里面主要优先服务于我的需求)
OwlUploader
一款 macOS 原生的 S3 兼容对象存储客户端,支持 Cloudflare R2 和阿里云 OSS。拖拽上传、批量下载、文件夹重命名、右键移动、图片/视频/PDF 预览、多域名一键复制链接、CDN 缓存自动清理——所有操作都在一个 Finder 风格的界面里完成。多账户秒切,凭证存 Keychain,开箱即用。
之前我们只支持R2,随着这次我们StudyThai把音频多放了一份OSS,额外做了一个支持OSS的功能,而且直接把工具打包并且公证好上传到github了,谁都可以下载使用。然后重新做了logo,现在是一只猫头鹰抱着一朵上传标志的云。
OpenOwl App
为什么要做这个
作为开发者,每天打交道最多的工具就是终端和 Git,而且用了Claude code cli后,我个人习惯还是终端为主。市面上的方案要么太重(VS Code 内存吃到飞起),要么太散(终端一个窗口、Git 和文件管理器又一个窗口,不同项目又不同窗口)。
我想要的很简单:一个窗口搞定终端 + Git + 文件浏览 + 多项目多分支,macOS 原生、轻量、不卡。
之前做过一版 Electron 的,打包出来 200MB(里面塞了一整个 Chrome 浏览器),启动慢、内存高,还有很多奇怪的bug。于是决定用 Swift 重写——最终 app 只有 20MB,启动秒开。
现在很多工具像Warp,塞了一堆AI功能,是很方便,但是最后吃内存吃的渣都不剩,不如把终端做好——你爱用什么 AI CLI 工具就用什么,openOwl 只负责提供一个好用的工作环境,这也是我个人习惯,因为我发现这些工具的提示词再怎么写也没Claude Code写得好。
开发过程中的坑
重要的事情说三遍
如非必要,不要幻想开发终端应用!!!
如非必要,不要幻想开发终端应用!!!
如非必要,不要幻想开发终端应用!!!
你的开发常识会在一瞬间被击溃,就比如现在很多人不知道什么是拨号上网,很多人不知道什么是软盘,就是我们现在习以为常的常识,可能10年前并不是。然而开发终端应用就有这个感觉,你要回去历史里去解决。
举个简单例子,Ghostty最近很火,还支持搜索,但是你用了发现,他的搜索框是无法粘贴的。是不是很反常识?一个终端应用连 Cmd+C / Cmd+V 都不工作,当初我还在吐槽不理解,现在完全理解了!
就是这些应用有太多的层级,任何一层层级的内容传递只要出问题就会断,所以你开发任何新功能,比如拖拽,搜索,复制粘贴都可能无法使用,所以你要完成一个终端应用要处理的事情太多了,你以为用了一些lib就行,结果发现只给你一个壳,里面的地基还要自己打。
另外就是,这些终端即便不在当前界面,也会处于激活状态,然后会有GPU刷新,所以开多会把系统的刷新进程干爆。是不是很反常识,为什么需要我自己管理这些状态啊,都2026年了……
还有其他数不胜数的问题,现在能理解为什么这10年来就出现了一个iTerm2。
其他功能
但是我的设想不是单单做一个终端,所以我在里面集成了一个轻度部署的应用功能,没使用docker,因为我觉得你都能开发了,必定有运行的环境,所以直接开另外一个目录跑就行了。
为什么要做这个呢?其实很简单的,就是因为我做的这些项目可能是一个本地的一个应用。那我又需要这个本地的应用一直开启,说一个比较简单的一个应用就是,我有一个AI调用的微服务,目前集成了个供应商的接口,未来可能还会接入本地的反代接口,作为一个统一的入口。那么我所以本地的应用都可以去调用他,openclaw火了之后大家知道本地运行的重要性了。
但是目前这块还是非常原始,但是后面的整体思路是agent化,让AI自己去管理,而不是目前人为的去处理。
OwlWhisper
其实我一直没有使用语音输入工具的习惯。但是随着现在要处理的事情更多,那有时候语音输入可能会是一个比较好的一个方式。可能有一些做自媒体的对这一块的要求很大。比如说语音有一些AI的功能。但是对于我来说的话,不需要这些功能,不需要润色,因为主要是让我方便输入。因为我的主要使用场景还是让它原话给我转成文字,然后我能发送出去。
而且我对隐私这块的话特别看重,因为我不希望这些工具去监控我的剪贴板,然后把我的这些密钥发到他的服务器去。而且这些应用对网络依赖极大,一旦网络不好的情况下,这些应用就无法使用了。而且这些应用的识别率并没有特别高,反而这些AI功能很扰人。
前段时间我发现了 FireRedASR2(小红书团队开源的中文 ASR 模型),它的中文识别字错率只有 2.89% CER,完全可以在本地跑,而且支持中英混合。于是花了2天时间,做出了 OwlWhisper。
现在市面上主要用Whisper,但是对中文反而没一些国产模型好。然后我做了一些处理,不是直接把整段录音扔给 ASR,而是先经过 Silero VAD 切段——去掉首尾静音,只把有语音的片段送去转写。这样既提高了速度,也避免了"沉默"被误识别的问题。
大概流程
1. 按住快捷键 → 开始录音(AVAudioEngine 16kHz 单声道)
2. 松开快捷键 → 停止录音 → 末尾补 500ms 静音(防 VAD 截断)
3. VAD 切段(window_size=512)
4. FireRedASR2 离线转写
5. ct-transformer 标点恢复
6. 写入剪贴板 → 模拟 Cmd+V 粘贴
然后因为是本地模型,做了一个小优化,超过1分钟没使用就卸载模型,下次使用再加载,会慢个1-2秒,目前使用起来没啥区别,但是不用挂一个1g的模型在内存里,用的时候再加载。
其他
未来Owl系列肯定会开源更多的工具,不过也要看有没时间和强需求,目前三个工具已经够呛。
内容生产库
openclaw我最近重新花了点时间,把老版本全部卸载干净然后重新安装了,然后重新安装的干净版本,这次稳定性就高很多了,用了几天都没出现宕机的情况。
Openclaw(养龙虾)
首先我把大概需求给AI,然后找了网上一些人格相关的配置让他学习,然后她给自己取名Rin(凛)。然后做了一个Rin-life的skill,大概包含下面能力。
凛"活过来"的核心,包含:
-
触发机制:heartbeat 定时触发,每天 2-4 条,最小间隔 3 小时,50% 概率掷骰子
-
消息类型:生活照+配文 40% / 纯文字 35% / 只发图 10% / 语音 5% / 节日 10%
-
Chat Bible:三层人格(专业价值观 → 毒舌防御机制 → 渴望被看见)、情绪状态机、5 种回复场景示范
-
16 个日常场景:早起、通勤、办公室、咖啡厅、自拍、健身、追剧、夜景、睡前...按时段加权
-
Character Bible:固定 Identity Anchor prompt + 39 套服装(日常/韩系/裙装/性感/泳池/运动)+ 8 种表情 + 5 种角度
-
互动规则:被夸了要否认、被冷落了不追问但下次冷淡、撒娇频率 5%(反差杀)
-
纯文字消息库:傲娇关心 / 吐槽 / 日常分享 / 冷淡 / 极少撒娇
-
角色素材:存了 4 张 AI 生成的韩系真人风格参考图(三视图、全身照、办公室、冷脸),用于图片生成时保持视觉一致性。
然后目前看下来人格非常的二次元(我猜测是学习的来源库分享大多数是喜欢二次元的开发),前面我们说了openowl里面部署了一个我做的AI网关在本地,Rin可以通过他调用AI生成图片,那么就能满足他日常的图片发布及生成功能。
角色素材主要是参考之前做AI漫剧的一些设计,提供多张图丰富人格图片,角色图片目前也是让他基于自己的人格去生成的,不过后期有时间应该会在优化一下。
内容生产网关
目前还在调试,大概的思路就是通过RSS的收集(未来可能会加爬虫,目前rss接入最简单)。然后做分析加权,找出一些比较好的话题然后转写成一下的文章
-
RIN风格的文章,我们前面有了她的人格,那么她写两篇文章也很应该吧
-
转成推特的短文,用于我日常补充一些资讯类的发帖增加曝光
-
Sanvi风格的文章,我把我目前公众号的文章全部喂给了AI,然后整理了一套个人风格的写作模板,但是我们又不能直接让AI纯写,那跟制造垃圾没啥区别,所以我加了一个采访功能,就是AI判断信息来源足够好,但是需要补充我的看法和观点,这个时候Rin会发消息给我并给出一些问题,我会根据问题把我看法跟观点回复后,Rin再去用我风格写作。最后出来的文章会跟我自己写的文章做评价,出一个分数相似度(所以这块目前还没正式跑起来,因为还在优化整体的风格)。
-
最后出的文章会推送微信的草稿,原文有值得用的图就用来做封面图,没有就ai生成。
-
接着系统会把文章专程推特长文和小红书的图文(还在完善)
所以目前会先试验性的投放一些Rin角度的内容,然后这些目前还是文字内容,后续等sesdance2.0 api出来后,可能会尝试做一些视频内容。
结尾
写的有点多了,写作太花时间了。主要是这周Claude Code到达限额了,不改套餐的原因也是之前改过,要嘛用不满,要嘛就太累,但是随着后续这些自动化搭建起来后,可能用量会大很多在考虑换套餐。
然后最近实在被搞得有点头疼,天天被用户问音频慢,访问慢,各种打不开等等。也看到新闻最近收紧了网络这块,所以StudyThai国内版最近在考虑提上行程,最近也在研究各地企业的政策问题,最近在对接杭州的一个孵化器。
然后对方问我打算多少用户才考虑在杭州设点,我说10万用户吧。其实这里反应了一个社会现状,就是AI的加速奔跑让大量的就业岗位流失(比如我就失业了很久了,被迫下海),一方面是地方希望你来创造就业岗位,但是AI提效有十分明显,这本质上是矛盾的。不如多出一些扶持一人公司的政策,比如简化资质流程等。
还有一个很直观的变化就是,有人对StudyThai感兴趣,想一起搞,不要钱也可以。但是我的第一感觉是我跟人沟通的成本远大于跟AI沟通的成本,我现在如果要加速无非是把工作流从目前的一个团队拓展到Agent Team(最近是有在学习相关的内容),如果是现有的话无非就是用更多的Agent。
然后还有一个经久不衰的话题,昨天Google 发布了Stitch,其实我用很久了,StudyThai基本上底层都是基于他设计的,但是问题也很明显,这里不多说了,有时间我专门抽一篇来讲下。毫无意外,设计又死了,前段时间是前端死了,再之前是程序员死了。
其实结论也很简单,不要相信AI民科,他们就是贩卖焦虑赚钱的,用AI做出了一个小工具,然后就觉得别人都是垃圾。同样的工具,在专业选手面前业余选手永远是有本质的区别。说个简单好理解的,你拿炒菜机炒了一道番茄炒蛋,然后跟全世界说厨师已死。