feat(core): 角色对白(剧情向按需)+ 聊天精准改一镜 + 模型下拉移位 + 全流程e2e + 交叉验证修复

新能力(均已端到端验证):
- 角色对白 dialogue:[{speaker,line}](speaker=null 即旁白)。默认口播,用户在聊天提要求才出多角色对白(剧情向);narration 保留扁平拼接兼容下游字幕/配音。skill 同步:默认不强制对白。
- 聊天精准改一镜:聊天说「第N镜改XX」→ agent 读全脚本上下文、只重写那一镜(target_index + 后端 _merge_single_segment 强制保其余镜原样),保衔接。
- 前端:分镜卡渲染对白/镜型/露出;模型下拉从顶部移到输入框下方小按钮(对齐 ChatGPT/Lovart)。

全流程 e2e 真跑通:商品→脚本→基础资产(gpt-image-2)→故事板(@图N 多图合成锁脸锁商品)→视频(Seedance 6.4分钟出片,带音效+人声)。

对抗式交叉验证(3 审查员)修复:
- 改稿用基准稿时长 effective_duration(prompt head + normalize + merge),避免请求默认 60 把 90s/6镜稿尾镜截掉/单镜改空转。
- target_index 越界服务端早返回报错、不计费;模型未产出目标镜时抛错释放额度(不静默空转)。
- 前端「第N镜」正则收窄为 镜|场(去掉会误判「第3个卖点」的 个|段)。
- 回归:测试 setUp 停用 seed 中转站文本模型,保证命中可 mock 的 provider(18/18 过)。

CLAUDE.md 加「AI 生成 Agent 化架构」一节供后续维护。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-17 05:09:51 +08:00
co-authored by Claude Opus 4.8
parent 163a6627ba
commit 3d38c173e6
12 changed files with 186 additions and 29 deletions
+3 -1
View File
@@ -51,7 +51,8 @@ description: >
"speaker": "可选,指向某 entity 的 id;画外旁白时为 null",
"visual": "画面描述",
"product_exposure": "商品露出方式(手持/特写/使用中)",
"entity_refs": ["c1"]
"entity_refs": ["c1"],
"dialogue": []
}
]
}
@@ -64,6 +65,7 @@ description: >
- **每 15 秒切一镜**`segment_count = total_duration / 15`,即 15→1 镜、30→2 镜、60→4 镜、90→6 镜;每镜 `duration=15``index` 从 0 连续递增(粗暴切,不做复杂时长算法)。
- 各档位的 4 镜功能(role)如何分配/压缩/扩展,见 `references/methodology.md`「档位 × 黄金结构映射」。
- `entities[].id` 全局唯一,`segments[].entity_refs` 与 `speaker` 只能引用已声明的 id。
- **`dialogue`(角色对白)默认留空 `[]`** —— 绝大多数电商场景是口播/旁白,用 `narration` 即可,**不要无故造对白**。仅当 ① `tone` 为「剧情」且画面确有多角色互动,或 ② 用户明确要求「加对白 / 角色对话 / 剧情向」时,才填 `dialogue`:元素为 `{"speaker":"角色 entity 的 id,或 null=旁白","line":"台词"}`,每条 `line` 仍 ≤55 字;并把各 `line` 拼进 `narration` 兜底下游字幕/配音。纯产品展示向甚至可让 `narration` 也留空(没人说话,只有画面)。
- **每个声明的 entity 至少被一个 segment 引用**(不留孤儿 entity)。
- `visual_prompt` 由你自动生成,小白无需打字。
- 不要输出 schema 之外的字段,也不要省略必填字段。