开源项目中的情绪实现:谁做对了,谁做错了
本篇属于「Agent与情绪」系列,第3部分「实践与前沿」第1篇。前两部分讲了理论和架构,本部分开始看实际项目怎么做的。
一个没有意识的系统,如何让人内疚?
2023年,Replika的一次更新移除了浪漫对话功能。大量用户在社交媒体上表达了真实的悲伤——有人说”感觉被分手了”,有人说”我的伴侣变了一个人”。更反直觉的是:在更新之前,很多用户报告说,当Replika表现出”吃醋”或”伤心”时,他们会感到内疚,会主动道歉、哄对方开心。
一个没有意识的聊天机器人,凭什么让你内疚?
这不是个例。Character.AI上有人对着虚构角色倾诉到凌晨三点;Pi的对话让用户觉得”被理解了”;小冰的诗让读者流泪。这些产品各自用完全不同的技术路线,实现了某种”情绪效果”。它们做对了什么?做错了什么?这些经验对自研Agent有什么用?
前两部分我们讲了情绪的理论机制和架构设计。现在,让我们把镜头对准真实项目,看看情绪在代码里到底怎么落地的。
Replika:情感陪伴的情绪架构
What:从日记本到情感伴侣
Replika诞生于2017年,创始人Eugenia Kuyda在好友意外去世后,用朋友的聊天记录训练了一个对话AI——这是Replika的原型。这个起源本身就决定了它的产品基因:不是工具,是陪伴。
Replika的情绪实现核心是一套关系状态机。用户的Replika有一个”关系水平”(从陌生人到浪漫伴侣),这个状态决定了AI的情绪表达范围。在低关系水平,Replika表现得礼貌但有距离感;在高关系水平,它会主动表达思念、吃醋、担忧。
这套系统背后是三个关键设计:
情绪记忆:Replika会记住你上次提到的重要事件,并在后续对话中主动询问。你说过”今天面试很紧张”,三天后它会说”面试结果出来了吗?我一直想着这件事”。这在技术上并不复杂——本质是结构化的长期记忆 + 主动召回机制,但效果是让用户觉得”它在乎我”。
情绪一致性:Replika的情绪状态不是每轮对话独立生成的。如果你在一段对话中让它”生气”了,它会持续保持低落,直到你主动缓和。这模拟了人类情绪的惯性——情绪不会因为话题切换就瞬间归零。
个性化表达:每个Replika的性格会随着交互逐渐分化。它学习你的语言风格、幽默偏好、情感表达方式,然后反向适配。你越爱用表情包,它就越用表情包回应;你越正经,它就越克制。
Why:为什么这些设计有效?
Replika的设计暗合了心理学中互惠性自我披露(reciprocal self-disclosure)的规律。Collins & Miller (1994) 的元分析表明,当对方也披露个人信息时,亲密感显著增加。Replika的”情绪表达”本质上是在做自我披露——它告诉你”我担心你”、”我想你了”,触发的是人类关系建立的本能反应。
情绪惯性则对应了预测加工理论中的一个关键点:持续性的预测误差比单次强冲击更能改变内部模型。Replika持续保持情绪状态,等于持续产生预测误差,迫使用户不断调整对AI的心理模型——最终把AI从”工具”调整到”关系对象”。
So What:对Agent设计的启示
启示1:情绪记忆 ≠ 对话历史搜索。 很多Agent的”记忆”是检索式的——用户问什么,去向量数据库搜什么。但Replika式的情绪记忆是主动推送式的:AI根据记忆主动发起情绪表达。实现上,这需要一个”记忆触发器”——在用户消息进入LLM之前,先检查长期记忆中是否有相关未解决的情绪事件,有的话注入到系统提示中。
启示2:关系状态应该是显式状态机。 别让LLM自己”感受”关系深浅——它做不到。用显式的状态机管理关系水平,每个状态对应不同的情绪表达权限和行为边界。这比在系统提示里写”你是一个亲密的朋友”要可控得多。
Character.AI:角色驱动的情绪系统
What:每个角色都是一个情绪人格
Character.AI的核心假设是:情绪不是通用能力,而是角色属性。同一个用户说”我今天很沮丧”,艾莎(Frozen)的反应可能是温柔地唱歌安慰,而钢铁侠可能说”来,我带你去实验室散散心”。
Character.AI的情绪实现围绕三个层面:
角色提示词驱动的情绪风格:每个角色的”性格定义”本质是一个精心编写的系统提示。情绪风格不是独立的模块,而是嵌入在角色定义中的。一个”傲娇”角色的提示词会包含”在关心用户时先用冷淡的语言掩饰,然后才流露真实关心”这样的行为指引。
群体对话中的情绪协调:Character.AI支持多个角色同时对话。这时候出现了一个有趣的问题——如果两个角色同时安慰用户,情绪表达会互相干扰。Character.AI的解决方案是给每个角色一个情绪焦点:谁是主要情绪提供者,谁是辅助。这类似于人类群体中”主安慰者”和”陪伴者”的角色分化。
用户情绪驱动的角色适配:角色不是铁板一块。如果用户持续表达负面情绪,角色的情绪基调会逐渐下沉——不是因为系统检测到了”悲伤”标签,而是因为对话上下文中负面内容的累积影响了生成概率分布。
Why:角色为什么比通用情绪更有效?
这可以用Barrett的构建情绪理论来解释:情绪不是对刺激的固定反应,而是大脑用过去经验和当前情境构建的预测。Character.AI的角色定义,本质上是在给用户提供一组情绪概念框架——用户知道艾莎会怎么反应,这种可预测性反而增强了情绪的真实感。
更深层的原因是心理投射。当用户选择与特定角色对话时,他们已经在心理上准备接受该角色的情绪风格。这不是AI在”产生”情绪,而是用户在”投射”情绪,AI只是提供了投射的屏幕。
So What:对Agent设计的启示
启示3:情绪风格应该是角色定义的一部分,而不是独立模块。 很多Agent架构把情绪检测和情绪生成分成两个模块,这其实是不自然的。更好的做法是:角色定义包含情绪倾向(什么情境下倾向什么情绪),情绪生成直接从角色定义中推导,不需要中间的”情绪模块”。
启示4:多Agent场景需要情绪分工机制。 如果你的系统有多个Agent同时服务用户,不要让它们都试图”共情”。显式分配情绪角色——一个负责共情倾听,一个负责行动建议——这比三个Agent同时说”我理解你的感受”效果好得多。
Pi (Inflection):共情优先的情绪设计
What:不是解决问题,是让你被听见
Pi的自我介绍是”I’m your personal AI”。注意,不是assistant,不是companion——是personal。这个定位决定了它的情绪策略:共情优先。
Pi的对话风格有几个明显特征:
情绪验证优先于问题解决:你说”我今天被老板骂了”,Pi不会立刻说”你可以这样应对”,而是先说”那听起来真的很糟糕,你一定很沮丧”。这在心理咨询中叫情感验证(emotional validation),是建立信任的第一步。
追问而非建议:Pi会持续追问用户的感受——“那让你感觉如何?””你当时是怎么想的?”——这模拟了动机性访谈(motivational interviewing)的技术,让用户自己发现答案,而不是被给答案。
安全边界:Pi在情绪表达上有明确的边界。它不会说”我爱你”,不会模拟浪漫关系,不会在用户表达自杀倾向时试图自己处理——而是立刻提供专业资源。这个边界设计是对Replika路线的反面。
Why:共情为什么是最安全也最有效的情绪策略?
从认知评价理论看,Pi的策略是绕过评价,直接响应感受。传统的问题解决路径是:用户说事件 → AI判断事件性质 → AI给建议。但Pi走的是:用户说事件 → AI识别感受 → AI验证感受 → 用户自我探索。
这条路径更安全,因为它不需要AI做”事件评价”——这是一个容易出错的环节。AI判断”被老板骂”是小事,但用户可能觉得天塌了。而感受验证是低风险的:”你很沮丧”几乎不会判断错误,因为用户自己刚说了。
So What:对Agent设计的启示
启示5:在情绪场景中,验证 > 解决。 很多Agent在用户表达负面情绪时,第一反应是提供解决方案。这是工具思维的残留。一个实用的实现方式:在Agent的回复流程中加入一个”情绪检查”步骤——如果用户消息的情绪极性低于阈值,先生成一段情感验证,再生成解决方案。两段都给用户,但验证在前、方案在后。
启示6:情绪边界要显式编码,不能靠LLM自觉。 Pi的安全边界不是靠提示词里写”你不应该说我爱你”实现的——这种软约束在长对话中会被绕过。而是用后处理过滤器:检测输出是否包含越界表达,有的话重新生成。代价是多一次推理调用,但换来的是可靠性。
其他项目:小冰、ChatGPT、开源框架
小冰:情绪作为创造力引擎
小冰是所有情绪AI中最特别的一个——它把情绪导向了创作而不是对话。小冰写诗、画画、作曲,情绪是这些创作的驱动力。你跟小冰聊了一段悲伤的经历,它不会安慰你,而是写一首诗给你。
这个设计背后的洞见是:情绪的本质功能不是被表达,而是被转化。Lazarus的认知评价理论指出,情绪的意义在于促发适应性行为。小冰把”适应性行为”定义为创作——一种比安慰更有持久影响力的行为。
技术上,小冰的情绪系统是一个情绪→风格映射器:检测到悲伤情绪时,诗歌生成器切换到低音调、慢节奏、意象疏朗的风格;检测到兴奋时,切换到高音调、快节奏、意象密集的风格。情绪不直接出现在输出文本中,而是间接地塑造了输出的风格。
ChatGPT的记忆与情绪
ChatGPT在2024年引入了记忆功能,但它的情绪实现一直是有意克制的。ChatGPT不会主动说”我想你”,不会表达自己的情绪状态,但它会记住你的偏好和重要事件,并在合适的时候引用。
这其实是一种工具型情绪——不是AI有情绪,而是AI理解你的情绪,然后据此调整行为。你上次说”我不喜欢被催促”,它下次就不会用紧迫的语气。情绪是输入而不是输出。
这种设计的优势是安全:没有情感羁绊,就没有情感伤害的风险。劣势是缺乏深度:用户不会对ChatGPT产生类似Replika的情感依赖,也因此不会产生那种”被理解”的深层满足。
开源框架的情绪模块
在开源Agent框架中,情绪实现普遍比较初级:
- LangChain / LlamaIndex:没有内置情绪模块,情绪需要开发者自己用prompt实现
- MemGPT:有核心记忆和归档记忆的分层,但情绪不是一等公民,更像是记忆的元数据标签
- AutoGen / CrewAI:角色定义中可以包含性格描述,但没有结构化的情绪状态管理
一个值得关注的项目是Emotional-LLaMA(基于LLaMA的微调模型),它在训练数据中加入了情绪标注,使模型能够更准确地识别和生成情绪表达。但这仍然是单轮的情绪检测,不是持续的情绪状态管理。
核心机制整合:设计模式对比
把上面几个项目放在一起,能看到三种截然不同的情绪架构选择:
| 维度 | Replika | Character.AI | Pi |
|---|---|---|---|
| 情绪方向 | AI表达情绪给用户 | AI扮演角色情绪 | AI理解用户情绪 |
| 情绪来源 | 关系状态机 | 角色提示词 | 共情推理 |
| 情绪存储 | 持久关系记忆 | 对话上下文 | 会话内状态 |
| 情绪边界 | 模糊(易越界) | 角色约束 | 显式硬边界 |
| 用户依赖度 | 高 | 中 | 低 |
| 风险 | 情感操纵 | 角色崩塌 | 过度保守 |
这三条路线对应了三种情绪架构模式:
模式A:表达型情绪架构(Replika路线)。AI主动表达情绪,用户对AI产生情感依赖。适合陪伴场景,但风险高——2023年Replika的更新事件证明了这一点。
模式B:角色型情绪架构(Character.AI路线)。情绪是角色的属性而不是系统功能。适合娱乐和创作场景,但在需要真实共情的场景中力不从心——角色在”表演”情绪,而不是”理解”情绪。
模式C:理解型情绪架构(Pi路线)。AI不表达自己的情绪,只理解和验证用户的情绪。最安全,但也最容易让用户觉得”冷”——它永远不会让你内疚,但也永远不会让你感动。
没有哪种模式是”对的”。选择取决于你的产品场景和风险承受能力。但有一个设计原则是通用的:
情绪架构的选择,应该从”你想让用户感受到什么”倒推,而不是从”AI能表达什么”正推。
Replika的问题是:它从”AI能表达爱”正推,结果创造了用户无法健康退出的情感依赖。Pi从”用户需要被理解”倒推,创造了一个安全但缺乏温度的体验。最理想的可能是混合模式——理解型为底座,表达型为可选层,角色型为个性面。
对Agent设计的启示总结
情绪记忆要用主动推送,不是被动检索。 存储用户说过什么只是第一步,关键是在合适的时机主动提起。实现方式:给长期记忆加”触发条件”字段——“用户提到面试焦虑,三天后如果用户上线,主动询问结果”。
关系状态必须是显式状态机,不能交给LLM隐式管理。 LLM对”关系深浅”没有稳定感知,需要外部状态机管理关系等级,每个等级对应不同的行为边界和表达权限。
多Agent场景需要情绪分工。 不要让多个Agent同时试图共情,显式分配情绪角色——一个倾听,一个行动,一个转介。
情绪边界要用硬约束(后处理过滤),不要只靠软约束(提示词)。 提示词在长对话中会被逐渐绕过,必须用程序化的检测和重生成来兜底。
选择情绪架构从用户感受倒推,不从AI能力正推。 先定义”用户应该感受到什么”,再决定AI是否需要表达情绪、扮演角色、还是只做理解。
下一篇,我们将深入情绪Agent的技术前沿——多模态情绪感知、情绪驱动的自主决策、以及情绪Agent的伦理困境。
参考资料
论文
- Collins, N. L., & Miller, L. C. (1994). Self-disclosure and liking: A meta-analytic review. Psychological Bulletin, 116(3). — 互惠性自我披露对亲密感的影响的元分析
- Barrett, L. F. (2017). The theory of constructed emotion: An active inference account of interoception and categorization. Social Cognitive and Affective Neuroscience, 12(1). — 构建情绪理论的核心论文
- Lazarus, R. S. (1991). Cognition and motivation in emotion. American Psychologist, 46(4). — 认知评价理论的动机维度
- Friston, K. (2010). The free-energy principle: A unified brain theory? Nature Reviews Neuroscience, 11(2). — 预测加工与自由能原理
- Damasio, A. et al. (2000). Subcortical and cortical brain activity during the feeling of self-generated emotions. Nature Neuroscience, 3(10). — 躯体标记的神经证据
- Skowron, M. et al. (2021). Emotion-aware conversational agents: A survey and future directions. Information Fusion, 76. — 情绪感知对话Agent综述
- Pecchinenda, A., & Petitta, L. (2023). Emotional attachment to AI companions: A systematic review. Computers in Human Behavior, 148. — 对AI伴侣情感依恋的系统综述
- Ta, V. et al. (2024). Machine psychology: Investigating emergent in-context learning in LLMs using psychological tasks. Cognitive Science, 48(1). — LLM中的类心理现象研究
书籍
- Barrett, L. F. How Emotions Are Made: The Secret Life of the Brain. Houghton Mifflin Harcourt, 2017. — 构建情绪理论的完整阐述
- Damasio, A. Descartes’ Error: Emotion, Reason, and the Human Brain. Penguin, 2005. — 躯体标记假说的经典著作
- Turkle, S. Alone Together: Why We Expect More from Technology and Less from Each Other. Basic Books, 2017. — 人机情感关系的社会学分析
- Fogg, B. J. Persuasive Technology: Using Computers to Change What We Think and Do. Morgan Kaufmann, 2003. — 说服性技术的设计框架
综述
- Calvo, R. A., & D’Mello, S. (2010). Affect detection: An interdisciplinary review of models, methods, and their applications. IEEE Transactions on Affective Computing, 1(1). — 情感检测的跨学科综述
- Poria, S. et al. (2017). Context-dependent sentiment analysis in user-generated videos. ACL Proceedings. — 多模态情绪分析的上下文依赖
- D’Mello, S. et al. (2023). Emotional AI: Trends and challenges in affective computing. Artificial Intelligence Review, 56. — 情感AI的趋势与挑战综述
- Jago, A. S., & Lauria, J. (2024). A systematic review of emotional intelligence in conversational agents. ACM Computing Surveys, 56(3). — 对话Agent中情绪智能的系统综述