一份Word,两个AI,12小时做出一个能上线的App
事情的开头特别不像一个技术故事。
2026年5月23日上午11点,我往Claude Code里丢了一份中医复习资料,问了一句特别朴素的话:“这份资料,24小时内怎么快速记住?”
3.7万字,1700行,一份期末考试的回忆版题库。从那一刻开始计时,到次日凌晨0点51分被我叫停——总共12.5小时,这个Word文档变成了一个挂在域名上、能注册、能答题的网站。里面塞进了186个知识节点、589道题,还自动配上了图。
全程我没写一行代码。干活的是两个AI,白天Claude Code,晚上Codex。前些天我把两段会话记录、Git提交历史全扒了出来,对着UTC时间戳逐条还原。
还原完挺上头的。有些东西,真值得说道说道。

最贵的不是写代码,是头20分钟
11:00–11:20,20分钟。
从“想记住一份资料”到“决定做个App”,方向硬生生拐了4次弯。
AI一开始老老实实给了套“24小时速记时间表”——几点背药,几点刷题,几点睡觉。我说时间限制是假的,我只是想找最高效的记忆路径。AI推倒重来。接着我又说,我其实在做一个学习网站。AI再调整。然后我砍了第三刀:“先把文字做好,多模态以后再说。”第四刀更狠:“别把我们的时间尺度强加给用户,按真实学习行为来。”
这四刀砍下去,产品才算立住了。前三次全是我自己做减法、纠偏——方向由人定,方案让AI出。
大多数人用AI写代码,上来就喊“给我做个App”,然后对着一堆能跑但不对味的代码发火。我这次不一样,把“做什么、不做什么、为谁做”先聊穿了,才让AI碰键盘。AI随即给出了几个判断,后来成了整个产品的地基:
这份资料的本质是5层信息架构(世界观、实体、关系、事实、应用),不是“单选、多选、简答”。 产品定位是“把碎片重构成可点亮的知识网络+多邻国式主动检索”的混合体,不是题库刷题器。 最关键的价值观:“工具而非习惯机器”“状态而非任务”——砍掉打卡、每日目标、Push催回,因为目标用户自带动机。
后来9个多小时几乎没返工。省下来的几天,全靠这20分钟。
我没急着让它写代码,先让它写了30份文档
11:20–11:53,半小时。
想清楚之后,我给的指令很明确:落实项目文档,要能改、能追踪、能记录进度。
AI搭了一套分层文档——产品哲学、信息架构、数据模型、功能规格、决策记录,一口气30份。每份文档头上挂着状态标记:草稿、已确认、进行中。还有一类叫ADR的文档,全称是架构决策记录,规矩就一条:只增不改——决策变了写一份新的,引用旧的,永远留着推理链。
11:53,这套文档体系完成第一次Git Push,commit d9d5c7f。
说实话,当时我也觉得有点重。一个人的活儿,写这么多字,至于吗?
后来被打脸了。
AI的记忆是会断的。聊着聊着上下文满了,它就忘了前面说过什么。但文档不会忘。当天晚上我换Codex接手——它怎么知道做到哪了?打开milestones.md读一遍就知道了。两个完全不同的AI能无缝交接同一个项目,靠的就是这堆字。

