角色回复重复已知信息 —— 上下文组织方式的优化
问题表现
角色对话跑了十几轮之后,你发现它开始:
- 问你已经告诉过它的信息(比如"你叫什么名字""你为什么来这里")
- 提到已经解决的问题(比如"那封信拆了吗"但你们已经拆开看过了)
- 忘记之前互动里确认过的事实
原因分析
原因一:对话记忆轮数不够
微灵的对话记忆轮数默认大约是20轮。超过这个数量后,早期对话会被截断。
- 角色档案写了"你叫XXX"没问题(那是长期设定)
- 但如果你是在对话中临时告诉它"我叫XXX"而没有更新档案,20轮后它就忘了
原因二:场景摘要没同步更新
你更新了场景摘要但没告诉AI哪些是新的摘要内容——它可能没读到最新的摘要。
原因三:临时信息太零散
你在对话中说了很多零散的临时信息(今天吃了什么、路上遇到什么),这些都塞进了上下文窗口,挤占了重要信息的位置。
解决方案
方案一:更新对话记忆轮数
在预设系统里找到"对话记忆轮数"参数,适当调高:
- 默认20轮
- 建议调到30~50轮
- 不要调太高(100+),会让角色对早期信息过度敏感
方案二:把关键信息写进角色档案
如果某条信息是角色应该长期记住的(比如你的名字、你们的关系、某个重要事实),把它写进角色档案的对应层级,而不是只在对话中提一次:
| 要记住的信息 | 写进哪层 |
|---|---|
| 角色知道你叫什么 | 关系坐标 |
| 角色知道这个小镇没有书店 | 世界背景 |
| 角色知道你能帮忙联系图书馆 | 身份底稿的能力边界 |
| 你们已经一起解决了便利店的事 | 关系坐标 + 场景摘要 |
方案三:场景结束后写摘要
这是最有效的方式。每个场景结束后整理四类摘要(已确认事实、关系变化、未解决目标、下一幕起点),手动告诉AI这些是最新的状态。
下次互动开始时,先给AI看最新的摘要,再开始对话。这样AI不会重复问已经解决的问题。
方案四:清理无用的临时对话
在长篇剧情中,如果对话里有很多无关的闲聊(比如"今天天气真好""你吃了吗"),这些会挤占上下文窗口。适当清理,或者把临时信息只写在开场事件里。
长期方案
最核心的解决方案还是养成写场景摘要的习惯。AI的上下文窗口是有限的,依赖它自动记忆不可靠。你手动整理的摘要,是唯一可靠的状态记录。