最近花了差不多两个星期,开发了一个小说阅读器:PlotMapAI,感慨万分,现在的 AI 是真的强大。我基本上没有修改过 AI 生成的任何代码,一直在提需求,只有一些比较简单的东西自己手动微调了一下。今天也发布了 v1.1.0 版本,算是告一段落了,可以来写一下一路上踩过的坑。

Tokens

Tokens 不够是最大的坑,我本来用的是 Antigravity,弄了一个学生账号,免费试用一年的 Google AI Pro。但是 Google 对额度的管控越来越严格,从一开始的五小时刷新额度,到后面一个礼拜刷新一次额度,而且额度少得可怜,等于说我用完了要么换个账号,要么就只能等一个礼拜。非常折磨人,也没办法接受。

然后我开始研究国内的 IDE,试用了字节的 Trae 和腾讯的 CodeBuddy,我发现 Trae 模型好像停止更新了,不知道为啥没有最新的模型。而腾讯有最新的 GPT-5.4,用了一下感觉也挺好的,直接买了一个会员,结果没用半天又用完额度了……

最后研究了一下拼车,结果在闲鱼上发现 Codex Business 会员(虽然卖家一般都会标注是 team 账号),只要七块钱一个月。搜了一下 Business 账号的限制,发现 Business 管理员只拥有审计员工账号操作日志的最高权限,聊天记录之类的按照官方的说法还是私密的,而且我只是写个人的开源项目,所以没啥顾虑,直接创建了一个新账号上车了,七块钱能用一个礼拜也算赚了。

然后才发现之前过的都是什么苦日子,相对于 Google 来说,OpenAI 实在是太大方了。后面用到额度不够的时候,还发现一个账户可以直接加入多个 Business,额度不够直接切一个工作区就好了,甚至 session 也可以复用,比 Google 真是不知道高到哪里去了。

使用 Codex 和 VSCode 官方插件,很快就完成了 PlotMapAI 75% 的功能。非常之快,但是为什么 v1.1.0 版本拖到两个礼拜才完成?因为剩下的 25% 真的是折磨。

重构

折磨就是从细化细节开始的。只要开始细化细节,tokens 就不够用了。没错,就是这么恐怖。

项目一开始,我提了需求和想法,然后根据 AI 的建议,技术选型选了 Flask + React + SQLite。结果刚开发完雏形,75% 的功能实现了,突然发现其实根本不需要后端,数据直接存 IndexedDB 就好了,而且所有的数据都在用户本地,更适合这种私有化部署的项目。纯前端项目的话,部署上也有很多可以白嫖的资源,客户端也可以直接支持 PWA,简直完美。

但是出于节省 tokens 的想法,还是准备放弃把项目重构成纯前端的计划了。结果就在这时,小米发布了 mimo v2 pro。当然这并不是重点,重点是首周免费(现在已经延期成首两周免费了)。我直接试用了一下,感觉勉强也算 t1 档位,用来做一些简单的事情还是没问题的。所以直接用 Claude Opus 4.6 (没错,还是用 Antigravity 的额度)做了一个重构计划,然后用 kilocode + mimo v2 pro 来实施。最后成功提交

有了第一次重构,然后就开始一发不可收拾。不断新增需求,然后感觉很臃肿,开始拆分,再加需求,再拆分重构,反复循环。简单的部分直接用 mimo v2 pro ,复杂的、难得、需要有设计的地方用的 gpt 5.4。中间又经历了大规模清理和模块化:重命名了 API 实体,重构了 epub 解析模块、AI 分析模块等等。还迁移了一次架构,从扁平的 src/services/ + src/pages/ 结构迁移到了领域驱动设计。

但是重构并不是万能的。重构的目的一般都是为了增强可维护性,提高可扩展性,提升可读性等等,重构手段一般是拆分、抽象等等。我一边开发,一边学习别的项目的架构。我在开发新功能的时候,发现书的排版布局确实是个大问题,有些地方改了很多遍都没有达到我想要的效果。于是我开始研究同类项目,找了一个 Readium 的 ts-toolkit 开始学习。我创了一个分支,参照 ts-toolkit 的思想重构整个阅读模块。结果一个 bug 一直改不好,有些效果甚至没有重构之前的效果好。因为本身也是为了解决这些问题进行重构的,所以我有点崩溃。我有了一个新想法,干脆按照新架构直接重写吧,这样可以直接抛弃很多技术债。

于是我开始让 AI 分析当前项目的技术架构,还有一些技术细节,为重写做准备。结果 AI 的分析结果是:过度工程化,过度设计。

我有点懵,原来不是架构越高级越好。我仔细看了分析报告,最终决定直接放弃这个分支,也不重写了,直接从 dev 分支延续之前的架构进行开发,目标转变成先做到能用。

然后又开始吭哧吭哧地干,终于是完成了这个阶段,发布了 1.1.0 版本。

教训

今天发布了 1.1.0 版本之后,我又回头看了下合并的 PR,发现除了新增功能外,还有一些是可以避免的,比如一些代码规范的问题、单文件代码超过 1000 行、膨胀的模块级全局单例、复杂度过高的 hook,这些至少可以通过 ESLint 配置更早暴露出来,还是吃了没有经验的亏,浪费了很多的时间和 tokens。

又找了一些项目看了一下,后续 ESLint 这块准备直接用现成的 阿里巴巴前端规范

除了这些之外就是还得继续学习设计模式,不过这些也都不是最重要的,当前最重要的还是先找工作。没有真实的业务,还是很难想到要写什么东西,现在这些纯粹就是当练习的玩具了。