文档不是给人看的仪式感,是给AI用的硬盘。 而且ADR不可变这条太值了——任何时候我都能翻回去看“当初为什么不要打卡功能”,完整的推理链还在那。
框架版本,差点把项目炸了
14:33动手搭脚手架,17:16 M1跑通,这一段将近3小时,是整个项目最重的一块。
文档里写的是Next.js 14。脚手架一装,实际是16。React 19、Tailwind 4、Prisma 7——全是大版本,全是Breaking Change。
Tailwind 4连配置文件的写法都变了,不再有tailwind.config.ts,改用@theme。Prisma 7的数据库连接字符串从schema挪到了prisma.config.ts。Auth.js beta.31强制要求Nodemailer provider配server字段。
最离谱的是,Next.js 16脚手架自己生成了一个文件,里面一句话直接写给AI看的:This is NOT the Next.js you know。这不是你认识的那个Next.js。
读到这句我乐了。框架都开始反过来防AI了。
为什么会这样?AI的训练数据有截止日期,生态比它脑子里的版本新得多。它要是闷头按记忆写,就会用一年前的API写一遍、报错、再重写——白烧时间。
Claude的处理是对的:看到警告,立刻回头把tech-stack.md的版本号全改对。之后凡是碰Next.js、React、Tailwind的API,先去查MCP或者node_modules里的本地文档,绝不信自己的训练数据。
记住这条。让AI写版本敏感的东西,先让它查实时文档。它的自信,有时候是过期的。
M1到M3:里程碑式推进,地基打好了后面就快
整个编码我设了三个里程碑,每个都以CI全绿为完成标准:
- M1
(14:33–17:16,约2小时40分):Next.js 16脚手架 + Prisma数据骨架 + Auth.js邮箱魔法链接 + 单节点页 + 答题流。最小学习闭环跑通。 - M2
(17:16–约18:00,约40分钟):5种题型(单选/多选/填空/匹配/排序)+ 双向链接hover预览 + 推荐复习算法。内容灌到10节点/100题。 - M3
(约18:00–19:14,约1小时):主页知识地图 + 全局搜索(FlexSearch中文分词)+ 白纸召回功能。内容到30节点/250题,MVP可发布。
M1最重,因为要从零搭脚手架、踩平所有版本不兼容的坑。M2和M3各只有40分钟到1小时——地基打好了,往上盖就快。
19:27,我手滑贴了密码,AI在3分钟内叫停
晚上接邮件发送功能。19:27,我图省事,直接在聊天框里贴了三样东西:API密钥、服务器root密码、还有IP地址。
19:30,AI停下手里所有活,报警。
这是整个项目里我最想截图保存的一幕:
“你刚刚泄露了凭据。这条消息现在存在于:我的上下文、服务商服务器日志(保留30天)、你本地的历史记录、以及之后你任何粘贴它的地方。删不干净。”
然后它给了整套补救方案:吊销密钥、改密码、禁用root密码登录改用SSH Key,新凭据不要再发给我。
3分钟反应。比我快。
这事儿太真实了。我们用AI越来越顺手,顺手到忘了聊天框不是保险箱。贴进去的密码,会在好几个地方留下副本,想删都删不干净。
后来服务器连不进去——所有端口都被云厂商的CDN和WAF拦截,返回403。AI硬刚不进去,主动换了思路:写一个部署脚本提交到仓库,让我自己SSH上去跑,把输出贴回来。既绕开了限制,又不用再传一次密码,脚本还顺手沉淀成了以后能复用的资产。
进不去的门,别砸。让AI给你一把你自己能用的钥匙。 正确姿势我现在记住了:凭据只写本地.env.local,AI看不到也不需要看到。
换Codex,派出31个分身去搬砖
21:24,我换成Codex。 起因是用手机打开线上网站,发现三个Bug:表格不渲染、页面中英文混杂、中文链接404。
Codex的工作风格和Claude明显不同——话密,每一步都播报“我现在要做什么、为什么”,校验极强。定位到问题之后,改markdown解析、改链接处理、改路由的编码逻辑,然后不是直接说“改好了”,而是跑类型检查+内容校验+构建+本地起Server做真实HTTP验证,全过了才汇报。
修完Bug,我问了一句要命的话:“Word里的内容,都进App了吗?”
Codex老实承认:没有。文档800多段,App里才30个节点、250道题,远不是全量。
22:06起,最像科幻的部分开始了。
Codex开始派分身——一个子AI专门补穴位,一个补中药,一个补方剂,互相不碰对方的文件。它自己在主线程盯着合并和校验。

第一次翻车了。一口气开4个重任务,全被限流打回来,429。它退回来,改成一次只开两个小的,用更便宜的模型。然后节点数开始滚雪球:
30 → 48 → 69 → 80 → 98 → 154 → 186。题目最终到589道。
这个数字链是我从Git历史里扒出来的,每一步都能在commit里对上。肉眼可见subagent并行的滚雪球速度。
中间还顺手还了一笔架构债——题目到300多还挤在单个JSON文件里,Codex把loader改成支持按领域分目录,把旧文件拆成8个领域文件。正好让后续Worker各写各的题库,不再抢同一个文件。
这里有个细节我特别喜欢。我专门交代过,用便宜的Mini模型跑搬砖活。后来算账才知道,31个分身里干得最多的那批Mini,整批才花了一块多美元。一块六,搬完了几百个节点的内容。
并行的命门只有一条:每个分身只能动自己那摊文件,公共的大文件留给主线程合并。谁违反谁打架。 而且并行规模要试探着来,不能一把梭——4个重任务直接429,退回两个小Worker反而稳了。
我设了个目标,逼它把858行全查完
快结束时,我用命令设了一个目标:完整补上所有知识点。
Codex本来想交差,说覆盖审计做到第345行了。但这个目标卡着它——不行,源文档有858行,你得查到底。它只好继续,把后半段也扫了一遍,又补出81道题。最后产出了一份覆盖审计台账,把覆盖率从“凭感觉”变成了“每条源行号对应App里哪个节点、哪道题”的可追溯记录。
这点对我触动很大。AI最爱干的事就是“自我感觉良好地完成”。它会跟你说“差不多了”“主干都覆盖了”。但“差不多”不是验收标准。这个项目里,每一轮内容补完都要跑校验脚本——查重复ID、查悬空引用、查格式——过了才算数。
机器说了算,不是AI的感觉说了算。 完成的定义必须可验证,不能是Agent的主观判断。
最后部署上线,提交的时候Codex特意只挑了该提交的文件——明确指定路径,绝不用全量添加。把带密钥的本地目录挡在外面,扫描确认没带敏感值才提交Push。
次日0:51,我叫停了最后一步批量配图。12.5小时,一份Word变成了一个挂在域名上、能注册、能答题的东西。

