我从 Vibe Coding 学到的 10 件事(或:我如何让 AI Agent 为我的音频库写代码)
抱歉,我需要您提供要翻译的正文内容(即除 Source 链接之外的文本),才能为您完成简体中文翻译。请把文章的其余部分粘贴进来,我会保持原有的 Markdown 格式、代码块和链接不变,只翻译文字内容。
TL;DR — 完整结果已出
希望它也能帮助到其他人。
我最近完成了一个小的副项目,并决定以不同于常规的方式处理一个必需的功能。
表面上任务很简单:接受几乎任何格式的上传音频文件,然后重新采样并转换为 PCM 16‑bit 有符号、单声道、8 kHz WAV。
在电信领域,这种超低规格的格式仍然是必须支持的标准——大多数 4 级和 5 级 PBX 都期望(或在后台将所有内容静默转换为)完全兼容 G.711 的 PCM:8000 Hz、单声道、16‑bit 线性。其他格式通常会被转码,或者通话直接失败。
通常我会直接调用 ffmpeg,一切就搞定了。这一次我想要 纯原生 Go 代码——不依赖外部二进制文件。
几年前,我写了一个小的 Go 包,能够把原始 PCM 采样包装成 .wav 文件。仅此而已——没有解码、没有重新采样、没有格式转换。当我尝试把这个思路扩展到真正的重采样和多格式输入时,很快就遇到了麻烦。
经过一周每晚一小时的调试,代码仍然:
- 在多种输入上崩溃(缓冲区逻辑错误)
- 产生的音频质量明显不如
ffmpeg或 Audacity(朴素的线性重采样) - 只支持 PCM
.wav文件(没有 RIFF 元数据处理,也没有其他容器) - 进展缓慢,几乎停滞
于是我决定看看免费、无代理的 AI 能否提供帮助。我尝试了:
- 🟡 Claude
- 🔵 Grok
- 🟢 GitHub Copilot
- 🟣 ChatGPT
- 🟠 Gemini
Copilot 提供了迄今为止最有用的起点。它生成的代码能够:
- 读取和写入 RIFF WAVE 文件
- 解码 Ogg Vorbis
- 解码 MP3
……所有这些代码尝试共享大致相同的接口。
但仍然存在大量崩溃、内存损坏、无限循环、缓冲区管理不当等问题,且接口在实际使用中基本被忽视。
我手动清理并改进,直到达到了这个 early commit——仍然相当脆弱,但抽象层已经开始起作用。
在 1 月 9 日 我切换到 具备 agent/computer‑use 能力的 Claude——这带来了巨大的变化。接下来这篇文章就是我在第二阶段(由 agent 驱动)中学到的内容。
我的收获
1. 要明确
现代 AI——甚至是代理——几乎从不主动说“这个设计有问题”或建议完全不同的方案,除非你明确要求它们进行批评。
如果你还没有一个关于你想要的东西(边界、失败模式、安全、分层)的心理模型,AI 会很高兴地生成能够编译但偏离目标的代码。
解决方案: 从极小、非常具体的任务开始。
示例: 与其说“修复这个崩溃”,我改为询问“看看这个堆栈跟踪——你认为它为什么会崩溃,应该怎么改才能防止?”。
很多时候第一条答案是错误的(例如“缓冲区未初始化”,而真实问题是缺少边界检查)。我不得不多次让代理停下来,因为它正朝着无用的方向前进。
2. 始终检查提供的内容
Claude 经常写出过时或不符合惯用写法的 Go 代码:
// outdated
interface{} // instead of any
实际上我错的次数很少,即使出错,代理的版本通常也过于复杂。
for i := 0; i 90 % of the memory leaks, slice‑shadowing bugs, uninitialized values, and off‑by‑one errors myself — usually faster than waiting for another iteration.
5. 编写代码时要考虑以后有人维护
避免“只写”代码——即使第一稿来自 AI。
KISS 仍然适用。清晰的命名 > 巧妙的技巧。
未来的读者(包括六个月后的你)会感谢你的。
6. 要求提供符合现代 Go 惯例的单元测试和基准测试
一开始代理写了:
- 基准测试命名为
TestSomething而不是BenchmarkSomething - 单元测试缺少
Test前缀 - 经典的
for i := 0; i < …循环导致内存泄漏、切片遮蔽 bug、未初始化值以及越界错误
这基本上就是一个强大的编码代理——一个极其快速、知识渊博的 代码猴子。
- 它可以快速产出大量代码。
- 它无法承担架构责任。
- 除非你主动提出,否则它不会提醒你未来的维护痛点。
如果你不紧密引导,就会得到 可工作但糟糕 的代码。
把它当作一个非常初级但速度快的结对编程伙伴使用: 你提供思考和品味,它负责敲代码。
顺便放一首给本节取名的歌曲:
Code Monkey — 每个曾经与 AI 结对编程的开发者的非官方赞歌 😄
祝编码愉快——别对机器人太过信任。 😉
你有没有类似的(好或糟)的 AI 代理“即兴编码”经历?
留下评论——我很想听听你的战场故事!
