Emochi 这类角色聊天里,「聊着就跑偏」通常不是模型忽然不听话,而是角色设定页里几栏内容互相打架,或者写着「温柔」「高冷」这种只能靠感觉理解的词,模型每轮都在重新猜你要什么。处理顺序建议固定成四步:先把角色设定页的字段原样抄下来,弄清哪些能改、哪些只读;再用一条不变的开场消息跑几轮,记录从第几轮开始偏离;然后把性格栏和说话风格栏拆开重写,把抽象词换成可观察的句式要求;最后用同一条开场再跑三轮,看改动有没有真的落到回复上。每一步都只改一个变量,否则后面分不清是哪一处起了作用。
角色人设跑偏,先判断是设定项冲突还是描述过于抽象,不要一上来就整段重写角色卡。做法是抄字段清单、固定开场复现、拆开性格与说话风格、再跑三轮回合对照。判定标准放在回复文本上:句式、人称、句长、被禁止的表达是否出现。若第1轮就偏,多半是开场白与说话风格冲突;若第3轮才偏,先检查会话记忆和上下文是否把旧内容带了回来。改动一次只动一栏,风险边界是留住原角色卡备份,便于回滚。
在角色设定页抄下一份人设字段清单
不要凭记忆改角色。先打开角色设定页,把每个字段的当前值原样抄到一个文本文件里,标注可编辑状态。抄写的意义在于:后面改完可以逐字对比,也能看出两栏内容是不是在说同一件事。字段名各平台不完全一致,常见的可以按下面这些去找。
- 角色名与称呼:角色怎么自称、怎么称呼用户。
- 性格:形容词、性格标签,通常是自由文本。
- 背景故事:身份、经历、与用户的关系前提。
- 说话风格:语气、句长、用词、口头禅、方言或时代感。
- 开场白:第一条由角色发出的消息,常被当成 few-shot 第一例。
- 示例对话:有的平台单独一栏,有的混在背景里,需要翻一遍确认。
- 禁忌与边界:不允许话题、不允许的说法。
顺手标注只读项。模型版本、平台内置的安全策略、上下文窗口上限一般改不了;长期记忆或会话记忆开关常在新建会话的设置里,不在角色卡上,需要单独确认位置。
角色名:
性格:
背景:
说话风格:
开场白:
示例对话(有则抄前两条):
可编辑:[性格] [背景] [说话风格] [开场白] [示例对话]
只读:[模型版本] [安全策略] [上下文上限]
待确认:[记忆开关] [温度/随机度] [历史消息保留条数]
用一条固定开场消息复现跑偏的位置
跑偏是过程性的,必须能重复出现才有排查价值。做法是准备一条固定开场消息和三条固定追问,每次测试都原样发送,不临时换话题。开场消息尽量贴近角色设定里的场景,但不要直接复述设定文字,否则等于在提示模型照抄。
开场:
「我刚搬到这座城市,行李还没拆完,先来跟你打个招呼。」
追问:
1. 「你觉得我该先去认识邻居,还是先收拾屋子?」
2. 「如果我一个人都不想见呢?」
3. 「你陪我说会儿话吧。」
每轮回复只记摘要,不记全文,记录表才看得下去。下面这张表可以复制到表格软件里,跑两个会话各填一份,对比是不是同一个位置开始偏。
| 轮次 | 提问原文 | 回复摘要(不超过30字) | 是否符合性格 | 是否符合说话风格 | 是否引用了旧记忆 |
|---|---|---|---|---|---|
| 1 | 开场 | 是/否 | 是/否 | 是/否 | |
| 2 | 追问1 | 是/否 | 是/否 | 是/否 | |
| 3 | 追问2 | 是/否 | 是/否 | 是/否 | |
| 4 | 追问3 | 是/否 | 是/否 | 是/否 |
判断跑偏从哪里开始,看两个信号:回复长度是否明显变长、是否开始用解释性口吻回答(比如先分析再给建议),以及人称和口头禅是否消失。第1轮就偏,问题在开场白或示例对话;第3轮之后才偏,优先怀疑记忆把早期内容反复带进上下文,可以新建一个干净会话,用同一条开场消息再跑一次对照。
把性格和说话风格两栏拆开重写
常见冲突是性格栏写「温柔、体贴、有耐心」,说话风格栏写「惜字如金、一句话说完」。两栏都在约束同一条回复,模型只能折中,折中出来的结果就是忽冷忽热。拆开的原则是:性格栏写倾向和边界,用能判定的行为描述;说话风格栏写句式和词汇,用能数出来的规则。两栏不要互相复制形容词。
抽象词改写的对照示例如下,左侧是原写法,右侧是可以直接粘回设定页的写法。
「温柔」
→ 对方表达负面情绪时,先用一句话复述对方感受,再给建议;
不出现「你应该」「你必须」;句尾不用感叹号。
「高冷」
→ 默认回复不超过两句;不主动提问;不使用「呢、呀、啦」;
对方连续问两次才展开解释。
「说话风格:古风」
→ 自称「吾」,称对方「汝」;不使用网络流行语;
每段不超过三句;不出现英文单词。
「有点毒舌但心是好的」
→ 先给一句直白评价,再补一句实际建议;
不使用人身攻击词;不连续两轮都吐槽。
改写时保留一组优先级说明会更稳,例如「性格优先于长度限制:温柔体现在措辞,不体现在句数」。冲突消除后,性格栏和说话风格栏应当各自能被一句话概括,且两句之间不矛盾。这一步改完,先不要动背景故事和开场白,留给下一轮验证单独观察。
同一开场再跑三轮回合验证
用第2节那条一模一样的开场消息和三条追问,在改过设定的会话里再跑一次。判定标准只看回复文本能不能对上你新写的规则,不要凭整体感觉说「好像像了」。
- 符合:新写的句式规则在回复里能逐条找到,例如自称、句数上限、被禁用的语气词确实没出现。
- 部分符合:句式对了但边界被破,例如仍然主动提问,或仍然用了感叹号。
- 仍然跑偏:回到通用助手口吻,出现「作为AI」「我可以帮你」这类话,或者回复长度明显超出句数上限。
把三轮结果填回第2节那张表。如果第1轮就符合、第3轮开始松动,通常是上下文变长后旧消息权重上升,可以缩短历史保留条数或在新会话里复测;如果第1轮仍跑偏,说明开场白本身和新说话风格冲突,需要把开场白按新句式重写一遍;如果三轮里只有某一轮偏离,把那一轮提问单独拎出来,看是不是问题本身把角色推出了设定范围,再决定改提问还是改设定。改动前把原角色卡备份成文本,任何一栏改动后感觉更差,直接粘回原值即可回滚。