BLOG · #Engineering

AI 辅助开发 27 天:一次数据化复盘

一个人加一个编码 agent 的 27 天:94 篇对话级开发日志、28 模块 8352 行后端加桌面客户端、351 个测试、一个 3511 次 LLM 调用的对照实验、三次产品形态转向。本文用留痕数据复盘:哪些工程纪律被证明值钱,欠下了什么验证债与环境债,以及为什么"验证与判断"成了新瓶颈。

English version: 27 days of AI-assisted development: a retrospective in numbers。“LLM 应用工程”系列第 14 篇,收官——前十三篇讨论机制,本篇回到产生这些机制的那 27 天本身。

复盘的对象与口径

2026-06-10 到 07-06,一个人加一个编码 agent(Claude Code),从零做出本系列反复引用的那个 AI 写作 agent。因为项目从第一天起就执行“每次开发对话写一篇日志”的留痕制度,这次复盘可以不靠回忆:数据来自 94 篇开发日志、git 历史、测试目录计数、以及研究实验 usage.jsonl 的逐条累加。本文按四本账展开:产出、纪律、债务、结论。约数会注明口径;当时标注“疑因”的,这里保持存疑。

产出账

维度数字口径
时间跨度27 天2026-06-10 → 2026-07-06
开发日志94 篇docs/devlog/,每次对话一篇;单日峰值 27 篇(06-15)
后端28 个模块 / 8352 行backend/app/*.py 行数统计
客户端Web 前端 + Tauri 桌面版PyInstaller 冻结后端 + Tauri 外壳 + 随包 TinyTeX
测试351 个backend/tests 的 def test 计数
研究实验4 天 / 20 次提交writing-judgment-distill,06-18 → 06-21
实验 LLM 用量3511 次调用 / 约 794 万 tokenresults/usage.jsonl 累加:输入约 522 万 + 输出约 272 万
产品形态转向3 次手动流程→本地 Web 应用(06-10)→SaaS(06-12)→单机桌面(06-22)

两点补充。其一,产出是爆发式的:94 篇日志里 27 篇集中在 06-15 一天,14 篇在 06-11——“一次对话推进一个功能”的粒度让并行冲刺成为常态。其二,第三次转向(SaaS→单机)的做法值得记录:全部改动 flag 门控、默认关闭,落地当天默认态 47 个后端测试全过,SaaS 行为零回归;此后测试基线一路涨到 344 passed(devlog 口径),仓库最终计 351 个测试函数。

纪律账:哪些约定被证明值钱

第一天写进 CLAUDE.md 的工作约定,27 天后看,有四条被反复证明值回成本。

**每次对话写 devlog。**格式固定:目标/做了什么/关键决策/改动文件/遗留。直接收益是本文——复盘无需回忆;更大的收益是归因:后文 venv 污染那笔债,能从两篇相隔一小时的日志里重建完整因果链。研究实验侧同理:journal 条目不可覆盖、机读结果进 runs.tsv,总结文档才敢写“所有数字来自已记录实验”。

**git 是安全网:每个能跑的状态立刻 commit。**第一次对话就完成 git init 并提交(f705076,115 个文件)。三次转向没有一次丢过工作:转单机时从当前 HEAD 开新分支,工作树零扰动,实验分支的 20 个提交原样保留。“AI 改崩随时回退”在 27 天里从口号变成日常操作。

**base_docs 只读。**领域素材、few-shot 样本、测试数据划成只读区,生成物分目录存放。三次转向、几十轮生成,证据基座没有被污染过。

**一次只改一个功能。**单日 27 篇日志不是 27 倍效率,而是 27 个作用域收窄的对话,配“每个功能独立 commit + 测试”。这是确定性边界在开发过程层面的同构应用:收窄每次改动的作用域,用确定性关卡(测试、git)守住存量。

债务账:验证债与环境债

**验证债一:批量核验整批失败。**07-05,为给 agent 流水线做前沿对标,跑了一个 105-agent 的联网研究工作流。对抗核验阶段因订阅会话额度打满整批失败:25 条 claim 全部 unverified。补救只能手工:挑最吃重、最可能被检索 agent 编造的 3 篇论文,读 arXiv 原文逐条核对——一篇核心数字坐实(修订回退 16–27% 已覆盖内容),一篇属实但更正了两处引用表述,一篇架构属实、具体数字摘要中无、标记未核实。机器一晚产出 25 条结论,人工核验只覆盖了 3 条——这个缺口就是验证债的形状。

**验证债二:缺一个人类锚,结论定格。**4 天的对照实验在 LLM 评委口径下拿到方向高度一致的结果(详见第 12 篇),30 对匿名盲评清单也已导出,同题机器裁定 B=20/A=3/平=7。但人类评分始终未采集。于是总结文档只能写:H1 是“有方法层证据支持的有力候选,未坐实”。3511 次调用、约 794 万 token 买不来的那一步,恰恰是唯一独立于机器的一步。

**环境债:一次实验污染,一小时后引爆。**06-23 为单机版试验 minted 代码高亮,结论是冻结分发下不可行、回退安全默认。但实验期间的 pip 安装动过共用 venv。一小时后(按日志时间戳),打包的桌面版启动失败,四层根因排查中的一层是 pydantic_core 缺失——日志标注“疑因 minted detour 的 pip 安装顶了 pydantic 版本”。教训原文照录:临时实验后要清理 venv。

方法结论:瓶颈移到了验证与判断

产出账说明 AI 辅助把一个人能开动的工程规模扩大了一个量级——27 天里全栈应用、桌面分发、351 个测试和一个受控实验同时推进;此为对照作者自身手工节奏的个案判断,非受控测量。但三笔债指向同一个结论:**规模扩大之后,瓶颈从“产出”移到了“验证与判断”。**25 条 claim 需要一个读原文的人;H1 需要 30 份人类盲评;venv 污染需要一次人主导的逐层排查。机器产出的每个结论,都需要一个独立于机器的锚——确定性测试、git 历史、arXiv 原文、人类评分。本系列前十三篇讨论的各种机制,最终都是在批量制造这种锚。

这份复盘的适用边界

  1. **N=1。**单人、绿地项目、无协作摩擦与遗留代码。数字是记录不是统计,外推到团队或存量系统没有依据。
  2. **产出指标不是结果指标。**行数、测试数、日志数度量的是生产量;27 天内没有用户使用数据,产品价值未被度量。
  3. **日志篇数不等于工作量。**devlog 按对话计数,单日 27 篇反映的是作用域收窄的短对话,不是 27 倍吞吐。
  4. **token 数字只覆盖实验记账口径。**usage.jsonl 只记录研究实验的 API 调用;主 app 开发中编码 agent 本身的用量未在此计量,不能据此外推总成本。
  5. **“零回归”依赖前置投入。**三次转向不出事,靠的是 flag 门控加测试基线;没有这个基线,同样的速度产出的是静默损坏。

参考

  • 105-agent 工作流后手工补核的三篇论文:Beyond Single-shot Writing: Deep Research Agents are Unreliable at Multi-turn Report Revision(arXiv:2601.13217,核心数字已对原文核实);PaperOrchestra: A Multi-Agent Framework for Automated AI Research Paper Writing(arXiv:2604.05018,属实,两处引用表述经更正);RP-ReAct(arXiv:2512.03560,架构属实,具体数字未独立核验)。
  • 实验数据与统计口径:writing-judgment-distill 的 SUBMISSION_SUMMARY 与 results/usage.jsonl。