用 AI 直接编程

最近 AI 写代码变得相当好用了,过程中 AI 还能自己测试和调试,根据错误自己修复 BUG,最终代码可以直接运行。

新的工作模式

Chat 到 Agent 的转变

以前的 AI 协作模式主要是 chat:提问-回答。现在 AI Agent 的出现改变了这一点,转变为自动检查-错误修正的循环

  • Agent 执行代码、跑测试
  • 根据实际运行结果自动反馈
  • 发现问题立即修复,无需人工告知
  • 循环到代码通过为止

这个改变很关键——从被动等待问题反馈,变成主动发现和纠正。

为 Agent 提供感知能力

Agent 需要"眼睛"和"耳朵"才能与真实世界互动:

  • 眼睛:能看到代码运行的实际结果(stdout、stderr、返回值)
  • 耳朵:能听到环境反馈(测试失败、性能瓶颈、边界情况)

有了这些感知,Agent 可以:

  • 立即发现编译错误、运行时崩溃
  • 检测逻辑错误(通过单元测试、集成测试)
  • 发现性能问题、内存泄漏等非显而易见的 bug

修正幻觉的最有效方式

模型的"幻觉"(生成不真实或错误的内容)是 AI 编程的主要痛点。最有效的修正方式就是与真实世界交互和验证

  • 纯文本讨论:容易陷入循环论证,模型无法自我证实
  • 实际运行验证:代码跑出来要么成功要么失败,黑白分明

这就是为什么"让 AI 先测试,再根据测试失败修复"比"让 AI 讨论可能的问题"有效得多。运行时错误、边界情况的发现和修复都依赖于真实环境的反馈。

实战经验

代码质量现状

  • 编译错误:基本都能解决,95% 以上的代码可以直接运行
  • 运行时错误:需要通过实际测试发现。AI 擅长写测试代码,也能根据失败结果修复
  • 设计问题:默认编写时结构一般,但提示重构后能产生不错的架构

可测试性是关键

重点不在于代码本身,而在于可测试性

  1. 让 AI 编写单元测试、集成测试
  2. AI 自己运行测试,观察失败
  3. AI 分析失败原因并修复
  4. 循环直到所有测试通过

这个流程中,测试用例本身成为"真实世界反馈"的代理,帮助 AI 验证逻辑正确性。

AI 可以做尝试性工作

一个高效的协作策略:让 AI 做尝试性工作

  • 快速探索多个方案
  • 通过运行测试快速验证可行性
  • 找到最优方案后,再投入精力

这避免了人工方案探索的低效,充分利用 AI 的"快速迭代"优势。

Skills 的两个演进方向

随着 AI 能力提升,如何利用 skills(经验库、最佳实践库)有两条不同的路:

1. 基于模型能力的 Skills(上溯修正)

只记录模型容易犯错的地方、踩过的坑。这些 skills 的目的是修正模型的常见幻觉和错误

  • 适用于:强模型(有判断力,能理解复杂约束)
  • 内容:特殊约束、陷阱、常见错误模式
  • 例子:“Go 中 defer 的顺序是 LIFO,不能假设”、“浮点数比较需要精度容差”

2. 脱离模型能力的 Skills(能力赋予)

将已经实践过、验证过的方案封装为可复用的脚本或模板,这样即使是更弱的模型也能使用。

  • 适用于:能力不足的模型、重复性强的任务
  • 内容:完整工作流、脚本、配置模板、测试框架
  • 例子:将"微服务健康检查"流程封装为可配置脚本,弱模型可直接使用而不需要理解底层原理

两个方向的协同

  • 强模型:主要用第一种 skills(修正错误),允许探索
  • 弱模型:主要用第二种 skills(能力赋予),降低门槛
  • 长期演进:随着模型通用能力提升,第一种 skills 可能会逐渐过时,第二种 skills 则变成可复用的资产

总结

AI 编程的优势不在于"一次正确",而在于快速迭代和自动验证的循环。关键是:

  1. 给 Agent 提供与真实环境的交互能力
  2. 依靠运行和测试来验证,而不是纯粹讨论
  3. 充分利用 AI 的快速尝试能力
  4. 逐步积累 skills,放大 AI 的长期能力

这样,AI 就不再是一个"想法生成器",而是成为真正的编程合作者


最后修改于 2025-12-30