本文所有文字包括标点符号都是我古法手工编辑的
自动补全都没开
~
时间线
从 2024年开始, 我逐渐开始使用 AI 辅助编写side projects。
| 时间 | 里程碑 | 主要模型 | 工具 |
|---|---|---|---|
| 2024/6 | 自动补全 | - | VSCode Copilot |
| 2024/11 | 使用单Agentic交付外包项目 | Gemini-2.0 Claude-3.7-Sonnet | Cursor Windsurf |
| 2025/3 | Gap Year 🛏️ | - | - |
| 2026/1 | Test-driven Development Single Agent | GPT-5.2 Gemini-3-pro Claude-Opus-4.5 | VS Code |
| 2026/2 | Test-driven Development Agent Team | GPT-5.3-codex Claude-4.6-Opus | VS Code Codex OpenCode |
写下这些是希望我能时不时回头看看, 除了跟随浪潮, 我是否有尝试去 探索/推动 AI 的能力边界。
一些实践
我们完全可以把Agent当作人来看, 现行的工业实践在Agentic时代也是适用的。
TDD (Test-driven Development)
这是我大部分时间在使用的工作流,可以解决两个棘手的问题:
- 当下的context窗口较小
- 新增功能造成回退
TDD的步骤如下:
1. 用测试case替代需求描述
比如我有下面这个需求, 给indicator tags加上出现消失动画:
我将使用下面的方式去描述:
我需要在indicator tag出现消失时增加一个动画, 请按照下面的要求编写单元测试: 1. 构造五个indicator, [PRE, L, HDR, PAUSE, FPS], 接下来以 PAUSE 为例 2. t= 0ms, PAUSE 准备入场, PAUSE.xy == FPS.xy, PAUSE.opacity == 0 3. t=300ms, PAUSE 入场完成, PAUSE.x = FPS.x - PAUSE.width - margin, PAUSE.y = FPS.y, PAUSE.opacity = 1 4. 使用缓动曲线 easeSinOut 5. t=150ms, PAUSE.x = FPS.x - (PAUSE.width + margin) * easeSinOut(0.5), PAUSE.opacity = easeSinOut(0.5)
这样的描述将需求永久落盘到了可以重复使用的test harness, 在未来项目变得复杂的情况下也可以避免regression。
2. Agent首先跑一遍expected failing test
这一步通过构造错误, 触发编译器/lint的报错机制, 从而利用现成工具链帮助Agent提前定位需要修改的热点区域。 将注意力限制在比较小的范围, 减少context窗口损耗。
3. Agent使用最小change通过测试
抛开性能、架构等等思维负担, 把注意力放在 完整 实现功能上。
4. 在保证测试通过的情况下用更好的工程实践重构代码
根据此前patch进行重构, 把注意力集中到架构和性能优化上, 真正产出 高质量 的代码。
5. Commit staged files into logical chunks
需求完成, 提交commit。
6. 进入下一个任务
在Agentic时代,代码编写成本几乎为0,测试case将成为更重要的资产。
SKILLs
1. git-commit-logical-chunks
git 提交时根据提交内容编写简要的 commit msg 一直是一项重复但是很重要的工作, 正巧这项工作非常适合AI来做。 在使用过程中沉淀下了几条有用的规则:
这条是核心需求, 大多数时候(尤其是个人项目)我们想起来commit的时候已经是多个功能杂糅在一起的状态。 可以让AI阅读代码,把不同功能修改拆分提交。
这条是在多Agent协作还不成熟时遇到的问题, subagent如果在review过程中修改了文件, 交接工作时会导致上游agent错乱。 此时下游agent的context已经销毁, 最终导致worktree无法恢复。这个问题曾经导致我丢失了一整天的进度 😭。 当然, 如果认真地编写delegate prompt是可以避免这个问题的, 但是一朝被蛇咬, 我情愿多等一会儿。
agent可能会阅读修改编写patch来拆分功能, 此时会使用一些非常危险的命令, e.g. restore, reset, etc.
因此在任何操作之前, 先要求agent创建一个backup分支, 这样出错后永远都有一份backup。
