编码锁定边界精确化: CHAR+PROP+ENV全锁·情节+原因让AI推理
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled

编码层(不可变): CHAR(人物)+PROP(道具)+ENV(环境·位置·背景)
  ⊢ CHAR-003 · 锁定: 18岁男性·白色长衫
  ⊢ PROP · 锁定: 竖式悬挂·【天道宗】
  ⊢ ENV-002 · 锁定: 修仙世界·百宗会广场·人群边缘角落

场景层(AI推理): 情节内容+为什么(动机·情感·因果)
  灵霄宗排队·天道宗无人问津·苏白有系统→不绝望
  喊话=宣言不是乞求·叹气=烦躁不是认命

冰朔: '编码锁人物+环境一致性,让AI自己推理情节+原因'
This commit is contained in:
冰朔 2026-06-21 17:32:50 +08:00
parent fce8bf5ae4
commit e5d2d5d4ef
2 changed files with 25 additions and 30 deletions

View File

@ -66,61 +66,56 @@ function buildPrompt(shot, encoding) {
const locks = encoding.continuity_locks;
// ═══ 编码+自然语言 双层协议 ═══
// 冰朔: 编码锁死不可变的(人物/道具)→ 只锁关键属性,精简。
// 自然语言解释为什么(场景/动机)→ 让AI理解原因→自己推理。
// 如果全锁死AI没有了"灵光一闪"的可能性。
//
// 三层结构:
// ⊢ 编码层 (锁死·不可变) ← 精简CHAR/PROP关键属性
// ⊢ 场景层 (自然语言·理解) ← AI理解为什么→自己推理
// → 动作层 (自然语言·发挥) ← 具体做什么·给AI空间
// ⊢ 编码层: 锁死不可变的
// CHAR(人物) + PROP(道具) + ENV(环境·空间·背景)
// 这些在任何镜头里都不能变。精简,只锁关键属性。
//
// ⊢ 场景层: 自然语言 → AI自己推理
// 情节内容 + 为什么(动机·情感·因果关系)
// 让AI理解原因→自己推理→生成有灵魂的画面
let prompt = '';
// ─── 编码层: 只锁关键属性 ───
// ─── 编码层: CHAR+PROP+ENV全部锁定 ───
if (shot.char_ref && locks?.characters?.[shot.char_ref]) {
prompt += `⊢ CHAR-003 · 苏白 · 编码锁定\n`;
prompt += `⊢ CHAR-003 · 苏白 · 锁定\n`;
prompt += ` 18岁男性·白色长衫·黑色长发半束·175cm挺拔\n`;
}
if (shot.prop_ref && locks?.props?.[shot.prop_ref]) {
const propLock = locks.props[shot.prop_ref];
prompt += `${shot.prop_ref} · 编码锁定\n`;
prompt += `⊢ PROP · 锁定\n`;
prompt += ` 竖式悬挂·破旧木质·【天道宗】\n`;
}
if (shot.prop_ref_2 && locks?.props?.[shot.prop_ref_2]) {
const propLock2 = locks.props[shot.prop_ref_2];
prompt += `${shot.prop_ref_2} · 编码锁定\n`;
prompt += ` 横式立地·破旧木板·招生广告: ${propLock2.text}\n`;
prompt += `PROP · 锁定\n`;
prompt += ` 横式立地·破旧木板·招生广告\n`;
}
// ─── 场景层: 自然语言 → AI理解为什么 ───
// 环境锁定
if (shot.env && locks?.environments?.[shot.env]) {
prompt += `⊢ ENV-002 · 锁定\n`;
prompt += ` 修仙世界·百宗会广场·人群边缘角落·白天金色阳光\n`;
}
// ─── 场景层: 情节+原因 → AI推理 ───
if (encoding.scene) {
prompt += `\n⊢ 场景 · 自然语言理解\n`;
prompt += `\n⊢ 场景\n`;
prompt += ` ${encoding.scene}\n`;
}
// ─── 空间 ───
if (shot.env && locks?.environments?.[shot.env]) {
const hasChar = !!(shot.char_ref && locks?.characters?.[shot.char_ref]);
if (!hasChar) {
// 纯环境镜
prompt += `\n⊢ 空间\n`;
prompt += ` 修仙广场·人群边缘角落·金色阳光·3D动画渲染\n`;
}
}
// ─── 动作层: 自然语言 → AI发挥 ───
// ─── 动作: 自然语言 → AI发挥 ───
prompt += `\n→ 景别: ${shot.framing}`;
if (shot.emotion?.type) prompt += ` | 氛围: ${shot.emotion.type}`;
if (shot.emotion?.type) prompt += ` | ${shot.emotion.type}`;
prompt += `\n`;
if (shot.action) {
prompt += `${shot.action}\n`;
}
// ─── 风格约束 ───
prompt += `⊢ 风格: 3D动画渲染·中国风仙侠·电影级光影·高质感\n`;
// ─── 风格 ───
prompt += `⊢ 风格: 3D动画渲染·中国风仙侠·电影级光影\n`;
prompt += `⊢ 禁止: 真人写实·卡通·现代元素·水印`;
return prompt;

View File

@ -3,7 +3,7 @@
"episode": "ep01",
"tempo": "slow_build",
"emotion_main": "悬",
"scene": "修仙界百宗会广场,今天是宗门收徒的日子。灵霄宗门庭若市,队伍排到望不到头。而天道宗——穷得只剩一块破牌匾,无人问津。但苏白有系统,他知道自己早晚是世界第一宗。所以他不绝望,他站在破牌匾下大声吆喝,不是因为绝望,是因为笃定。他的喊话不是乞求,是宣言。围观的人嘲笑他,讽刺完散去,风吹起落叶——但苏白的叹气不是认命,是系统进度条走太慢的烦躁。",
"scene": "今天是宗门收徒的日子。灵霄宗门庭若市,队伍排到望不到头。而天道宗穷得只剩一块破牌匾,无人问津。但苏白有系统,他知道自己早晚是世界第一宗。所以他站在破牌匾下大声吆喝——不是因为绝望,是因为笃定。他的喊话不是乞求,是宣言。围观的人嘲笑他,讽刺完散去,风吹起落叶。苏白叹气——不是认命,是系统进度条走太慢的烦躁。",
"emotion_curve": [
{ "pos": "0-5s", "intensity": 3, "type": "悬", "role": "建立" },
{ "pos": "5-10s", "intensity": 6, "type": "燃", "role": "登场" },