# 如何用 AI 编程代理开发 VST3 或 CLAP 插件

作者：Sonorie。发布于 2026-10-27，最后修改于 2026-10-27。 https://sonore.dev/zh/blog/build-audio-plugin-with-ai-coding-agent/

AI 编程代理可以写出能用的 VST3 或 CLAP 插件，但不能凭记忆来写。代理在 C++ 音频框架上出错，往往是因为编造听起来很合理的名称，以及写出能编译却会破坏音频线程的代码。解决办法是：给代理框架的真实 API 供其核对，提供一套它无法猜到的规则，并由验证器来定义“完成”的标准。这正是 Sonore SDK 为 Claude Code、Codex、Cursor 以及任何 MCP 客户端所提供的。在主流插件框架中，它是唯一带有官方 MCP 服务器的：JUCE 和 iPlug2 提供了代理指令文件，但没有代理可以查询的东西。

## 为什么代理会把音频插件写错

面对陌生的 C++ 库，代理很少会拒绝。它们只会临场发挥，而音频插件会以三种方式惩罚这种临场发挥：

1. **虚构名称。** 本该存在却不存在的类，例如 `CompressorPro`；或者真实存在的类被套上了另一框架的方法。代码读起来完全正常，却无法编译。
2. **能编译但仍然有错的代码。** 在 `process()` 内部进行内存分配或加锁，而 `process()` 运行在音频线程上。它在开发者的机器上能正常工作，却会在别人的会话里负载升高时断音。
3. **不存在于 API 中的规则。** 不报告延迟的前瞻限幅器，会使它所处的每一路并行混音都变得模糊。1.1 版中重新排序的参数表，会把旧会话加载到错误的控件上。这两点在头文件中都没有任何说明。

第一个问题关乎名称，第二个关乎行为，第三个关乎约定。更大的模型对这三者都没有帮助，因为这些信息并未可靠地存在于其训练数据中，不足以信任。

## 代理真正需要的是什么

需要三样东西，分别对应上述三种失败模式：

| 代理需要 | 原因 | 在 Sonore SDK 中 |
| --- | --- | --- |
| 一种核对名称是否存在的方式 | 记忆只会产生看似合理的名称 | 一个 MCP 服务器，其搜索覆盖 282 个头文件中的全部 766 个公共类型 |
| 插件必须遵守的规则 | 这些规则无法从 API 中直接读出 | skill 与 `sonore_rules`：process 签名、延迟，以及音频线程禁止的操作 |
| 完成的定义 | “能编译”不等于“能工作” | 生成的项目自带自检，并在 `ctest` 中进行实时审计，可直接用于验证器 |

这三者都由同一个脚本从 SDK 的头文件生成。这比听起来更重要。手写的代理速查表会在一个版本之内与代码脱节，然后就成了虚构名称的第二个来源。在这里，若文件与头文件不一致，`npm run verify:llms` 会使构建失败；`npm run verify:mcp` 则检查搜索能否找到每一个公共类型，因此服务器给出的“没有匹配”是确切的答案，而不是索引中的缺漏。

## MCP 服务器的六个工具

该服务器从本地检出副本通过 stdio 运行，只需 Node.js，并且每个工具都只读取检出副本中的文件。

| 工具 | 回答的问题 |
| --- | --- |
| `sonore_search` | 这个类、函数、别名或概念是否存在，以及位于何处。词语可按任意顺序匹配，因此搜索“ladder filter”能找到 `LadderFilter`。 |
| `sonore_declaration` | 真实的声明，附带解释其存在原因的注释。 |
| `sonore_header` | 某个头文件的用途、其公共类型以及 include 行。 |
| `sonore_headers` | 所有头文件，并附一行用途说明。 |
| `sonore_example` | 一个完整可用的插件：效果器、乐器、侧链、辅助输出、MIDI 输出、采样器、混响、原生编辑器等。 |
| `sonore_rules` | 插件的结构、哪种 `process` 签名会成为乐器、延迟报告，以及音频线程上禁止的操作。 |

下面是它带来的差异的一个例子。若查询 `CompressorPro`，服务器会回答 SDK 中没有任何匹配项。若查询“ladder filter”，它会返回 `LadderFilter` 和二极管梯形滤波器（diode ladder），并附上它们所在的头文件。代理写的是后者，而不是前者。

## 安装配置

先克隆 SDK，然后把 skill 和服务器添加到你的代理中。以 Claude Code 为例：

```sh
git clone https://github.com/SonorieAI/sonore-sdk "$HOME/sonore-sdk"
npx skills add SonorieAI/sonore-sdk --skill sonore-sdk -a claude-code -g
claude mcp add --scope user sonore-sdk -- node "$HOME/sonore-sdk/scripts/mcp-server.mjs"
```

