用 AI 直接编程
最近 AI 写代码变得相当好用了,过程中 AI 还能自己测试和调试,根据错误自己修复 BUG,最终代码可以直接运行。
新的工作模式
Chat 到 Agent 的转变
以前的 AI 协作模式主要是 chat:提问-回答。现在 AI Agent 的出现改变了这一点,转变为自动检查-错误修正的循环。
- Agent 执行代码、跑测试
- 根据实际运行结果自动反馈
- 发现问题立即修复,无需人工告知
- 循环到代码通过为止
这个改变很关键——从被动等待问题反馈,变成主动发现和纠正。
为 Agent 提供感知能力
Agent 需要"眼睛"和"耳朵"才能与真实世界互动:
- 眼睛:能看到代码运行的实际结果(stdout、stderr、返回值)
- 耳朵:能听到环境反馈(测试失败、性能瓶颈、边界情况)
有了这些感知,Agent 可以:
- 立即发现编译错误、运行时崩溃
- 检测逻辑错误(通过单元测试、集成测试)
- 发现性能问题、内存泄漏等非显而易见的 bug
修正幻觉的最有效方式
模型的"幻觉"(生成不真实或错误的内容)是 AI 编程的主要痛点。最有效的修正方式就是与真实世界交互和验证。
- 纯文本讨论:容易陷入循环论证,模型无法自我证实
- 实际运行验证:代码跑出来要么成功要么失败,黑白分明
这就是为什么"让 AI 先测试,再根据测试失败修复"比"让 AI 讨论可能的问题"有效得多。运行时错误、边界情况的发现和修复都依赖于真实环境的反馈。
实战经验
代码质量现状
- 编译错误:基本都能解决,95% 以上的代码可以直接运行
- 运行时错误:需要通过实际测试发现。AI 擅长写测试代码,也能根据失败结果修复
- 设计问题:默认编写时结构一般,但提示重构后能产生不错的架构
可测试性是关键
重点不在于代码本身,而在于可测试性:
- 让 AI 编写单元测试、集成测试
- AI 自己运行测试,观察失败
- AI 分析失败原因并修复
- 循环直到所有测试通过
这个流程中,测试用例本身成为"真实世界反馈"的代理,帮助 AI 验证逻辑正确性。
AI 可以做尝试性工作
一个高效的协作策略:让 AI 做尝试性工作。
- 快速探索多个方案
- 通过运行测试快速验证可行性
- 找到最优方案后,再投入精力
这避免了人工方案探索的低效,充分利用 AI 的"快速迭代"优势。
Skills 的两个演进方向
随着 AI 能力提升,如何利用 skills(经验库、最佳实践库)有两条不同的路:
1. 基于模型能力的 Skills(上溯修正)
只记录模型容易犯错的地方、踩过的坑。这些 skills 的目的是修正模型的常见幻觉和错误。
- 适用于:强模型(有判断力,能理解复杂约束)
- 内容:特殊约束、陷阱、常见错误模式
- 例子:“Go 中 defer 的顺序是 LIFO,不能假设”、“浮点数比较需要精度容差”
2. 脱离模型能力的 Skills(能力赋予)
将已经实践过、验证过的方案封装为可复用的脚本或模板,这样即使是更弱的模型也能使用。
- 适用于:能力不足的模型、重复性强的任务
- 内容:完整工作流、脚本、配置模板、测试框架
- 例子:将"微服务健康检查"流程封装为可配置脚本,弱模型可直接使用而不需要理解底层原理
两个方向的协同
- 强模型:主要用第一种 skills(修正错误),允许探索
- 弱模型:主要用第二种 skills(能力赋予),降低门槛
- 长期演进:随着模型通用能力提升,第一种 skills 可能会逐渐过时,第二种 skills 则变成可复用的资产
总结
AI 编程的优势不在于"一次正确",而在于快速迭代和自动验证的循环。关键是:
- 给 Agent 提供与真实环境的交互能力
- 依靠运行和测试来验证,而不是纯粹讨论
- 充分利用 AI 的快速尝试能力
- 逐步积累 skills,放大 AI 的长期能力
这样,AI 就不再是一个"想法生成器",而是成为真正的编程合作者。
最后修改于 2025-12-30