NEE's Blog

AI 编程代理的工程模式

March 04, 2026

本文翻译自 Agentic Engineering Patterns,作者 Simon Willison。


随着 Claude Code、OpenAI Codex 等 AI 编程代理的普及,我们需要重新思考如何与这些工具协作。Simon Willison 在这篇文章中分享了他与 AI 代理配对编程的经验和最佳实践。

核心原则

写代码很便宜

AI 代理改变了代码的经济学。现在,写代码的成本大大降低,但阅读、理解和维护代码的成本并没有同步下降。

这意味着:

  • 让代理写更多代码,不要担心初稿质量
  • 用测试来验证行为,而不是手动检查每一行
  • 保持代码简单易懂,因为未来的你(或其他人)仍需理解它

积累你知道怎么做的事情

建立个人代码库,收集你成功实现过的功能片段。这些”配方”可以加速未来与代理的协作:

  • 常用配置模板
  • 认证流程实现
  • API 集成示例
  • 数据库迁移模式

当你让代理实现类似功能时,提供这些参考示例可以大大提高成功率。

测试与质量保证

红/绿 TDD

传统的测试驱动开发(TDD)流程是:先写失败的测试,再写代码让测试通过。这个模式对 AI 代理尤其有效:

  1. 先写测试:描述你期望的行为,让测试失败(红色)
  2. 让代理实现:给出明确的测试用例,代理知道目标是什么
  3. 验证通过:运行测试确认实现正确(绿色)

为什么这对代理很重要?

  • 测试提供了明确的行为规范
  • 代理不会”过度设计”超出测试范围的功能
  • 你可以用测试套件快速验证重构没有破坏任何东西

先跑测试

在让代理修改任何代码之前,先跑一遍现有测试。这是一个简单但重要的习惯:

  • 确保当前代码库是健康的
  • 如果测试失败,先修复再继续
  • 给代理一个干净的起点

AI 生成的代码可能有微妙的 bug。自动化测试是你最好的防线。如果你的项目没有测试,让代理帮你写一些——这是代理擅长的工作。

理解代码

线性演练

当你需要理解一个不熟悉的代码库时,让代理进行”线性演练”非常有效:

  1. 从入口点开始(如 main.pyindex.js
  2. 让代理逐行解释代码执行路径
  3. 跟踪关键数据结构的变化
  4. 记录重要的函数调用和依赖关系

这种方法比随机浏览文件更能建立对系统的整体理解。

交互式解释

有时候静态的代码解释不够直观。Simon 提到使用动画和交互式可视化来理解复杂逻辑:

  • 让代理创建逐步的动画演示
  • 可视化数据流和状态变化
  • 用具体例子而非抽象描述

这种方法特别适合理解:

  • 算法执行过程
  • 并发和异步逻辑
  • 复杂的状态机

认知债务

使用 AI 代理编程有一个潜在风险:认知债务

当你让代理写了大量代码,但没有完全理解每一行,你就积累了”认知债务”。这些代码能工作,但如果出问题,你可能难以调试。

缓解策略:

  • 定期让代理解释关键模块
  • 保持代码模块化和可测试
  • 不要让代码库变得你自己无法理解
  • 用文档记录架构决策

实用技巧总结

  1. 测试优先:在修改代码前确保有测试覆盖
  2. 小步迭代:让代理做小改动,频繁验证
  3. 保持简单:简单的代码更容易被理解和维护
  4. 建立参考库:收集成功的代码模式供未来使用
  5. 主动学习:让代理解释它写的代码,不要只是复制粘贴

个人思考

这篇文章点出了 AI 辅助编程的一个核心矛盾:代码生成变便宜了,但理解代码的成本没有降低

作为开发者,我们需要调整心态:

  • 从”写代码的人”变成”审查和引导代码的人”
  • 测试不再是可选的,而是必需的护栏
  • 代码可读性的重要性反而更高了——因为读者可能是未来的你,试图理解 AI 生成的内容

最实用的建议是红/绿 TDD:让测试成为你和代理之间的”契约”。测试定义期望行为,代理负责实现。这种分工清晰且可验证。

另一个值得思考的是认知债务问题。如果你 80% 的代码都是 AI 生成的,当代码出问题时,你能快速定位和修复吗?这提醒我们:即使有 AI 帮忙,理解自己的代码库仍然至关重要。


关键要点

  • AI 代理降低了写代码成本,但理解成本不变
  • 测试驱动开发是与 AI 协作的最佳模式
  • 先跑测试,确保干净起点
  • 用线性演练理解陌生代码库
  • 积累代码配方,加速未来协作
  • 警惕认知债务,保持对代码库的理解
comments powered by Disqus