idevlab-blogs

AI 角色为什么总是「没有记性」?两篇论文给出了答案

如果把最近读到的两篇关于 AI 角色和叙事的论文压缩成一句话,那大概是:

情绪论文初步证明了**「状态结构让情绪变化更可解释」;叙事论文则较强地证明了「状态结构让故事事实更容易被正确检索」**。不过,前者还没证明对话变得更好,后者也还没证明故事写得更精彩。

对应的两篇论文分别是:

这篇博客,我们就来聊聊这两篇论文背后的共同趋势:从「生成文本」转向「维护状态」

一、共同趋势:从「生成文本」转向「维护状态」

传统的角色 Agent 大致是这样一个流程:

Persona + 最近对话 → 直接生成下一句话

这两篇论文不约而同地把中间过程显式化了。它们共同认为,长程连续性的关键不是让模型记住更多原文,而是回答三个核心问题:

  1. 发生了什么变化?
  2. 变化之后,当前世界处于什么状态?
  3. 当前生成时,哪些状态应该被激活?

但两篇论文处理的是不同层次的问题。情绪论文关注的是角色内部情绪状态,更新来源是对话事件及其心理评价;叙事论文关注的是故事世界、知情、关系和伏笔状态,更新来源是已定稿章节。

结合之前读过的论文,这已经接近一个完整的长期 Agent 状态系统:事件改变状态 → 状态被可靠保存 → 在正确时刻重新影响行动。


二、情绪不是标签,而是评价过程

情绪评价过程

很多角色系统把情绪写成人设属性,比如「她总是冷静」、「他有一点忧郁」,或者「当前情绪:愤怒」。这会导致情绪不会因事件自然变化,即使变化了也缺少因果解释。

例如,同一句「检查结果还不能确定」,对于不同人物可能产生完全不同的情绪:

  • 害怕失去控制的人:恐惧上升;
  • 信任医生的人:担忧但仍保持信任;
  • 已经预料到坏消息的人:惊讶较低、悲伤较高;
  • 认为医生不负责任的人:愤怒上升。

因此,事件不能直接映射到情绪。中间需要一个**「这个事件对我意味着什么」**的评价层。

CPM-MultiAgent 架构

《From Triggers to Emotions》基于心理学中的 Component Process Model (CPM),将每轮情绪更新写成一个多阶段评价流程:

  1. Trigger Analyzer:先确定「发生了什么」和「它对角色意味着什么」,减少模型一开始就根据表面语气跳到情绪结论。
  2. 四类 CPM 评价:相关性(Relevance)、后果(Implication)、应对能力(Coping Potential)、规范意义(Normative Significance)。这四个维度不是并行的,后面的评价可以读取前面的结果。
  3. 情绪状态更新:允许多个情绪同时存在,比如「既信任又担忧」,用 Plutchik 的八种情绪(喜悦、信任、恐惧、惊讶、悲伤、厌恶、愤怒、期待)各自打 1–5 分来表达。
  4. Critic:检查是否忠实于对话触发、是否符合 Persona,更新幅度是否合理等。

消融实验中,去掉 Peer Review 后总体分数降幅最大,而去掉「规范意义」这一维度的影响也很显著——这说明角色对事件的反应不仅由愉快或不愉快决定,还强烈依赖身份、尊严和关系预期。

实验结果与现实问题

实验结果显示,完整系统得分最高,但优势非常小。人类评价表明,系统真正明显改善的可能不是情绪状态本身,而是情绪变化的解释看起来更系统、更有心理学条理。换句话说,CPM 架构很可能首先是一个「解释结构」,其次才是更准确的情绪模型。

这个架构最大的现实问题是太慢。即使把四个评价 Agent 并行执行,响应时间也在 7–12 秒左右,更像一个离线仿真管线,很难用于实时角色对话。

此外,论文尚未证明角色语言更自然、对话更有吸引力。系统可能生成一个非常漂亮的情绪 JSON,但最终回复仍然公式化。


三、故事连续性不是事实列表

叙事世界模型