Codex 使用 `-a codex` 和 `codex mcp add`。Cursor 与 Antigravity 使用 `-a cursor` 或 `-a antigravity` 安装 skill，并在其 MCP 配置文件中添加服务器。[首页](/zh/#agents)上的 **安装技能与 MCP** 按钮列出了每种代理的确切命令。若不使用 `skills` 命令行工具，将 `skills/sonore-sdk` 复制到代理的 skills 文件夹中，效果相同。

## 一个行之有效的首个提示词

请明确说明插件的细节，并说明“完成”的标准：

```txt
Make a tape-style saturator plugin with Drive, Tone and Mix.
Start from a generated Sonore project. Look up every sonore:: name
before you use it. It is done when it builds, ctest passes, and
clap-validator and pluginval run clean.
```

加载该 skill 后，代理会自行遵循 SDK 的工作流程：使用 `sonore_new_plugin.cmake` 生成项目，将 DSP 写入唯一的 `src/plugin.cpp`，边写边核对名称，然后构建。一份源文件会生成 `.clap`、`.vst3`、macOS 上的 Audio Unit、LV2 包和独立应用；同一个项目还能构建供 iPhone 和 iPad 使用的 AUv3，以及 Android 应用。

## “完成”的含义

能编译的插件只是草稿。生成的项目让代理依次通过三项检查，按其所能证明的内容排序：

1. **构建成功：** 一次编译即可构建所有格式。
2. **`ctest` 通过。** 它运行两项测试。独立应用的 `--verify` 会离线渲染音频，并断言其运行正常。在从 SDK 检出副本构建的项目中，实时审计（`sonore_add_rt_test`）会统计音频线程上在各种采样率和块大小下的每一次内存分配，只要有一次就判定失败。SDK 本身的示例也以同样的标准要求：8 kHz 至 384 kHz 的九种采样率，块大小从 1 到 8192，零内存分配。
3. **验证器通过。** `clap-validator` 和 `pluginval` 以宿主加载插件的方式进行加载。两个项目模板在生成时即以 pluginval 严格度 10 通过验证，因此一旦失败，就说明是代理引入的问题。

审计和验证器能发现仅靠阅读代码无法发现的问题，这正是它们应当写入提示词的原因。

## 仍需你亲自完成的事

配备合适工具的代理能写出可以加载、通过验证且不在音频线程上分配内存的插件。但它无法告诉你饱和器听起来是否悦耳，界面在会话中的手感是否合适，或者你在意的宿主是否表现正常。聆听、审美以及在你自己的 DAW 中测试，仍然要由你来完成。带有把关方的格式也是如此：AAX 需要 Avid 的开发者协议和 PACE 签名，没有任何框架能够代为授予。

如果想看不使用代理的分步教程，请阅读[快速入门](/docs/getting-started/)。如需了解 SDK 与 JUCE、iPlug2 等框架的对比，请参阅[音频插件框架对比](/zh/blog/audio-plugin-frameworks-compared/)。

## 来源

- [Sonore SDK 仓库](https://github.com/SonorieAI/sonore-sdk)：README 中的“Writing plugins with a coding agent”一节、`llms.txt` 和 `scripts/mcp-server.mjs`
- [sonore-sdk skill](https://github.com/SonorieAI/sonore-sdk/tree/main/skills/sonore-sdk)
- [Model Context Protocol 规范](https://modelcontextprotocol.io/specification)
- [Agent Skills 格式](https://agentskills.io)
- [llms.txt 约定](https://llmstxt.org)

## 常见问题

### ChatGPT、Claude 或 Cursor 能编写 VST3 插件吗？

可以，前提是代理能够查询框架的真实 API 并构建结果。若仅凭记忆，代理会虚构其所用框架中并不存在的类名和方法名。安装 Sonore SDK 的 MCP 服务器和 skill 后，代理会查询每一个名称，从生成的项目开始，并且只有在插件构建成功、验证器通过后，才认为任务完成。

### 什么是 Sonore SDK MCP 服务器？

一个基于 Model Context Protocol 的服务器，在本地从 SDK 检出副本中运行，通过 stdio 通信，除 Node.js 外无其他依赖。它提供六个只读工具，用于判断某个名称是否存在、显示其真实声明、描述头文件、列出头文件、返回一个完整的示例插件，以及说明插件的规则。它支持 MCP 2026-07-28 版本，也兼容旧版的 `initialize` 握手。

### MCP 服务器会把我的代码发送到别处吗？

不会。它只读取你机器上的 SDK 检出副本，别无其他：没有网络访问，没有遥测，也没有任何写入文件的工具。

### 它支持哪些编程代理？

该 skill 采用 Agent Skills 格式，Claude Code、Codex、Cursor 和 Antigravity 均可读取。MCP 服务器适用于任何 MCP 客户端，包括通过 Codex 使用的 ChatGPT 桌面应用。

### 它是免费的吗？

是的。Sonore SDK、其 skill 和其 MCP 服务器均以 Apache License 2.0 开源，允许闭源和商业插件，没有收入上限、费用或启动画面。
