所以这个圣诞假期,我一直在琢磨着把 Claude Sonnet 调教成一个更好、更有章法的程序员。过程挺有意思。想出了几个办法,大概六成奏效了。这是好消息。
眼下我在解一个我觉得要紧的问题:音乐数据挖掘与研究。我在做一个单一用途的工具,叫 Grimes。
完工之后,它会抽取数据,用 JSON 给每条音轨建一个带劲的数据模型,装下全部旋律和节奏相关的作曲数据。
数据建模这一侧,我在部分实现我上周写的 Crunchy 0.3.4 数据建模规范。这给了我一些灵活度,产出一个可以拿去做分析或 AI 训练的作曲模型。
它还会输出一份非常基础的 midi,内含正在被渲染的数据的简单表示。如果做分析需要修音,它就修。它会生成一串文件,一些基础报表,外加一份项目日志。
跟它同名那位一样,只做一件事,就做这一件事,但把它做好。
而且整个东西跑在你的 GPU 上(什么卡都行),所以它可以用在那个你恰好就搁手边的百万歌曲语料库上。我是说,这事儿多接地气啊?谁的硬盘上不是实打实存着一百万首歌?拜托,30 TB 的硬盘不当这个用还干嘛使?我是说真的。
不管怎样,市面上没有任何用户友好的工具,是专门为流行歌曲和流行歌衍生品设计的、能做这种大规模数据挖掘与分析的,所以我想着抽时间自己搭一个。
工程流程
用 Claude 干。就像我说的,保持井井有条、让过程保持一致,本身就是一个特别有意思的谜题。
为了做到这点,我靠在会话结束时生成一份文档来管理当前阶段。为了不让 Claude 的脑子被这一大摊复杂度弄化,我搞了一个叫「逻辑映射」的概念,盖住 Go 和 Python 代码的基础关键细节。Go 是这类应用更好的工具,因为你没法不小心造出没用的变量和 import。而如果它跑不起来……它压根就编译不过。
我确实得给 Claude 定一套编码规范,让写 Go 更像写 Python,不过既然到这一步了,现在推进得还挺顺。
整个应用是一天写完的。
我现在在调试的最后阶段。
下周等我的智能体引导策略上线,这一切会干净得多。