# 18 · Agent 剧情理解与一致性附录

> 主文档: [18-Agent升级方案PRD.md](/Users/linshizhanghu/Documents/yaoai-video/design-docs/18-Agent升级方案PRD.md)  
> 用途: 记录剧情理解、证据追溯、一致性基准和提示词准确性约束的详细结构。

## 1. ScriptUnderstanding 输出结构

```json
{
  "scriptDigest": {
    "titleGuess": "隐婚复仇",
    "genre": "现代都市情感",
    "theme": "真相、背叛、成长",
    "oneSentenceLogline": "女主在被背叛后查清真相并夺回人生主动权"
  },
  "plotFacts": [
    {
      "factId": "pf_001",
      "episodeHint": 1,
      "event": "女主发现未婚夫与继妹联手设计她",
      "characters": ["女主", "未婚夫", "继妹"],
      "location": "订婚宴后台",
      "cause": "继妹想夺取女主继承权",
      "effect": "女主决定暗中调查",
      "evidence": {
        "source": "script",
        "assetId": 123,
        "excerpt": "……",
        "startOffset": 1024,
        "endOffset": 1288
      }
    }
  ],
  "characterFacts": [
    {
      "name": "女主",
      "aliases": ["林知夏", "知夏"],
      "identity": "设计师，家族继承人",
      "relationshipFacts": ["与继妹存在继承权冲突"],
      "firstAppearanceFactId": "pf_001",
      "evidenceFactIds": ["pf_001", "pf_004"]
    }
  ],
  "sceneFacts": [
    {
      "name": "订婚宴后台",
      "sceneType": "indoor",
      "narrativeFunction": "揭露背叛与主角觉醒",
      "evidenceFactIds": ["pf_001"]
    }
  ],
  "uncertainties": [
    {
      "type": "character_name_missing",
      "message": "剧本片段中多处使用“她”，需要结合上下文确认是否均指女主",
      "affectedFactIds": ["pf_003"]
    }
  ]
}
```

## 2. 剧情理解复核输出

```json
{
  "coverageScore": 0.86,
  "coveredChunks": ["chunk_001", "chunk_002"],
  "missingChunks": ["chunk_009"],
  "contradictions": [
    {
      "type": "timeline_conflict",
      "message": "同一事件在两个片段中出现不同先后顺序",
      "factIds": ["pf_012", "pf_019"],
      "blocking": true
    }
  ],
  "readyForGeneration": false
}
```

门禁规则：

- 剧本中每个关键场次至少生成一条 `plotFact`，或被明确标记为无效/过场。
- `plotFacts` 必须覆盖主线冲突、转折点、人物关系变化和结局方向。
- 无证据的人物关系、动机、事件因果必须降级为 `pending_inference`。
- `coverageScore` 低于阈值，或关键事实存在冲突时，不允许进入 `outline_gen`。

## 3. ProjectConsistencyBible 结构

```json
{
  "storyWorld": {
    "genre": "现代都市言情",
    "theme": "复仇与自我成长",
    "timeline": "当代，故事主线跨度约 30 天",
    "coreConflict": "女主寻找真相并对抗商业家族操控",
    "forbiddenDrift": ["不得突然改成古风", "不得新增超自然设定"]
  },
  "characters": [
    {
      "id": 1001,
      "name": "林知夏",
      "roleType": "female_lead",
      "identity": "被陷害的年轻设计师",
      "personality": "克制、敏感、外柔内刚",
      "visualAnchor": "25岁，黑色长发，清冷气质，浅色通勤装",
      "costumeRules": ["职场场景以白/灰/浅蓝为主", "危机场景可换深色外套"],
      "forbiddenDrift": ["不得变成短发", "不得改成学生身份"]
    }
  ],
  "scenes": [
    {
      "id": 2001,
      "name": "盛华集团顶层会议室",
      "sceneType": "indoor",
      "spatialAnchor": "落地窗在右侧，长会议桌居中，城市天际线作为背景",
      "lighting": "冷白顶光 + 玻璃反射",
      "colorPalette": "steel blue / cold grey / black",
      "forbiddenDrift": ["不得出现人物肖像海报", "不得变成暖色咖啡厅"]
    }
  ],
  "visualStyle": {
    "baseStyle": "写实电影感短剧",
    "lensLanguage": "中近景推动情绪，关键冲突用低角度或压迫性构图",
    "colorPolicy": "冷灰蓝为主，高压情绪可加入低饱和红色点缀",
    "characterRendering": "同一角色保持年龄、发型、体型、服装色系一致",
    "sceneRendering": "场景保持空间方位、主色调、光线方向一致",
    "negativeRules": ["不得随机切换二次元风格", "不得出现不相关道具和人物"]
  }
}
```

## 4. 一致性硬约束模板

```text
一致性基准:
- 剧情主线: {{storyWorld.coreConflict}}
- 时间线: {{storyWorld.timeline}}
- 角色视觉锚点: {{characters[].visualAnchor}}
- 角色禁改项: {{characters[].forbiddenDrift}}
- 场景空间锚点: {{scenes[].spatialAnchor}}
- 场景色彩/光线: {{scenes[].colorPalette}} / {{scenes[].lighting}}
- 整体画面风格: {{visualStyle.baseStyle}} / {{visualStyle.lensLanguage}}

硬性要求:
1. 不得改写任何已存在角色的身份、年龄段、发型、体型、核心服装色系。
2. 不得把已存在场景改成另一种空间结构、主色调或光线方向。
3. 不得引入与剧情主线无关的新人物、新场景、新世界观设定。
4. 如确实需要新增角色或场景，必须输出为 pending_suggestion，不得直接混入正式结果。
```

## 5. 视频提示词中间结构

```json
{
  "storyboardId": 3001,
  "sourceFactIds": ["pf_023", "pf_024"],
  "characterRefs": [
    {
      "characterId": 1001,
      "name": "林知夏",
      "usedAnchor": "25岁，黑色长发，清冷气质，浅色通勤装"
    }
  ],
  "sceneRef": {
    "sceneId": 2001,
    "usedAnchor": "落地窗在右侧，长会议桌居中，城市天际线作为背景"
  },
  "shotFacts": {
    "action": "女主克制地看向会议桌对面，压下愤怒",
    "emotion": "隐忍、警觉",
    "dialogueIntent": "她意识到对方在隐瞒关键证据"
  },
  "visualDirectives": {
    "camera": "medium close-up, slight low angle",
    "lighting": "cold white overhead light with glass reflection",
    "composition": "female lead on left third, conference table leading lines"
  },
  "finalPrompt": "..."
}
```

校验规则：

- `finalPrompt` 中的所有角色名、动作、情绪、场景、关键道具，都必须能在 `sourceFactIds / characterRefs / sceneRef / visualDirectives` 中找到来源。
- `finalPrompt` 不允许出现中间结构里没有声明的新增人物、地点、事件和道具。
- 如果模型无法从事实生成足够准确的画面提示词，应返回 `need_more_context`，而不是补剧情。

