用 OiiOii 做多集短剧,先把角色设定和全局资产存进项目记忆

文章导读
连做几集短剧之后,角色长相、服装、语气开始漂移,通常不是生成模型突然变差,而是角色信息只写在每一集的提示词里:第一集写了发色和银链,第二集忘了写,第三集换了个说法,画面自然对不上。更稳的做法是在开拍前把主要角色拆成设定卡、把跨集复用的场景和道具放进项目级记忆,单集提示词只描述本集剧情、动作和临时变化。排查顺序可以先看项目记忆里有没有角色卡,再看单集是否重复定义了角色。
📋 目录
  1. A 把主要角色拆成设定卡再入库
  2. B 在同一项目里区分全局资产与单集素材
  3. C 开新场次前核对记忆是否被覆盖
  4. D 用一场对照戏验证一致性是否生效
  5. E 哪些内容不该塞进全局记忆
A A

连做几集短剧之后,角色长相、服装、语气开始漂移,通常不是生成模型突然变差,而是角色信息只写在每一集的提示词里:第一集写了发色和银链,第二集忘了写,第三集换了个说法,画面自然对不上。更稳的做法是在开拍前把主要角色拆成设定卡、把跨集复用的场景和道具放进项目级记忆,单集提示词只描述本集剧情、动作和临时变化。排查顺序可以先看项目记忆里有没有角色卡,再看单集是否重复定义了角色。

多集短剧的角色一致性,建议在第一集开拍前就把外观锚点、说话习惯写入项目级记忆,服装写成可被单集覆盖的默认值;单集提示词只保留本集动作、场景和一次性道具。若第二集起角色长相漂移,先核对项目记忆是否被单集重写,再检查提示词是否重复描述角色。一次性路人与临时道具不入全局,确认跨集复用后再升级。

把主要角色拆成设定卡再入库

角色信息散落在各集提示词里,最直接的后果是每写一集就要重抄一遍外观描述,抄漏一个发色或配饰,画面就会换人。设定卡的目的不是写得更长,而是把不变的部分固定下来,让单集提示词只写「这集变了什么」。每张卡建议覆盖三类字段:

  • 外观锚点:年龄感、脸型、发型与发色、眼睛特征、体型、标志性配饰,跨集不变,建议全量进入项目级记忆。
  • 服装状态:默认套装、换装触发条件、锁定单品。默认套装作为兜底进项目级记忆,但标记为可被单集覆盖;锁定单品不允许单集改。
  • 说话习惯:人称、句子长度、口头禅、语速、避免使用的表达,同样进项目级记忆,单集不重复声明。

一个可以直接改键名使用的卡片骨架:

id: lin_wan
display_name: 林晚
appearance_anchors:
  age_range: '25-28'
  face: '鹅蛋脸,左眉尾有浅疤'
  hair: '黑色齐肩直发,常右侧别耳'
  eyes: '丹凤眼,深棕瞳色'
  build: '偏瘦,身高约168'
  signature: '左手腕细银链'
wardrobe:
  default: '深灰风衣 + 白衬衫 + 黑直筒裤'
  override_scope: episode
  locked_items:
    - '左手腕细银链'
speech:
  person: '第一人称'
  sentence_len: '短句为主'
  catchphrase:
    - '行,那就这样'
  avoid:
    - '网络流行语'
    - '大段形容词'

入库范围按这张卡切:appearance_anchorsspeech 整段写入项目级记忆,wardrobe.defaultlocked_items 也进,前者作用域标成 episode,意思是单集可以换衣服、不能换掉锁定单品。字段名按你项目里实际使用的键替换即可,关键是同一份外观描述不要同时存在于角色卡和单集提示词里。

在同一项目里区分全局资产与单集素材

全局记忆一旦被单集道具和临时配角填满,后面每开一场都要在一堆无关条目里找真正要用的角色。分层判断可以先问三个问题:这个资产是否跨集复用、是否随剧情持续变化、是否允许被单集临时覆盖。偏长期的放全局,偏一次性的放单集。

