如何让角色聊天跨会话记住用户的纠正
当用户纠正虚构角色的细节时,聊天系统应保存纠正后的版本及其适用范围,替换任何与之冲突的旧版本,并使用户能够查看和编辑已保存的记录。系统还应区分持久的用户偏好与仅适用于单个故事场景的事实。在后续使用记住的细节之前,系统应检查其是否相关且仍然有效;如果依据不明确,应当主动询问,而不是编造共同的经历。本指南重点关注持久性和冲突解决任务,而非如何在当前轮次应对误解。
角色聊天应该记住什么?
来看一个说明性的例子:用户说:“Mira 的眼睛是绿色的,不是蓝色的。”这种纠正可能指的是角色的永久设定、Mira 在某个特定角色扮演中的临时版本,或者仅仅是用户对 Mira 描述方式的偏好。如果一条记忆仅存储“眼睛:绿色”,就会丢失让这一事实发挥作用的上下文环境。
一条实用的记忆记录应至少包含主体、纠正后的细节、适用范围,以及用户是否希望其持久生效。例如:
这种结构属于产品设计建议,并非研究中规定的格式。其目的在于防止局部的场景细节在无形中转变为全局事实。特定于场景的纠正可以记录为:“在冬日舞会场景中,Mira 披着一件绿色斗篷。”该记录不应覆盖她常规的着装或外貌。
纠正应如何替换旧记忆?
应将明确的纠正视为对相关事实的更新,而不是让两个版本同时生效的附加事实。如果系统既保留“Mira 有蓝眼睛”又添加“Mira 有绿眼睛”,后续检索时可能会调出其中任一内容。更新后的记录应将旧值标记为已被取代或将其从活跃使用中移除,同时保留足够的历史记录以便在产品提供记忆日志时解释该更改。
这一区别至关重要,因为信息会随着时间而变化。在 *[Keep Me Updated! Memory Management in Long-term Conversations](https://aclanthology.org/2022.findings-emnlp.276/)* 中,Bae 等人提出了一项任务和数据集,用于在多个对话会话中追踪有关用户的更新信息。他们将记忆表示为文本描述,并提出了选择性消除失效或冗余信息的方法。其实验将该方法与保持存储记忆不变的基线模型进行了比较。该研究关注的是长期对话记忆;它并没有专门测试虚构角色聊天,也没有确立通用的记忆设计标准。
对于角色聊天,应谨慎应用相同的通用更新逻辑:直接的“不是蓝色——是绿色”纠正是强有力的证据,表明旧值在指定范围内是错误的。但新的场景细节并不自动等同于持久角色设定的改变。当缺少适用范围且该差异在后续至关重要时,应提出简短的跟进问题,例如:“我是应该在所有故事中都记住 Mira 是绿眼睛,还是仅限当前版本?”
系统如何区分用户偏好与故事事实?
将偏好与虚构世界的事实分别存放在不同类别中。偏好可能是“用户希望 Mira 的对话保持简洁”。故事事实可能是“在这个场景中,Mira 刚刚到达车站”。它们回答了不同的问题:偏好指导聊天的回复方式,而故事事实有助于维持叙事中的连贯性。
为两者都添加适用范围。偏好可以适用于跨会话聊天、单个角色,或仅适用于当前的角色扮演。故事事实可以适用于单个场景、单个故事情节,或角色的通用设定。不要从单次纠正中推断出宽泛的偏好。如果用户说“Mira 的眼睛是绿色的”,这本身并不意味着用户希望每个角色都是绿眼睛,也不意味着该细节适用于 Mira 的所有平行版本。
一个简单的决策流程会有所帮助:
这些步骤是针对保持对话信息时效性这一问题提出的建议工作流。它们并不代表任何特定聊天产品已经遵循了这些步骤。
应该如何处理冲突的记忆?
通过比较主体、范围和时间来解决冲突——而不是盲目偏向最容易检索到的句子。在相同范围内,用户较晚做出的明确纠正通常应优先于同一事实的早期版本。来自不同角色扮演的细节不应覆盖当前的细节。如果系统无法判断两条记录是否指代同一版本的角色,则应将其分开保存或主动询问。
例如,假设一条旧记忆记录着“Mira 有蓝眼睛”,而随后的一条消息表示:“在这个平行宇宙的故事中,Mira 有绿眼睛。”后面的陈述更新了 Mira 在该故事中的外貌,但不一定会更改默认的角色设定。如果用户说:“其实,从现在开始把她的眼睛颜色改成绿色”,此时范围更广,默认记录就可以更新。不要悄悄合并相互矛盾的版本,进而声称用户一直以同一种方式描述 Mira。
记忆系统还需要具备处理不确定性的方法。如果两条记录的时间或范围不明确,应将冲突标记为未解决,而不是胸有成竹地呈现任何一个细节。简短的提问远胜于自信但毫无依据的追忆。
用户如何查看并控制记住的内容?
保存纠正后,应确认具体的更改:“收到——我会在 Mira 的通用角色设定中记住她是绿眼睛,替换掉之前蓝眼睛的细节。”如果系统保存的是范围更窄的事实,也应明确说明:“我会将绿色斗篷作为本场景的细节保存。”这种确认让用户有机会立即发现范围界定上的错误。
记忆视图应使用通俗易懂的语言展示保存的措辞及其范围,并提供编辑或删除的方式。如果产品能够显示被取代的条目,应将其标记为已过时,而不是与当前内容同等展示。这让用户更容易理解角色聊天为何会提及某个细节,并在无需重复整个故事的情况下修正记录。
避免暗示存在尚未保存的记忆,或声称角色记得系统无法验证的过往交流。角色可以用自然的口吻说话,同时界面或回复对所存储的信息保持坦诚。
后续应如何测试召回效果?
测试跨会话的持久性,而不仅是在进行纠正的同一对话中进行测试。[Yang 和 Ettinger 进行的情境理解研究](https://aclanthology.org/2023.emnlp-main.394/)使用了一个合成环境来评估 ChatGPT,旨在测试其能否跟踪并报告不断变化的环境状态。作者报告了在随时间保留状态方面的错误,并讨论了其设定中非持久的上下文记忆以及易受虚假更新影响等因素。这是 2023 年发表的针对 ChatGPT 在该特定环境下的对照研究;它并不是针对所有现有模型、产品或虚构角色系统的证据。
针对角色聊天的重点测试可以使用一小套脚本化对话:
根据预期范围对每项测试进行评分:正确检索、正确替换旧信息、区分场景与通用事实,以及坦诚处理不确定性。测试中应包含预期答案为请求澄清的情况。在存储的记录模棱两可时能够可靠地拒绝猜测的系统,比凭空编造连贯性的系统能更好地处理这种情况。
一条可靠的“纠正-召回”路径
纠正应当遵循一条清晰的路径:明确其主体、保留其范围、更新所有冲突的记忆、展示保存的更改,并验证后续回复能够检索到它,而不会将其扩散为缺乏依据的历史。这一流程为角色聊天提供了一种实用的方法,使其在各轮次和会话间保持一致,同时将虚构世界的控制权留给用户。相关研究支持认真对待记忆更新和状态追踪;此处给出的具体工作流是一项设计建议,其实际表现应在具体使用的产品中进行检验。
