三种变化率分离
一套创作系统里有三类东西,它们变化的节奏完全不同。Channek 把它们钉进三个不同的载体:
| 类目 | 载体 | 形态 | 变化率 | 例子 |
|---|---|---|---|---|
| 能力(Capability) | 插件 | 代码/实现 | 随生态演进 | 步骤实现、图像生成、TTS 引擎、发布平台对接 |
| 流程(Process) | 卡的 pipeline 段 | 数据 | 每个创作者不同 | 用哪些步、什么顺序、每步什么配置 |
| 风格(Style) | 卡的 style 各段 | 数据 | 每个频道不同 | 品牌 token、音色、字幕样式、画风锁 |
为什么要这样切:如果流程写死在软件里,换一种创作方式就要改软件;如果能力实现塞进卡里,每张卡都要背一份代码、升级要挨张卡改。把变化率不同的东西搅进同一层,是这类系统腐坏的最常见方式。
分开之后,三层各自演进:
- 插件作者升级 TTS 引擎,所有引用它的卡自动受益;
- 频道作者调整流程步序,只改自己的卡,不碰任何代码;
- 同一套插件,可以被一百张流程和风格完全不同的卡复用。
步骤 id 是三层之间的接口
卡的 pipeline.steps 里每一步只写一个步骤定义 id(如 acme.review-gate),不写实现。这个 id 由某个插件注册,宿主在运行时按 id 解析。同理,requires.providers 里写的是能力 id + 偏好的 provider,不是某段代码的路径。
这意味着:
- 卡永远引用能力,不包含能力;
- 同一个步骤定义可以出现在一条流程的多个位置(用不同的
key区分); - 步骤没装时,界面如实显示占位与安装引导,流程降级但不崩溃。
备注
如果你发现自己想把「一段脚本」「一个可执行文件」放进卡目录——停下来,那是插件的活。把它做成插件,再让卡 requires 它。