用 OiiOii 做多集短剧,先把角色设定和全局资产存进项目记忆
  • 正例一:主角的银链信物,从第一集到最后一集都在,进全局资产。
  • 正例二:主角的默认风衣,作为全局 wardrobe.default,换装集在单集里覆盖。
  • 反例一:某一集酒吧里的调酒师,只出现一次,放单集 local_assets
  • 反例二:某一集女主手里的红伞,除非后续反复出现,否则先留在单集,确认复用后再升级到全局。

落到目录上,可以用项目记忆和单集素材两个层级隔离,单集素材默认不写回项目记忆:

project/
  memory/
    characters/
      lin_wan.yaml
    assets/
      scene_home.yaml
      prop_silver_chain.yaml
    style.yaml
  episodes/
    ep01/
      local_assets.yaml
      prompt.md
    ep02/
      local_assets.yaml
      prompt.md

episodes/*/local_assets.yaml 里可以放临时角色和一次性道具;只有判断它在后面几集还会出现,再移到 memory/assets。这一步建议人工决策,不要让单集自动写回全局层。

开新场次前核对记忆是否被覆盖

角色漂移经常不是记忆没建,而是单集把记忆覆盖掉了。开新场次前按顺序核对:

用 OiiOii 做多集短剧,先把角色设定和全局资产存进项目记忆
  1. 打开项目记忆里的角色卡,确认关键字段还是你要的版本,没有被上一集改动。
  2. 检查本集 local_assets.yaml,是否定义了与角色卡同名的键,例如 hairsignature
  3. 检查本集提示词里是否又写了一遍外观描述。出现发色、瞳色、配饰这类外观锚点词,通常说明在重复定义。
  4. 确认本集服装是走角色卡默认值,还是在单集里显式声明的换装。

页面上能观察到的反馈可以对照这张表:

观察点正常表现异常时先改哪里
角色卡详情显示继承项目级字段所有集都漂移,改项目记忆角色卡
本集素材层只有本集新增道具只有这一集漂移,改单集素材或提示词
提示词正文不出现外观锚点词交错漂移,删掉提示词里的重复外观描述

改哪一层的原则很简单:问题出现在所有集,改项目记忆;只出现在某一集,改单集。角色卡正确时不要顺手改全局,那样会把本来正常的集也带偏。

用一场对照戏验证一致性是否生效

不需要先做完整一集来验证。写两段很短的镜头,同一个角色、同一套服装、不同场景,角色描述全部依赖项目记忆,只改场景和动作。

ep01 / sceneA
场景: 客厅,白天
角色: 林晚(沿用项目记忆角色卡 lin_wan)
动作: 放下包,低头看手机
台词: 行,那就这样。

ep01 / sceneB
场景: 街边,夜晚
角色: 林晚(沿用项目记忆角色卡 lin_wan)
动作: 站在路灯下等车
台词: 行,那就这样。

两场台词故意相同,方便单独比对语气;场景不同,方便比对光照变化下外观是否还稳。对照检查点:

用 OiiOii 做多集短剧,先把角色设定和全局资产存进项目记忆
  • 外观:脸型、发色与发型、眼睛特征、左手腕银链,两场是否一致。
  • 服装:风衣主色、衬衫与裤子结构、配饰位置,两场是否一致。
  • 语气:是否保持短句、第一人称、同一句口头禅,没有引入角色卡 avoid 里列出的表达。

外观对不上,回到角色卡收紧外观锚点;语气对不上,补 speech 字段;只有夜景那一场不对时,优先怀疑单集提示词额外写了光照或服装描述,而不是项目记忆坏了。

哪些内容不该塞进全局记忆

全局记忆不是越多越好,它应该在每一场生成时都大概率被用到,否则维护会越来越难,每场要读的上下文也变长。以下三类建议只留在单集:

  • 一次性配角:路人、只出现一集的同事或司机。判断依据是后续集数不会复用同一张脸和同一套说话方式。
  • 一次性道具:某一集出现的信封、临时手机、外卖袋。判断依据是它在剧情里被消耗掉,之后不再出现。
  • 本集特殊场景与状态:暴雨、临时病房、回忆闪回、本集才有的情绪状态。判断依据是它属于单集氛围,写进全局会污染其他场次的环境描述。

可以先放单集跑一集,确认某个配角或道具在后续剧情里确实要反复出现,再升级到项目记忆。升级时把名字、外观锚点和复用范围补齐,并删除单集素材里的重复定义,避免两层同时存在。