长篇故事中的关键问题常常不是「某个词出现在哪一章」,而是:

  • 谁在第 20 章时已经知道这个秘密?
  • 事情发生在什么时候,读者又是什么时候知道的?
  • 某个伏笔是否已经兑现

普通 RAG 很容易检索到一段「相关但过时」的文本。例如第 3 章说钥匙在书房,第 12 章钥匙被拿到地下室。查询「钥匙现在在哪里」时,两段文本都相关,但只有后一个状态在当前章节有效。

《Narrative World Model》(NWM) 因此把故事记忆建模为一个带版本和有效期的世界状态

严格区分事实层次

NWM 严格区分已定稿章节、下一章计划和未来大纲。未来计划不能提前进入当前故事事实,避免「未来信息泄漏」。如果作者修改并重新发布旧章节,系统会重新抽取该章状态,使依赖旧版本的后续边失效,并向后传播修正——这对真实写作非常重要,因为写作并不是只追加内容,还会频繁改稿。

它的核心单位不是原文块,而是类型化记录,包括:事件状态、角色状态、关系状态、物体状态、情节与承诺、叙事功能。这让系统能够区分:事实发生的时间、角色知道事实的时间、读者知道事实的时间——这三条时间线在悬疑、误解、戏剧反讽和不可靠叙述中经常不同。

Query-conditioned Retrieval 才是决定性机制

NWM 的检索机制包括因果截断、混合排序(BM25 + 向量)、一跳图扩展和证据包构建。关键不是简单「把图交给模型」,而是用当前问题决定哪些状态进入上下文

实验结果非常扎实。在私有多跳问题上,NWM Graph Retrieval 达到了 89.8% 的准确率,远超普通 RAG 的 17.6%。

方法 多跳准确率
Simple Search 8.5%
RAG 17.6%
GraphRAG 18.8%
NWM State Memory 35.8%
Graphiti 57.4%
NWM Graph Retrieval 89.8%

但有趣的是,消融实验发现,去掉类型标签后准确率反而略有提高。因此,更准确的结论不是「写上叙事学类型标签所以系统更强」,而是:

先把故事拆成正确的细粒度状态单元,再用问题条件化检索把正确单元拿出来,所以系统更强。

「状态分解」和「条件检索」有证据;「叙事学标签本身有用」反而没有证据。


四、两篇论文放在一起,真正的新方向是什么?

它们共同指向一种新的角色与叙事架构。

不再直接保存标签,而保存状态变化。 不要只保存「角色很愤怒」,而要保存:「角色因承诺再次落空,将事件评价为对关系目标的阻碍;认为自己缺乏控制力,因此愤怒 +1、信任 -1。」不要只保存「A 和 B 关系不好」,而要保存:「第 12 章后关系从合作转为怀疑;A 已发现证据,B 尚不知道 A 已知情;该状态持续到第 18 章。」

区分多个真相层次。 一个成熟系统至少需要区分:实际发生了什么 (World State)、角色相信什么 (Character Belief State)、读者知道什么 (Reader State)、角色如何评价当前局面 (Emotion State)、互动如何改变关系 (Relationship State)、伏笔与承诺 (Narrative State)、当前生成要满足哪些约束 (Execution State)。

每个状态都必须有因果和证据。 状态条目应包含触发事件、评价过程、有效期、知情范围和原文证据。这个结构同时连接了情绪、关系、知情和叙事时间。

状态不能全部塞进 Prompt,需要动态激活。 正在写争吵场景,优先关系状态和旧冲突;正在兑现伏笔,优先承诺状态;某角色即将说出秘密,优先知情边界。这正是 NWM 的 Query-conditioned Retrieval 和主动记忆可以结合的地方。


总结一下:

长期角色和故事的基本存储单位,不应是旧文本或静态总结,而应是带来源、时间、视角、有效期和因果解释的状态变化

这就是这两篇论文给我们带来的最大启示——不是复杂的 Multi-Agent 管线,也不是「叙事学标签」,而是这个朴素但关键的原则:AI 要真正「记住」一件事,不只是把它存下来,而是知道它在什么时候、对谁、意味着什么。