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

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

- Canonical (HTML): https://kaguc.com/blog/ai-assisted-27-days-zh/
- Date: 2026-07-29


*English version: [27 days of AI-assisted development: a retrospective in numbers](/blog/ai-assisted-27-days/)。“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 万 token | results/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 + 测试”。这是[确定性边界](/blog/deterministic-boundary-zh/)在开发过程层面的同构应用：收窄每次改动的作用域，用确定性关卡（测试、git）守住存量。

## 债务账：验证债与环境债

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

**验证债二：缺一个人类锚，结论定格。**4 天的对照实验在 LLM 评委口径下拿到方向高度一致的结果（详见[第 12 篇](/blog/distill-judgment-experiment-zh/)），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。

