Skip to content

提示词库把某个原型角色的装备写死成默认值,导致所有角色被加上斗篷与武器(Refs #171) #195

Description

@johnnyzhang-eng

现象

任意角色生成动作后,i2v 产物都会多出一件斗篷/罩袍,并倾向于给角色手里塞一件武器;母版自身的特征(挂件、软管、胸铠等)反而被挤掉。

此前归因为"模型没守住角色一致性"。该归因是错的。

根因

ai_engine/prompt/walk.py

DEFAULT_GARMENT = "the cape and tabard"

WALK_BODY_SIDE = (
    "... {garment} swing with the steps, "
    "the weapon stays held low and steady at the side in a fixed grip, ..."
)

ai_engine/prompt/actions.py(idle / attack)同样带 DEFAULT_WEAPON = "the sword"DEFAULT_GARMENT = "the cape"jump.py 相同。

strategy/concrete.py_build_prompt() 只传 facing

return build(facing=action.facing)

于是 garment / weapon 全部落到默认值——那是当初为某个持剑披风角色写的词。每个角色都被提示词要求穿斗篷罩袍、手持武器。

更进一步:walk 模板里 weapon 那句是写死的,连参数都没有(actions.py 的 idle/attack 有 {weapon} 占位符,walk 没有)。

验证

2026-08-11 用一个完全没有布料结构的刚性角色(球形头盔 + 贴身帆布服 + 厚底靴)实跑,母版不含任何披挂。i2v 产物仍出现一件及膝大斗篷,同时母版的颈后软管消失。

这排除了"软布料勾出斗篷"的假设,指向提示词本身。

影响

直接打在产品核心卖点上:我们卖的是角色一致性,而一致性被自己的提示词破坏。任何非"持剑披风"体型的角色都会被拽向该原型。

修改方向

提示词只描述动作,角色身份由母版承担。

  1. 模板去掉硬编码的装备默认值;walk 的 weapon 子句参数化或整句去掉;
  2. CharacterCard 增加结构化的角色特征字段(现在只有自由文本 desc,没有地方存"这个角色穿什么、拿什么");
  3. _build_prompt() 把角色特征接上。

验收

同一角色、同一母版、同一视频参数,只改提示词复跑一次,对照产物是否还出现母版上没有的披挂。这样能干净归因。需要一次按次计费的视频调用。

相关

代码在 #180 / #181 的范围内,本 Issue 独立跟踪,避免夹带。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions