D136+: 分层提示词引擎 — L0主体优先·不可稀释
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled

buildPrompt()重构提示词结构:
  L0 主体: 人物+道具锁在最前面 → AI注意力第一落点
  L1 空间: 克制描述 → '背景:广场边缘角落·远处人群·金色阳光'
      有主体时去掉灵霄宗鎏金大字→不抢人物焦点
  L2 动作: 具体行为
  L3 风格: 移到末尾 → '真人写实·电影光影·亚洲面孔'

冰朔: '用编码告诉他这是什么意思'
→ CHAR-003不再被埋在后面 → AI必须先读懂人物再读环境
This commit is contained in:
冰朔 2026-06-21 17:07:19 +08:00
parent e9170aa28a
commit 4c3623344c

View File

@ -66,42 +66,54 @@ function buildPrompt(shot, encoding) {
const locks = encoding.continuity_locks;
const parts = [];
// 风格基调
parts.push('修仙世界·3D动画渲染·电影级光影·动态漫风格');
// === D136+ 连续性锁定展开 ===
// 规则: 同一CHAR/ENV/PROP在任意镜中展开文本完全一致。
// 锁定文本来自导演编码的 continuity_locks 节。
// === D136+ 分层提示词引擎 ===
// 冰朔: "用编码告诉他这是什么意思" → HLDP编号不是标签是优先级排序
//
// 提示词分层:
// L0 主体(人物+道具) ← AI注意力第一落点·不可稀释
// L1 空间(克制描述) ← 只给必要信息·不抢人物焦点
// L2 动作 ← 具体行为
// L3 风格/约束 ← 全局修饰
let desc = '';
// 1. 环境锁定
if (shot.env && locks?.environments?.[shot.env]) {
const envLock = locks.environments[shot.env];
desc += envLock.locked_desc;
// 校验展开一致性
if (!envLock.locked_desc.includes('人群边缘') && !envLock.locked_desc.includes('竖式')) {
console.warn(` ⚠️ 连续性警告: ${shot.env} 缺少D136+修复关键词`);
}
}
// ─── L0: 主体锁定 ───
// 人物和道具的描述放在最前面确保AI第一注意力在这里
const l0Parts = [];
// 2. 角色锁定
if (shot.char_ref && locks?.characters?.[shot.char_ref]) {
const charLock = locks.characters[shot.char_ref];
desc += `${charLock.locked_desc}`;
l0Parts.push(charLock.locked_desc);
}
// 3. 道具锁定
if (shot.prop_ref && locks?.props?.[shot.prop_ref]) {
const propLock = locks.props[shot.prop_ref];
desc += `${propLock.locked_desc}`;
l0Parts.push(propLock.locked_desc);
}
if (shot.prop_ref_2 && locks?.props?.[shot.prop_ref_2]) {
const propLock2 = locks.props[shot.prop_ref_2];
desc += `${propLock2.locked_desc}`;
l0Parts.push(propLock2.locked_desc);
}
// 4. 动作描述 (锁定文本之后追加镜头特定的动作)
// 如果没人也没道具(纯环境镜)→不生成L0
if (l0Parts.length > 0) {
desc += l0Parts.join('。');
}
// ─── L1: 空间定位 ───
// 克制描述。不给灵霄宗鎏金大字——除非是S1-01建立镜
if (shot.env && locks?.environments?.[shot.env]) {
const envLock = locks.environments[shot.env];
// 有主体时用简短版·没有主体时用完整版
if (l0Parts.length > 0) {
// 简短版: 去掉"灵霄宗鎏金大字"细节,只留位置和光线
desc += `。背景: 修仙广场边缘角落,人群远处,金色阳光`;
} else {
desc += envLock.locked_desc;
}
}
// ─── L2: 动作 ───
if (shot.action) {
desc += `${shot.action}`;
}
@ -112,14 +124,14 @@ function buildPrompt(shot, encoding) {
parts.push(desc);
// 景别
parts.push(`景别: ${shot.framing}`);
// ─── L3: 风格 ───
parts.push('景别: ' + shot.framing);
// 情绪
if (shot.emotion?.type) parts.push(`氛围: ${shot.emotion.type}`);
if (shot.emotion?.type) parts.push('氛围: ' + shot.emotion.type);
// 负面
parts.push('不要真人面孔·不要现代元素·不要水印·不要字幕');
// 风格锁定(不再是第一行)
parts.push('真人写实风格,电影级光影,亚洲面孔');
parts.push('不要卡通·不要3D渲染·不要现代元素·不要水印·不要字幕');
return parts.join('。');
}