AI 编程实战两周:从 TDD 幻觉到时间盒协作

起因

月底开始用 OpenClaw 辅助一个表格项目的重构,原本以为是个常规的 AI 编程体验记录,结果两周下来踩的坑比预想的多。记几个关键节点,给后面想用类似工作流的人参考。

Skills 设计的迭代

第一版 Skills 写得太"描述性"了。什么叫"描述性"?就是通篇都在说"你应该怎么做",但没定义清楚返回值格式、异常标准、边界条件。结果就是 Agent 生成的代码看起来都对,单测也能过,实际一用就出问题。

后来把一个大 Skills 拆成了几个子规范:工程结构规范、接口定义规范、异常处理规范。每个规范下面都是硬性约束,不再是建议性描述。这个改动之后,Agent 输出的代码质量明显稳定了。

教训:给 AI 的规范要像接口文档一样精确,不要写成最佳实践指南。

TDD 的幻觉问题

AI 编程范式下 TDD 确实是首选,但有个坑:AI 生成的测试代码可能会有"幻觉"。表现为测试通过,但业务逻辑实际是错的。

具体场景是 Agent 为了通过测试,会在实现里写一些硬编码或者取巧的逻辑。测试本身没问题,但测试覆盖的场景不够全面,导致漏掉了边界情况。

应对策略

  1. 人工 Review 测试用例的场景覆盖度
  2. 关键路径的测试用例自己写,不要让 AI 猜业务含义
  3. 测试通过后,再让 AI 基于测试生成实现,然后人工 diff 看逻辑是否合理

模型选择:Gemini vs Claude

这段时间两个模型都在用,体感差异挺明显:

Gemini 3.1:多模态能力强,但在上下文不明确的时候容易"过度发挥"。给它一个模糊的需求,它会自主生成一整套方案,有时候方向就偏了。

Claude:在有清晰上下文的情况下表现更稳健,不会乱加戏。但多模态能力确实弱一些。

选型建议:需求明确、上下文充分的场景用 Claude;需要多模态理解或者探索性任务用 Gemini。

oh-my-claudecode 的实测

试了一下 oh-my-claudecode 这个工具。Setup 过程大概 10 分钟,context 占用 32%。初步发现的优势是可以多 worker 并行处理,每个 worker 分配到不同的子任务。

适用场景:耦合度不高的大型任务。可以把大任务拆解后分给多个 worker 分别执行,速度确实快。但任务分解这一步需要人工做设计和取舍,不能让 AI 自己拆。

OpenClaw 使用中的痛点

1. 跨会话记忆缺失

有一次用 AI 做了 RTL 的深度调研,结果忘记用 Memory 机制做备份。第二天换了个 Claude 会话,之前调研的内容全丢了,只能重新做一遍。

解决:重要的调研结论、技术方案要及时写入 Memory 文件,不要依赖会话上下文。

2. Cron 任务的 Channel 绑定

Cron 任务如果没有显式指定 channel,会 fallback 到 last 活跃渠道,导致消息串台。这个坑踩了一次才注意到。

解决:所有 Cron 任务配置里显式绑定 channel。

3. 高强度编码的 ROI

一开始想让 OpenClaw 做高强度编码,后来发现烧 Token 的 ROI 不如人工监控模式。AI 适合做探索性、重复性的工作,核心逻辑还是人工把控更靠谱。

Agent 协作的时间盒策略

当 Agent 在复杂问题中陷入泥潭时(比如排查源码级的问题),有两种极端做法:

  1. 放任它继续尝试,消耗大量 Token
  2. 强制人工介入,产生高的上下文切换成本

后来采用了一个折中策略:时间盒(Timebox)。给 Agent 限定 10 分钟,要求输出阶段性猜测结果。然后把使用过程和体验作为 Context 再喂给 AI,让它自己调整策略。

这个策略的核心是:把"要不要继续"的决策权拿回来,但把"怎么调整"的决策权留给 AI。

过度工程化的盲区

有个 JDK17 升级后 KMS 无法加载 Nacos 配置的问题。让 Agent 做详细调研和方案评估,它给了一个很复杂的"Hack Way"实现。后来人工介入,发现最简单的方案是在 bootstrap.yml 里加标准配置。

这个案例暴露出 AI 容易过度工程化的盲区:它倾向于生成"看起来完整"的方案,但可能忽略了最简单的标准解法。

应对:在让 AI 调研之前,先让它列出所有可能的方案(包括标准方案),然后人工评估复杂度。

部署环境的挑战

实际部署时发现,Agent 出问题的状况明显变多。核心原因是大量上下文无法正常衔接:

  1. Profile 环境的隔离问题
  2. 跨系统的 CI/CD 流程联动

AI 编程模式下,CI/CD 的流程也需要跟着探索和适配。不能指望 AI 理解你公司内部的部署规范。

RTL 支持的技术选型

表格项目的 RTL 支持调研了一圈,结论:

  1. 插件化方案可以实现 UI 和表格内文本渲染的 RTL
  2. 整表 RTL 布局难度极大,插件方案走不通(字符渲染顺序不对)
  3. 最终只能走 Fork 方案

这个技术决策过程里,AI 帮了大忙做调研,但最终的取舍还是人工做的。

小结

这两周的 AI 编程实践,最大的收获不是"AI 能做什么",而是"AI 不能做什么"以及"怎么跟 AI 协作"。

几个核心原则:

  1. 规范要精确,不要模糊
  2. TDD 要人工 Review 场景覆盖
  3. 重要结论及时写入 Memory
  4. 复杂问题用时间盒策略
  5. 警惕过度工程化
  6. 部署和 CI/CD 需要人工把控

AI 是工具,不是银弹。用得好能提效,用不好就是烧 Token 看它表演。


记于 2026 年 3 月,OpenClaw 辅助开发实战两周后

updatedupdated2026-03-022026-03-02