Files
ai/docs/work-sync/PROMPT_RULE_AUDIT_V1.md
T

117 lines
7.8 KiB
Markdown

# Prompt 规则去劣取优审计 V1
> 审计日期:2026-07-15
> 适用内核:`splus_v1`
> 审计基线:`S_PLUS_SHORT_DRAMA_CODEX_OPTIMIZATION_V1_1.md`
> 代码实现:`backend/src/production-kernel/prompts/prompt-rule-registry.ts`
## 1. 审计原则
历史 Prompt 是生产经验来源,不是公共模板真相。处理规则如下:
1. 历史记录和素材快照不改写、不删除。
2. 项目专名、素材编号、临时 URL 和单次返修上下文不得进入公共模板。
3. 能跨项目解释、能转换为可执行约束的经验,去除项目事实后进入候选规则。
4. 未经 A/B 证明的题材或 Provider 经验只允许处于 `testing`,不能默认激活。
5. 规则必须记录阶段、范围、激活条件、预期改善、证据和版本。
6. 公共规则之间冲突时,以来源事实、已批准改编、连续性和 Provider 可执行性为先。
## 2. 已批准保留
| 规则 ID | 提取出的有效经验 | 适用范围 | 处理结果 |
| --- | --- | --- | --- |
| `shot.performance_arc` | 表演包含起点、触发、可见反应和余韵 | 全局 / 镜头 | 保留并结构化 |
| `shot.dialogue_reaction_timing` | 对白前有准备、句尾有反应与安全余量 | 全局 / 镜头 | 保留并结构化 |
| `shot.motivated_camera` | 运镜有起点、动机、速度和落点 | 全局 / 镜头 | 保留并结构化 |
| `shot.first_last_frame_continuity` | 首尾帧同空间、光源、轴线和运动方向 | 全局 / 首尾帧 | 保留并结构化 |
| `shot.cross_space_boundary` | 跨物理空间分别建立,用可剪切点桥接 | 全局 / 镜头 | 保留并抽象 |
| `shot.scene_anchor_lock` | 连续场次锁定空间结构、光源与固定物件 | 全局 / 连续性 | 保留并结构化 |
| `shot.character_state_lock` | 身份母版与当前服装/伤势状态分工 | 全局 / 角色资产 | 保留并结构化 |
| `shot.asset_visibility_boundary` | 资产检索标签不等于必须入画 | 全局 / 资产 | 保留并结构化 |
| `shot.axis_and_screen_direction` | 连续动作记录轴线和画面方向 | 全局 / 连续性 | 保留并结构化 |
| `shot.state_handoff` | 前镜结束状态与后镜开始状态接力 | 全局 / 连续性 | 保留并结构化 |
| `shot.dialogue_integrity` | 对白保持说话人、语义、顺序和完整性 | 全局 / 对白 | 保留并结构化 |
| `shot.sound_is_story_action` | 环境声、拟音、对白和声音桥服务剧情 | 全局 / 声音 | 保留并结构化 |
| `shot.transition_responsibility` | 视频模型与后期合并层职责分离 | 全局 / 转场 | 保留并结构化 |
| `shot.suspense_sound_pressure` | 悬疑声音绑定证据、动作和心理压力 | 悬疑题材 | 保留为题材规则 |
| `shot.suspense_inner_monologue` | 内心独白只用于悬疑关键心理转折 | 悬疑题材 | 保留为题材规则 |
| `shot.ui_text_post_composite` | 精确中文 UI、进度条和字幕由后期合成 | 全局 / UI | 保留并结构化 |
| `shot.ui_reaction_placeholder` | UI 占位由构图、视线、停顿和反应构成 | 全局 / UI | 保留并结构化 |
| `shot.reference_image_responsibility` | 每张参考图分配唯一主职责和优先级 | 全局 / Provider 输入 | 保留并结构化 |
| `shot.one_primary_action` | 单片段只承担一个主要动作链或转折 | 全局 / 镜头 | 保留并结构化 |
| `shot.no_mechanical_filler` | 不为满足数量补空镜、反应或证据镜 | 全局 / 分镜规划 | 新增硬规则 |
| `episode.hook_truth_and_payoff` | 钩子来自当前冲突并在本集兑现 | 全局 / 分集 | 保留并结构化 |
| `timeline.subtitle_spoken_content_only` | 字幕只含实际语音并跟随语音时点 | 全局 / 时间线 | 保留并结构化 |
## 3. 已抽象重写
| 历史写法 | 问题 | 新写法 |
| --- | --- | --- |
| 用某酒店、宴会厅和红毯示范所有开场 | 项目场景污染公共模板 | 开场运镜由事件、情绪和空间边界决定 |
| 用具体两个人名说明对话轴线 | 角色污染 | 使用当前角色关系轴线和画面运动方向 |
| 用具体文件、礼服、胸针作为资产示例 | 道具和服装污染 | 使用当前镜头的角色状态、主场景和关键道具 |
| 所有开场都要求俯冲、快速推进 | 风格机械化 | 冲突、悬疑、庄重、悲伤等开场分别选择动势 |
| 所有跨空间镜头按“楼外到宴会厅”解释 | 单一案例过拟合 | 任何独立物理空间均分别建立并设计桥接 |
| 终局必须出现特定底牌、地点和两个名字 | 某故事终局污染分集评分 | 检查核心冲突结果、主角选择、状态变化和余波 |
## 4. 已废弃
| 行为 | 废弃原因 | 代码保护 |
| --- | --- | --- |
| `导演补拍节奏点` 自动补满镜头数 | 凭空造剧情,产生平庸填充 | `fitScriptStoryboardBeatsToCount``expandStoryboardSeeds` 不再增删剧情点 |
| 按说话人自动拆成多个对白反打镜头 | 把一场表演切成对白素材块 | `normalizeStoryboardDraftsForVideo` 保持已批准戏剧单元 |
| 用关键词命中宣称固定 `96+``98+` | 分数未经样本校准且可被堆词作弊 | 新内核只认硬门、版本化 Rubric、媒体 QC 和人工校准 |
| 公共模板直接出现历史人物、地点和道具 | 污染新项目 | 污染扫描器与静态回归测试阻断 |
| 生成失败经验自动追加到公共 Prompt | 单次事故可能是素材或 Provider 原因 | 只进入 `PromptRuleCandidateV1`,审核/A-B 后晋升 |
## 5. 待验证候选
以下经验可能有价值,但证据不足,暂不默认激活:
| 候选 | 需要验证的问题 |
| --- | --- |
| 近景/特写占比约 80% | 不同题材、动作密度和平台是否同样适用 |
| 开场前 5 镜最多 1 个环境镜 | 长镜头、史诗场面和慢悬疑是否需要例外 |
| UI 占位统一为 1.2-3 秒 | 字数、屏幕尺寸和观众阅读速度应如何计算 |
| 特定时长档位 5/10/15 秒 | 必须由真实 Provider 能力档案决定,不能写死 |
| 复杂多角色场景默认多图参考 | 不同模型的图数上限、权重和身份一致性差异 |
## 6. 本轮代码变更
- 新增五级生产合同、质量结果、QC Delta 和规则候选合同。
- 新增严格验证器,覆盖来源引用、钩子兑现、场景转折、对白时长、资产职责和首尾帧连续性。
- 新增版本化规则注册表和按阶段/题材/Provider 激活机制。
- 新增 Prompt 污染扫描器,检测历史项目词、数据库 ID、临时 URL 和素材编号写法。
- 公共脚本 Prompt 已接入经批准的镜头规则。
- 公共脚本和分集服务已清除当前审计到的历史项目事实。
- 生产构建通过;中性合同与污染回归测试通过。
## 7. 剩余隔离区
以下旧服务仍含历史项目专属分支,当前不得作为 `splus_v1` 的公共 Prompt 来源:
| 文件 | 当前命中量 | 处置策略 |
| --- | ---: | --- |
| `characters/characters.service.ts` | 28 | 区分角色资产历史兼容与公共角色生成模板,逐段迁出 |
| `images/images.service.ts` | 14 | 把关键帧项目特例改为合同驱动资产选择 |
| `live-action/live-action.service.ts` | 10 | 新项目绕过旧项目特例,后续接 Provider Compiler |
| `live-action/prompt-builder.service.ts` | 9 | 仅保留通用镜头编译,删除人物/酒店/文件专属分支 |
命中量是本轮关键词审计结果,不等同全部问题数量。清理时必须逐条判断是历史读取兼容、项目数据还是公共生成逻辑,禁止批量替换。
## 8. 晋升流程
```text
历史 Prompt / 返修记录 / QC 差异
-> PromptRuleCandidateV1
-> 去除项目事实与内部 ID
-> 明确 stage / scope / activation_condition
-> 至少两个不同项目复现
-> 低成本 A/B
-> 人工审核
-> approved 规则版本
-> 按条件进入编译请求
```
任何步骤缺失,规则只能停留在 `candidate``testing`