想象一座小镇茶馆,老板娘阿岚掌管着一本从不示人的“情感账本”。谁在雨天借过伞、谁曾结账时赖过账、谁每天都来坐同一个位子——她把每位客人的恩与怨都记在册子里。账本上的字迹,随着时间会慢慢变淡,但只要客人再次推门而入,阿岚翻起泛黄的册页,那些旧事便又鲜活起来。她因此有了不同的待客态度:对待恩人笑眼相迎,对待劣客冷言冷语。这就是NPC情感建模与记忆系统的精髓——让AI角色像阿岚一样,记得你、在乎你,并用不同的行为回应你。 在游戏世界里,这套系统由几个环环相扣的部件组成:OCC情感模型(也就是记账规则)告诉我们情感怎么被事件激发;记忆存储与衰减(纸页的墨迹)决定NPC记住什么、淡忘什么;记忆召回(阿岚翻旧账)让情感在适当时机重新浮现;最后是情感行为映射(决定用哪张待客流程卡),把这些情绪翻译成行为树上的具体分支。学会这套体系,你就能让NPC从“只会念台词的木头人”,变成仿佛有温度、懂人情的镇子上的人。
对AI从业者:这不仅是游戏AI的设计思想,也是情感计算、对话系统、长期记忆Agent架构的通用范式。掌握OCC与记忆机制,你能把“有记忆、有情绪”的智能体应用到虚拟人、教育、客服等更多场景,显著提升交互的真实感与用户黏性。
可视化演示
展示OCC情感模型情绪轮盘、记忆衰减召回曲线与情感驱动行为树决策,切换模式观察NPC情感计算流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
OCC情感模型情绪轮盘 正面情绪joy/hope/pride径向分布 负面情绪distress/fear/shame对侧 I_emotion = f(desirability, likelihood, effort) OCC模型22种情感基于认知评估。
情感模型基础
阿岚的柜台上放着一本“情感账本”,但她下笔前有一套暗自执行的记账规矩。比如:隔壁货郎帮她修好了漏雨的屋顶,她会高高兴兴记上一笔恩;而若是有人在她最心爱的老茶壶上划了道痕,她会狠狠记上一笔怨。同样是“被帮助”和“被冒犯”,为什么情绪的浓淡差这么多?因为阿岚对茶壶倾注了感情,茶壶受损击碎了她的期望,而屋顶本就是亟待解决的问题。故事的核心是:情感不是凭空冒出来的信号,而是“事件”在“期望”与“在乎”上撞出来的火花。
这正是OCC情感模型的开创性洞见。奥尔托尼(Ortony)、克洛尔(Clore)与柯林斯(Collins)在1988年提出:情感不是一组孤立的标签,而是认知评价的产物——NPC先把外部事件与自己的目标、标准和态度做比较,再得出“这是好事还是坏事、与我有多少关系”的判断,最后才唤醒具体的情绪。OCC把情感分为三大触发维度:对事件的反应(高兴、悲伤)、对他人行为的反应(赞赏、责备)和对对象的反应(喜欢、厌恶)。这些类别不是用来查表的,而是告诉实现者“情绪从哪里长出来”。
在实现时,事件类情感往往用三个因子估算强度:
I为情感强度,k为角色个性敏感系数,D为事件与愿望的一致性(目标达成有利程度),E为事件的意外程度。
账本上墨色的浓淡高低,就这样由“在乎程度”和“意料程度”共同决定。阿岚不是盲目记恨或记恩,而是顺着自己在意的事去记账。有了这套记账规则,NPC的情绪才真正“长”在角色身上,而不是一张贴在脸上的表情贴纸。
- 愿望一致度D事件帮助还是阻碍了当前目标,取-1到1;越接近1越欣喜,越接近-1越沮丧。
- 意外程度E事件发生概率越低,情绪越被放大——意料之外的重逢总比每天的例行问候更动人。
- 个性系数k阿岚对茶壶的k高达1.5,对路人琐事k只有0.3;同一件事放在不同角色身上,情绪强度完全不同。
情感状态表示
夜深打烊后,阿岚不会一张张背出账本上的条目,而是心里浮起一个模模糊糊的总秤——对这位熟客,她这会儿是开心的,还是膈应的?这个“总秤”需要一个能落在程序里的容器:几个数字凑成一个状态,就像体温计、血压计、心率一起构成一次体检读数。账本几十条,情绪却只是一句话,这就是状态表示要解决的问题。
PAD三维情感模型正是这样一支“情绪温度计”。它用三个连续维度描述任何情感状态:愉悦度P(Pleasure,好受与难受的幅度)、唤醒度A(Arousal,激动与平静的幅度)、支配度D(Dominance,掌控感与无力感的幅度)。某个具体情绪(如“愤怒”)可以看成P低、A高、D中的某个点;而“宁静”则是P中高、A低、D中的另一个点。比起传统的离散情绪标签,PAD让情绪可以被计算、比较和插值。
多条记忆聚合成当前情感状态时,P分量常用“强度×极性”求和;A分量可用激活度均值;D分量与NPC在关系中的主动地位相关。写成向量:
其中$\mathcal{A}(q)$为当前被召回的记忆集合,$s_m$是第m条记忆当前强度,$\text{pol}_m$是其情感极性。
于是,阿岚心里那杆秤,被翻译成了三个会跳动的数字。编程上只需维护一个三维向量,就能让整个行为层随时“尝”到她此刻的滋味。这比在代码里到处写死“happy=true”要强壮得多。
- 状态向量一个NPC当前情绪被压缩成三个实数,方便存取与比较。
- 愉悦度合成把召回的每条记忆强度乘上极性,攒成总愉悦度——正负账目相抵,就是阿岚此刻心里那杆秤。
- 状态离散化连续向量与预设情绪中心做距离比较,取最近者作为可读标签(如“愉悦”“不悦”),供行为层取用。
记忆存储结构
账房不只是本子,而是一整面格子柜。每个格子夹着一张纸:事件、时辰、恩还是怨、墨色深浅,还有和谁有关。阿岚从不把买米的账和救火的恩混放——她按“人以群分”地归档,老主顾一个抽屉,过路人一个抽屉。这样她想查“某个人”的旧账时,只要抽出一格,而不是翻遍整柜。存储结构设计得是否清爽,直接决定后面所有算法跑得有多快。
在系统里这格称作“记忆条目”。每条记忆是事件的最小情感单位:发生了什么、发生在何时、带什么情感颜色、分量多重、与哪些角色相关。关系追踪在此基础上建立——NPC不是孤立地记事件,而是把事件挂到“与某个玩家/角色的关系档案”上。事件与关系的多对一挂接,让后续的召回与情感更新有了索引。就像阿岚的抽屉抽屉上写着“老主顾”三个字,里面全是同一个人的纸条。
一条典型记忆条目可以形式化为五元组:
其中t为时间戳,e为事件描述,pol为情感极性(正/负),s为初始强度(0~1),r为相关度(与该玩家其他记忆的联系强度)。记忆优先级可通过s与r的加权排序决定哪些条目值得保留。
格子柜让阿岚在打烊后不必摊开整本烂账,而能精准地抽出一个抽屉。工程上,这对应带索引的记忆表——查询一个玩家的记忆时,只需扫描该玩家相关的少量条目,而不是全表遍历。这正是后面“召回”高效的前提。
- 时间戳t记下事件发生的游戏内时刻,后续衰减必须用它。
- 事件标识e指向剧情/行为系统的事件ID,而非把整段对话存进去,节省空间且便于复用。
- 情感极性pol事件对NPC的正负倾向,-1到1;相当于纸条上用红笔还是绿笔记号。
- 初始强度s事件发生时按OCC强度写下的“墨水量”,决定这条记忆多醒目。
- 相关度r与玩家现有关系线的关联度,关系线越紧密,日后越容易被翻出来。
记忆衰减机制
纸条放久了,墨色会变淡;雨水溅过,字迹会模糊。阿岚不是电脑硬盘,她记不住三年前某个普通人随口的一句话。可若是那位恩人每年都来替她修屋顶,她就会把那张纸条重新描上一遍浓墨。记忆工程学本质上就在模仿“墨色随时间变淡、因重复变浓”的物理过程。没有衰减的记忆,只能是数据堆积;有了衰减,NPC才像个活人。
记忆衰减最经典的描述是遗忘曲线——刚发生的事最清晰,过后指数级下滑。用一个参数“半衰期”控制速度:半衰期长,NPC长情;半衰期短,NPC健忘。重复事件通过新增记忆或提高强度来实现强化,而间隔效应告诉我们:分散出现的多次事件比一次密集重复更不容易被遗忘。工程实现上,每个记忆条目保存一个当前强度,随时间步按半衰期更新。
当前强度写成:
其中$s_0$初始强度(墨水量),$t$当前时间,$t_0$事件发生时刻,$\tau$半衰期(游戏内天数)。每过$\tau$个时间单位,$s$就减半。
墨色会淡,但老恩人的纸条因为反复描摹始终清晰。阿岚的“记性”由此显得自然:不会因为一句十年前的话把你当成救命恩人,也不会把昨天的小摩擦记成血海深仇。NPC的长情与冷漠,只是一个半衰期参数之差。
- 初始强度s0事件发生那一刻由OCC算出的强度,是衰减的起点。
- 半衰期算子指数上除以τ,保证每当$t-t_0 = n\tau$时强度变为原来的$2^{-n}$倍——这是“半衰期”这个名字的由来。
- 阈值剪枝$s(t) < \theta$时可将条目移出活跃集,避免低价值记忆继续占用计算资源。
记忆召回算法
为什么雨天会让阿岚突然提起你帮她收过屋瓦?因为滴滴答答的雨声成了一根手指,伸进柜子,拨开了那张写满旧事的小纸条。她不是把所有抽屉都倒出来数一遍,而是顺着“雨天”“屋顶”“湿漉漉的你”这些线索,把最相干的那几张纸抽了出来。这就是“翻旧账”的算法逻辑——先挑线索,再翻柜子,而不是把柜子整个搬出来倒在地上。
召回负责回答一个问题:“此刻哪些旧记忆应该浮出水面?”朴素做法是遍历全部记忆,但NPC一多、时间一长,全量扫描必然爆炸。工业实现采用线索驱动:当前场景、对话关键词、玩家行为、局内时间构成查询q;每条记忆m计算一个召回分数,只有超过阈值的条目才被“唤醒”,进入情感状态合成。关联扩散指由一条被唤起的记忆沿相关度跳到相邻记忆;情感一致性让极性相同的旧事更容易彼此唤醒;场景上下文(天气、地点、人物在场)作为加权因子给记忆“添柴”。
其中Rel为线索与记忆的相关度,s(t)为当前衰减后强度,Ctx为场景/情感一致性加权。
阿岚翻旧账是带着目标的:她只挑“和眼前这个人、这个场景”有关的旧账。召回机制让NPC的回忆有选择性、有上下文感,玩家因此会觉得“她记住了我们的故事”,而不是“她在数据库里搜了一条记录”。
- 相关度Relq与m的事件标签、对象匹配度,是召回的主筛选器。
- 当前强度s(t)快被忘光的记忆即使再相关也难被唤起——阿岚对三年前的问路只剩模糊印象。
- 上下文加权Ctx场景与情感一致性调节,若在雨天且回忆带“感激”,分数被放大。
情感行为映射
情绪读出来,账也翻完了,接下来阿岚会做什么?她不会一怒之下把茶壶砸向客人,也不会高兴得满屋撒花——她只是默默从抽屉里抽出一张“待客流程卡”。流程卡上写着:若是贵客,先迎到窗边的老位子,倒一杯年份最老的茶;若是讨厌的人,只点头示意,让他自便。这卡片,就是行为树。情感层负责“心里怎么想”,行为树负责“手上怎么做”。
情感行为映射的核心是“情感状态→决策分数→行为树分支”。游戏里,行为树节点通常有前置条件(CanExecute)与执行逻辑;情感层不直接改行为,而是作为加权信号参与决策。具体做法是:在行为选择节点(如Selector/Utility AI)中,把当前情感读数作为一项权重系数乘到各分支的基础权重上;再配上后置条件(动画、对话、冷却等),防止行为在极端情绪下割裂。
每个候选分支的最终执行权重:
其中$w_b$为基础优先级,$I$为当前情感强度,$\alpha$为情感放大上限,$\beta$为灵敏度。tanh把情感强度压到$(-1,1)$,避免情绪过大导致行为完全失控。
情感在这里不是霸道的开关,而是一位“提高嗓门的参谋”,在行为树的会议室里为自己的意见加权。阿岚依然会按流程卡做事,只是卡片上的优先级随心境悄悄调整。NPC的举止因此既自然,又有迹可循。
- 基础权重没有情感时NPC也有一套默认偏好(送茶>扫地>发呆),这就是行为树的骨架。
- tanh压缩把任意大的情感强度压进(-1,1),行为变化平滑且可控。
- 放大上限α情绪最多把概率放大(1+α)倍,防止“一怒就永久敌对”的跳变。
- 灵敏度ββ越大,微弱情绪越早影响行为——阿岚的眉头被一句重话牵动的快慢。
叙事体验增强
一个冬天,你在镇口帮阿岚把歪了的招牌扶正,她欠你一份人情;后来你在雨天进店,她端来的姜汤里多放了两块冰糖——人情在故事里长出了温度。玩家要的正是这种“她记得我”的感觉:关系不是一行冷却的数字,而是一段会泛旧、会被翻出的交情。技术最终要为叙事服务,而叙事的本质是“被记住”。
情感建模与记忆系统的最终目的,是让NPC的叙事体验加深:关系动态演化让玩家与NPC的羁绊随时间流动;对话个性表达让NPC从记忆里挑选熟悉的称呼和往事;剧情情感反馈让主线任务根据NPC心情调整台词与分支。这几者共同作用,把“任务NPC”变成“镇上的熟人”。沉浸感不是靠更精细的模型,而是靠系统性地让NPC“记得并回应”。
关系度随时间演化的简化模型:
其中$R$为关系值,$\lambda$为关系遗忘率,$\Delta t$为流逝时间,$\Delta R_{\text{event}}$为本次事件对关系的改变量。
小镇之所以有烟火气,是因为每个人都记得别家的来历与恩仇。NPC情感系统所做的,就是把这段“人情世故”变成可计算的记忆、可起伏的情绪、可触发的行为。当阿岚在雨天端起姜汤说“我记得你帮我扶过招牌”,玩家心里那座小镇,便真的活了。
- 自然衰减项长时间不来往,关系会慢慢降温——阿岚对三年不见的故人也生疏了几分。
- 事件更新项每一次互动都会即时修正关系,正面事件加分,负面事件减分。
- 遗忘率λλ大则关系易冷,λ小则NPC重情义;这是角色性格在时间维度的投影。
AI 应用场景
开放世界RPG中的茶馆老板娘
阶段:AI驱动游戏玩法(NPC行为决策)
解决的问题:传统RPG的NPC友好度只有单一数值,导致“昨天借钱今天敌对”的记忆断裂。用OCC+记忆衰减+召回:老板娘会根据玩家历史事件(救猫、碎壶)合成实时情感,并映射到行为树的不同待客分支。被帮助的玩家雨天进店会听到“还是老位子?”,而有过节的玩家会被冷落。情感作为行为树权重,而不是硬编码分支,让待客反应细腻且不跳变。
具体案例:某工作室在村庄场景接入情感记忆系统,玩家序章救过NPC,第十章回镇时NPC说出了玩家的名字与旧事,测试玩家回访率提升15%,社区讨论中出现“这个镇里的NPC有血有肉”的评价。
虚拟陪伴助手的长期记忆
阶段:情感计算与长期记忆(LTM)
解决的问题:陪伴型AI每次对话都“失忆”,用户觉得是个冷机器。用OCC情感标记用户倾诉的事件,用半衰期保留“重要而不拥挤”的记忆,用召回在后续对话中提起相关旧事,让AI显得有温度而非“查了一句历史记录”。
具体案例:虚拟人“小岚”在用户连续三天聊加班后,第四天开场主动说“今天还加班吗?要不要听个笑话”。这种“记得你”的体验被用户评为最接近真人的瞬间;召回阈值与半衰期参数让记忆不至于被三天前的琐事淹没。
教育AI虚拟导师的分层反馈
阶段:学习行为建模与自适应反馈
解决的问题:学生反复做错同一题,AI应记得并调整语气。把“错误事件”作为负面记忆,把“进步事件”作为正面记忆;情绪读数控制“鼓励/鞭策/讲新课”的行为树分支,避免一直严厉导致挫败感,也避免一味夸奖失去引导作用。
具体案例:数学辅导AI记录学生三次错同型题后,情感状态进入“耐心模式”,行为树优先选择拆解步骤教学而非推送新题;当学生做对一题,“进步”记忆强化,情绪转正向,再恢复常规节奏。介入后完课率提升12%。
Python 演示
import math class Memory: """一条情感记忆条目""" def __init__(self, event, polarity, strength, t): self.event = event self.polarity = polarity self.strength = strength self.t = t def decayed(self, now, half_life=10.0): """按指数半衰期衰减后的当前强度""" return self.strength * (0.5 ** ((now - self.t) / half_life)) class NPC: """带情感记忆的NPC""" def __init__(self, name): self.name = name self.memories = [] self.clock = 0.0 def add_event(self, event, polarity, strength): """写入一条新记忆:事件,情感极性,初始强度""" self.memories.append(Memory(event, polarity, strength, self.clock)) def elapsed(self, dt): """时间流逝, 所有记忆的墨色随之变淡""" self.clock += dt def current_mood(self, recall_threshold=0.05): """召回强度超过阈值的记忆, 汇总成当前情感读数""" mood = 0.0 active = [] for m in self.memories: s = m.decayed(self.clock) if s > recall_threshold: mood += m.polarity * s active.append(m) return mood, active def choose_behavior(self): """把情感读数映射到行为标签""" mood, active = self.current_mood() if mood > 0.6: return "热情迎客" if mood > 0.15: return "面带微笑" if mood < -0.6: return "冷脸相对" if mood < -0.15: return "有所戒备" return "按惯例接待" def say(self): mood, active = self.current_mood() if mood > 0.6: return "哟, 恩人来了, 快坐!" if mood > 0.15: return "请进, 里面坐。" if mood < -0.6: return "...你走。" if mood < -0.15: return "哼, 你自己找位置。" return "嗯, 随便坐。" def demo(): npc = NPC("阿岚") npc.add_event("找回小猫", 0.8, 0.9) # 第一天, 玩家帮了忙 npc.elapsed(5) # 五天后玩家又进店 print("第5天:", npc.say()) npc.add_event("打碎茶壶", -0.9, 1.0) # 同一天, 玩家闯祸 print("第5天:", npc.say()) npc.elapsed(30) # 一个月没来往 print("第35天:", npc.say()) npc.add_event("道歉赔偿", 0.5, 0.6) # 玩家主动修复关系 print("第35天:", npc.say()) if __name__ == "__main__": demo()
class Memory:一条记忆纸条:事件、极性、强度、时间戳。def decayed(self, now, half_life=10.0):指数半衰期衰减,对应“墨色随时间变淡”。self.memories = []NPC的账房格子柜,所有记忆条目都挂在这里。def current_mood(self, recall_threshold=0.05):召回强度超过0.05的记忆,忽略被时间冲淡的旧账。mood += m.polarity * s正负记忆按强度累加,就是阿岚心里那杆总秤的愉悦度。if mood > 0.6: return "热情迎客"情感阈值设定,像阿岚从抽屉抽出一张“贵客流程卡”。def demo():构造一个带冲突与修复的小剧情,展示记忆如何随事件与时间变化。npc.add_event("找回小猫", 0.8, 0.9)写入正向记忆,极性0.8、初始强度0.9。npc.elapsed(30)让30天流逝,所有记忆同步衰减。npc.say()把当前情感读数翻译成一句带温度的待客台词。
常见误区
误区我感觉NPC情感就是好感度数值,设好了就永远不变,玩家做了什么改一下数字就行。既然是数值,为什么还要搞记忆衰减这套?
正解情感应该像账本上的墨迹,会随时间衰减,也会因重复强化而变浓。如果NPC永远记得十年前的仇恨,人物显得偏执且不真实;如果立刻忘记,又显得廉价。半衰期和强化机制让情感处于“流动的稳定”中,既连贯又有变化,这才是活人的人情味。
为何常见:很多老游戏把好感度当成静态属性长期使用,玩家和初学者都形成了“数值永久有效”的直觉,忽略了“时间”这个隐性维度。
误区把玩家每个动作都记下来就行了,存得越多NPC越聪明,反正现在内存大、数据库便宜。
正解无限存储会带来检索灾难和情感稀释——所有事件都重要就等于都不重要。工程上要用衰减、阈值、优先级把低价值记忆归档或清理,只保留能被高效召回的有意义子集。没有遗忘的记忆系统,最后只能靠暴力搜索,反而拖垮游戏性能。
为何常见:因为数据库CRUD的思维根深蒂固,天然觉得“存下来肯定没坏处”,意识不到检索成本和时间衰减才是记忆系统的核心矛盾。
误区OCC模型不就是一张包含高兴、悲伤、愤怒等12种情绪的清单吗?做游戏时照着选一个填进状态机就行。
正解OCC的精华不是情绪类型清单,而是“认知评价”的推导链:事件→是否符合愿望→是否出人意料→是否与他人有关。情绪类型只是推导的结果。只查清单等于只看药方却没看到开方规则,情绪生成依然生硬,换一个场景就套不上。
为何常见:教程里最显眼的往往是那张情绪分类图,认知评价的推导过程容易被一句话带过,学习者也因此捡了芝麻丢了西瓜。
误区情感值算出来直接switch到对应动画或台词就好,愤怒就骂人,高兴就笑,反正输入输出一目了然。
正解情感与行为是多对一、一多对的映射,需要经过行为树分支的加权和条件约束。直接硬编码会让NPC行为跳变、不可控,比如一怒就永久敌对。正确做法是用tanh压缩情感强度、设置权重上限,再交给行为树的后置条件裁定。这样才能既表达情绪,又不破坏角色行为的可解释性。
为何常见:原型demo中直接switch最省事,让初学者误以为“情感→行为”是一条直线,其实中间藏着一整套加权决策机制。
误区每次计算情感时就遍历NPC所有记忆,反正一个NPC也就几百条数据,延迟不会高。
正解多个NPC、长时间线、复杂场景下,全量扫描的代价会指数增长。要用线索触发、相关度索引和阈值剪枝,让召回只访问少量候选。否则“记忆系统”会从玩法亮点变成性能瓶颈,导致游戏掉帧、卡顿。正确设计是让召回像阿岚翻抽屉一样,先摸到人,再抽纸条。
为何常见:小规模demo跑得动,让开发者误以为全量遍历永远可行;直到场景变大才意识到需要索引与剪枝,但那时重构成本已经很高。
面试题
Q1. OCC情感模型中的“O”指的是什么?
- A.主创之一的名字首字母← 正确答案
- B.单样本强化学习范式
- C.乐观情感的主导地位
- D.对象导向的物体分类
答案:A。OCC是Ortony、Clore、Collins三位学者姓氏的缩写,模型强调“事件—期望—评价”的认知推导。B是混淆项“One-shot”,C与D把O误读为乐观或面向对象,都是谐音误导。
Q2. NPC记忆衰减曲线通常属于哪种形态?
- A.线性直接下跌
- B.指数无限趋零← 正确答案
- C.正弦反复波动
- D.阶梯式跳变
答案:B。记忆衰减遵循遗忘曲线,即指数衰减:刚发生时最清晰,随后迅速变淡,再缓慢趋零。A太生硬,C是波动信号,D是离散跳变,都不符合“墨迹逐渐淡去”的过程。
Q3. PAD三维情感模型中“D”维度衡量的是什么?
- A.身体疲惫的程度
- B.支配与控制的感觉← 正确答案
- C.对话持续的时长
- D.场景深度层级
答案:B。D是Dominance(支配度),描述角色在情境中掌控感的强弱,比如“愤怒”D较高、“无助”D较低。A曲解为体力,C误读为时长,D把维度当成场景层级,均属望文生义。
Q4. 将情感状态集成到行为树时,最关键的设计点是什么?
- A.每个分支的动画时长
- B.后置条件约束分支执行← 正确答案
- C.场景模型的渲染精度
- D.背景音乐的音量切换
答案:B。行为树节点通常有前置/后置条件,情感层只提供加权信号,不能绕过条件直接触发行为。后置条件防止“一怒就永久敌对”等跳变。A、C、D属于表现层内容,与决策结构无关。
Q5. 召回分数Score(m,q)通常不包含以下哪一项?
- A.线索与记忆的相关度
- B.记忆的当前衰减强度
- C.场景与上下文的一致性
- D.玩家角色的职业类型← 正确答案
答案:D。召回分数=相关度×当前强度×上下文加权。职业类型一般不参与召回,除非它被设计成场景上下文的一部分;默认情况下它是无关变量。A、B、C都是公式中的核心因子。
Q6. 记忆强化机制对应茶馆比喻中的哪个动作?
- A.翻页寻找旧账目
- B.拿浓墨重描纸条← 正确答案
- C.把账本锁进柜子
- D.向邻居打听客人
答案:B。强化指的是重复提及或相似事件让记忆强度回升,相当于“拿浓墨重描纸条”。A是召回,C是归档,D是外部信息注入,都不符合强化“加强原有记忆”的含义。
Q7. 情感行为映射中tanh函数的主要作用是什么?
- A.让情感强度无限增长
- B.把强度压缩到有限区间← 正确答案
- C.将时间轴反向推进
- D.生成随机的行为扰动
答案:B。tanh把情感强度压到(-1,1),避免情绪极端时行为权重爆炸,让NPC反应平滑可控。A正好相反,C是时间操作,D是随机性引入,都与压缩定界无关。
Q8. 工程化实现记忆衰减时,常见的优化手段有哪些?
- A.设置强度阈值跳过微粒记忆← 正确答案
- B.按半衰期定期归档清理← 正确答案
- C.把所有记忆永久持久化
- D.用事件标签建立索引← 正确答案
答案:ABD。A用阈值剪枝避免低价值记忆参与计算;B定时清理已衰减到无意义的条目;D用事件标签索引让召回更快。C看似稳妥实则积累冗余数据,是典型的反面做法,不是优化。
Q9. 情感状态映射到行为树时,需要考虑哪些因素?
- A.分支的后置条件约束← 正确答案
- B.分支的基础行为权重← 正确答案
- C.水面反射的贴图采样
- D.情感强度的放大上限← 正确答案
答案:ABD。情感映射本质是“基础权重×情感放大系数×条件约束”。A防止跳变,B决定默认偏好,D控制情绪影响上限。C属于渲染管线内容,与行为决策无关。
Q10. 关于关系度更新公式 $R_t = R_{t-1} \cdot e^{-\lambda \Delta t} + \Delta R$,下列说法正确的是?
- A.没有新事件时关系会自然衰减← 正确答案
- B.λ越大说明NPC越重情义
- C.ΔR可由本次事件的情感强度累加← 正确答案
- D.这个公式不需要任何时间参数
答案:AC。第一项带$e^{-\lambda \Delta t}$,时间流逝会让关系降温,A对;λ大则衰减快,恰好说明NPC“健忘”,B反了;ΔR是事件带来的即时修正,通常由OCC强度与极性决定,C对;公式明显包含Δt参数,D错。