我从 Vibe Coding 学到的 10 件事(或:我如何让 AI Agent 为我的音频库写代码)

发布: (2026年1月16日 GMT+8 17:40)
7 min read
原文: Dev.to

抱歉,我需要您提供要翻译的正文内容(即除 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 loves you

Code Monkey — 每个曾经与 AI 结对编程的开发者的非官方赞歌 😄

祝编码愉快——别对机器人太过信任。 😉


你有没有类似的(好或糟)的 AI 代理“即兴编码”经历?

留下评论——我很想听听你的战场故事!

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...