AIHero
    阅读约 4 分钟

    Tracer Bullet:控制 AI 生成的垃圾代码

    了解如何通过 Tracer Bullet 构建小型端到端功能、尽早获得反馈,从而控制 AI 代码质量,避免臃肿方案。

    Matt Pocock
    Matt Pocock
    本页目录

    本文会通过鼓励 AI 智能体采用 Tracer Bullet思维,帮助解决垃圾代码问题。Tracer Bullet 是从端到端构建的小块功能。

    这是一项经典软件技术,与 AI 配合时效果极佳。

    问题:垃圾代码太多

    AI 天生倾向于 谄媚迎合。它在各种行为中都试图取悦用户:“你说得完全正确!”

    在编码中,这意味着它想一次性产出完整方案。它先在脑中构想完成的文件或功能,然后一口气生成所需的全部代码。

    它不会停下来验证假设或获取反馈,只会继续孤立地构建整层功能,从不测试关键路径是否真正有效。

    结果是得到大块需要返工的代码,也就是垃圾代码。开发者还要承担巨大的评审负担,检查这一大堆东西。

    实际情况是什么样

    例如,你让 AI 构建数据库服务以及连接它的 API。

    AI 会构建:

    • 所有 API 端点(GET, POST, PUT, DELETE)
    • 完整的请求/响应模型
    • 错误处理中间件
    • 身份验证逻辑
    • 速率限制
    • 日志基础设施

    完成这一切后,它才尝试连接数据库。然后意外出现了:连接字符串格式错误、列类型不正确,或者测试根本没有访问数据库。

    《The Pragmatic Programmer》把这种情况称为“跑得比车灯照得还远”。AI 在黑暗中构建得太多,没有反馈循环来尽早验证假设;而开发者最终只能收拾巨大的烂摊子。

    解决方案:Tracer Bullet

    所谓 Tracer Bullet 概念来自 《The Pragmatic Programmer》。它是一小段端到端功能切片,一次贯穿系统的所有层。

    不要孤立地构建水平层,而是构建一个很小的垂直切片:

    1. 端到端构建一个小功能
    2. 立即测试
    3. 获得反馈
    4. 在全新的 上下文窗口
    5. 重复

    这种方式直接解决了“跑出车灯范围”的问题:反馈循环被内置进流程,而不是盲目堆砌功能。

    小切片通过测试后,就可以有信心交付有效功能,而不是祈祷各个大层最终能拼在一起。

    强制 AI 从小处思考

    提示词必须极其明确。AI 天生倾向于孤立地构建大层,你需要迫使它完成贯穿所有垂直层的端到端切片。

    下面这段提示词可以加入 Ralph 循环或 build-feature 技能,强制 AI 使用 Tracer Bullet 思维:

    ## Tracer Bullets
    When building features, build a tiny, end-to-end slice of the feature first, seek feedback, then expand out from there.
    Tracer bullets comes from the Pragmatic Programmer. When building systems, you want to write code that gets you feedback as quickly as possible. Tracer bullets are small slices of functionality that go through all layers of the system, allowing you to test and validate your approach early. This helps in identifying potential issues and ensures that the overall architecture is sound before investing significant time in development.

    这段提示词带来的效果

    下面是我最近与 AI 智能体使用 Tracer Bullet 处理的一个 issue:

    Looking at the issue, I need to implement a "Reveal in File System" feature for videos. Let me break this down:
    ## Task Breakdown for Issue #161
    1. **Tracer bullet**: Create backend endpoint that executes the PowerShell command to reveal a file in Windows Explorer from WSL
    2. Add "Reveal in File System" to standalone videos context menu
    3. Add "Reveal in File System" to video editor actions dropdown
    4. Add "Reveal in File System" to sidebar video context menu
    I'll start with the **tracer bullet** - creating the backend endpoint and wiring it up to one location.

    我没有让 AI 一次构建全部四个 UI 位置,而是让它只完成一个端到端切片:把后端端点连接到单个 UI 位置。这样就能在扩展前验证核心功能是否有效。

    经典著作早有答案

    Tracer Bullet 并不新,测试驱动开发也不新。这些来自经典著作的基础概念,几十年来一直在塑造最佳实践。

    问题在于,新技术出现时,人们会兴奋地追逐亮眼的新事物,却忘了回到已经验证的经典方法。

    这些原则对 AI 比对人类更严格。上下文窗口的限制让这项纪律不容妥协。与 AI 智能体协作时,不能像面对人类开发者那样忽略 Tracer Bullet,因为后果会立刻显现。

    Tracer Bullet 正是 /prototype 所自动化的方式:用一次性代码回答问题。

    结论

    下次与 AI 智能体协作时,问问自己:我是否让它跑出了车灯范围?我是否让它尽早验证假设,还是任由它在黑暗中构建?

    使用 Tracer Bullet。迫使智能体从小处思考、端到端构建、获得反馈,然后有信心地继续前进。