# 可移植性

spec 可移植，它内部的行不都可移植。把每一行归到三层里，因为每层需要不同的处理——而且只有一层能写一次、到处放心用。

| 层 | 是什么 | 处理 | 存放在 |
|---|---|---|---|
| **语言层** | 结构与可观察描述 | 照写即可 | spec 里 |
| **偏置层** | 用来反掉某个模型默认倾向的词 | 逐模型实测 | 模型档案里 |
| **能力位层** | 接口物理上能接受什么 | 先探测，再降级 | 模型档案里 |

跨模型最常见的错误是**把偏置层的行当成语言层的行**——把在某个模型上有效的反默认后缀，照抄给另一个模型并假设它照样有用。

## 语言层——可移植

- 三桶结构与作用域纪律
- 末态，三种形态都算
- 可观察的情绪线索
- 术语 + 描述双写
- 参考素材角色写成「控 X，不许拿 Y」
- 事件触发的推进

这些只依赖模型读得懂语言，别无所求。写一次即可。

## 偏置层——实测，绝不假设

每个生成模型都有它会回归的默认值。偏置层的文字存在的意义就是反掉**那个模型的**默认值，所以它不迁移：

| 写法 | 为什么属于偏置层 |
|---|---|
| `保留真实的微毛孔和皮肤纹理` | 反的是磨皮／美颜默认值。在本来就渲染粗糙皮肤的模型上会**过冲**，脸会脏 |
| `不要字幕、不要 BGM` | 只在真的会冒出多余字幕和音乐的地方才需要 |
| 具体的转场词汇 | 识别度不一，有些词有文化范围 |
| `@image1` 与 `参考图 1` | 接口寻址语法 |
| 负向清单整体 | 各模型的翻车模式不同 |

其中两类需要特别处理。

### 反默认后缀：过冲是真实的失败

不要在没确认目标模型基线的情况下照搬反默认短语。测试很便宜：同一份 spec，带这句跑一次、不带跑一次。如果**不带**的那版已经达到或超过目标，这句话在这个模型上是反作用的。**两个结果都记进档案**——「无效或过冲」这个字段就是为此存在的。

### 寻址语法：唯一必须翻译的东西

这是描述无法替代的常见情形。模型期待某个特定 token 来绑定素材时，那个 token 必须正确输出，否则绑定丢失。把映射存在档案里，编译时翻译，**周围的句子结构不要动**。

## 能力位层——先探测，再降级

这些不是理解偏差，是接口能接受什么的硬限制。

| 能力 | 为什么重要 |
|---|---|
| 素材寻址与数量 | 决定多素材 spec 能保住多少 |
| 一次生成能否多镜头 | 决定切点写在提示词里还是剪辑台上 |
| 是否支持硬切 | 同上 |
| 时长上限 | 决定每次请求装几段 |
| 时序遵循度 | 决定秒级粒度是否诚实 |
| 音频：原生／参考／无 | 决定音频行该不该出现在提示词里 |

### 探测

没有档案就不做假设。跑能解决问题的最小测试，然后记录。按成本从低到高，spec 一旦可满足就停：

1. **读已发布的规格** —— 素材上限、时长、分辨率。以实际模型页为准而不是文档样例；状态码 200 不算确认，要看页面内容确认模型真的存在。

   ⚠️ **已发布的枚举值是假设，不是限制。** 文档写的范围经常比实际能提交的更窄，而且页面自己会打架——实测见过同一页三处写了三个不同的时长范围。**直接提交你真正想要的值，让 API 来回答。** 被拒不创建任务、不花钱，所以试一次严格优于照表设计。

   这个错误是不对称的：信了过窄的文档 → spec 被静默降级 → 运行成功 → 输出里没有任何迹象表明本来能有更好的配置。没人会注意到。

2. **一次最小生成** —— 凡是依赖行为的项都靠它：时序遵循度和多镜头能力读不出来，只能跑出来。

3. **立刻记录，包括失败。** 没记录的探测会被下一个人按全价重跑一遍。

时序遵循度最值的一次探测：同一份 spec 分别用 `分段` 和 `秒级` 各跑一遍，量请求拍点与实际拍点的偏差。这一次对照就能定下该模型的默认粒度。

### 降级

| 缺什么能力 | 降级成 |
|---|---|
| 多素材寻址 | 一张图锁身份，其余全部走文字 |
| 一次多镜头 | 一镜一次请求，切点在剪辑台上完成 |
| 素材数量不够 | 按优先级合并角色：身份 > 关键道具 > 场景 > 风格 |
| 时长不够 | 拆成各自成立的段落，再用边界帧接龙 |
| 时序遵循度差 | 降到分段 + 末态 |
| 无原生音频 | 删掉音频行，另做后期 |
| 只支持单图 I2V | 首帧作为唯一视觉锁，其余走文字 |

**降级必须报告。** 静默降级的 spec 看起来跟按原样跑完的一样，导致输出无法解释，也会悄悄污染任何建立在它之上的对比。

## 公平对比

如果目的是对比而不是交付，降级会毁掉对比本身——你比的会是两份不同的 spec。受控对比要做到：

- spec 落在两个模型能力的**交集**上。不要用 30 素材的 spec 去比一个 30 素材模型和一个 9 素材模型
- **只翻译寻址语法**，其余每个字保持一致
- 偏置层的行**排除在对比之外**，或者作为独立变量单独跑。为 A 模型调过的反默认后缀，对 B 模型就是让分
- 记录你为此收着没写的东西。约束未说明的对比，读起来像普适结论，实际只是个窄结论

## 关联

- [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md) — 该记哪些字段
- [verifiability.zh-CN.md](verifiability.zh-CN.md) — 语言层的完整写法
- [spec-format.zh-CN.md](spec-format.zh-CN.md) — 各层内容在 spec 里的位置