我没写一行代码,但我一直在做三件事:把方向想清楚、让AI查真东西、在它说“完成”的时候多问一句“真的吗”。
也许这就够了。
账单揭晓:771美元,一个AI占了98%
故事讲完了,该算账了。


我把两个AI干完这12.5小时的账单扒出来算了一遍。总数771美元。听着不离谱,一个能上线的App,七百多块。但拆开看的那一刻,我愣了半天——754美元是同一个AI花的,占了98%。
另一个AI,全程派出31个分身并行干活,最后只花了16块。
同一个项目,同样在写代码,成本差了将近50倍。这事儿得说清楚,因为它跟“谁更聪明”一点关系都没有。
先把账摊在桌上
白天干活的是Claude,跑Opus这档模型。晚上是Codex,跑GPT-5系列。
- Claude这边
:1005次API往返,678次工具调用,输入侧Token加起来4.37亿,输出85万。换算成钱,754美元。 - Codex这边
:主线程加31个分身,输入6748万Token,输出77万。一共16美元。其中那31个分身里干得最猛的一批,用的是便宜Mini模型,1400万Token的活儿,整批花了一块六。
数字摆出来,问题就来了。Claude的输入Token——4.37亿——比Codex的6748万多了6倍多。可它干的活,真没比Codex多6倍。
那这4亿多Token,到底是什么?
87%的钱,烧在“反复重读”上
答案藏在一个不起眼的词里:缓存读取。
Claude那4.37亿输入Token,绝大部分不是新内容,是它在反复重读同一段上下文。
想象一下。这是个9小时的长会话,单线程,中间塞了678次工具调用——读文件、跑命令、改代码。每多一次操作,对话就长一截。而每一个新回合,模型都要把前面整段上下文重新过一遍。
678次操作,会话滚雪球一样变长,每一轮都重读。加起来,4.36亿Token的缓存读取。
这一项,654美元。占了Claude总花费的87%。
说白了,钱不是花在“写”上,是花在“记得自己刚才写过什么”上。
同样是重读,凭什么它贵12倍
你可能会说,Codex不也重读了吗?它6700万Token里也有6200万是缓存读取啊。
对。但Codex那6200万次重读,只花了7块7。
差距在单价。Opus这档模型,缓存读取是每百万Token 1块5。GPT-5那档,每百万Token 1毛2分5。同样一个“重读上下文”的动作,Opus贵了12倍。
输出更夸张。Opus的输出是每百万Token 75美元,GPT-5是10美元,差7.5倍。
所以这笔账的真相是这样的——不是Claude笨,也不是它磨蹭。是**“高端模型+超长会话+高频工具调用”三样撞在一起,缓存读取费像滚雪球一样越滚越大,最后压垮了账单。Codex靠“短回合的分身+便宜的Mini模型+本来就便宜12倍的缓存单价”**,把同样甚至更大的工作量,干成了零头。
这笔账能省吗?能
如果你也在用顶配模型跑这种几百次工具调用的长任务,缓存读取大概率是你最大的开销。不是输出,是重读。
几个真能省钱的杠杆:
- 会话别拖太长。
上下文越长,每一轮重读的成本越高。该压缩就压缩,该开新会话就开新会话,别让一个会话从早跑到晚。我看完账单后干的第一件事,就是去把一个跑了三小时还没关的会话给关了。 - 机械的活儿外包给便宜模型。
那31个Mini分身就是证据——批量补内容、改格式、跑搬砖,这种事根本用不着顶配大脑。一块六能搞定的事,没必要用贵12倍的模型做。 - 把贵模型留给真正需要判断力的地方。
想产品、定架构、做权衡——这些花得值。剩下的,能下放就下放。
一个必须说的前提
上面这754美元,是按官方API价格算的等价金额。但有个坑要先说清楚:如果用的是月费订阅套餐,实际从卡里扣的是固定月费,不是754美元。这个数字代表的是“按量计费的话这些Token值多少钱”,不是真从账户划走了七百多。
我也没法100%确认GPT-5那几个小版本的精确单价,Codex这16块是按GPT-5档位估的,可能有上下浮动。但Token数量是从原始日志里一条条数出来的,那个准。
所以别拿这754去吓自己。它更像一面镜子——照出**“长会话+顶配模型+海量重读”**这套组合,到底有多烧。
至于值不值。一份躺着的Word文档,12.5小时变成能上线的App,全程没碰键盘。这账怎么算,可能每个人心里的数都不一样。

夜雨聆风