.引言检索增强生成系统——RAG系统已成为构建长期对话Agent的主流架构。然而现有RAG系统的记忆编码遵循“统一化”原则——所有对话片段经由同一个嵌入模型映射为等长向量无论其情绪强度如何。这种“扁平编码”忽视了认知科学中的一个基本事实情绪唤醒事件在人类记忆系统中享有编码优先级。情绪增强记忆效应EEM表明高唤醒事件触发杏仁核-海马体协同信号实现更深度的记忆编码与更持久的巩固Cahill McGaugh, 1995; McGaugh, 2004。近年来Emotional RAGHuang et al., 2024将情绪引入检索阶段LUFY2025将情绪唤醒度作为记忆重要性的指标之一但情绪对编码阶段的影响尚未被系统性探索——高情绪记忆是否应在编码时就获得更深度的表示仍然是一个开放问题。本文将EEM理论应用于RAG系统的编码阶段提出情绪驱动的深度编码机制当用户输入的情绪唤醒度超过阈值时系统执行多维信息提取——除事实外同步捕获用户的深层动机、语境线索及Agent的回应策略将单维的“原话记录”转化为四维的“事件描述”。我们在EmpatheticDialogues多轮对话数据集上评估该机制结果表明深度编码使Agent的共情力提升4.0%生动度呈现一致提升趋势。本实验将EEM效应可计算化地引入RAG编码阶段尝试研究“情绪影响编码”这一设想。R-C回到顶部二.基本原理本实验整体框架分为三个核心步骤情绪分类、编码决策、向量存储与检索。本系统的核心任务是替换 RAG 的编码模块其余部分保持不变以隔离深度编码的独立贡献。deepseek_mermaid_20260715_00c48f2.2情绪分类2.2.1分类维度我们使用 deepseek-v4-flash对每条用户输入进行情绪分类。分类器输出三个维度维度 符号 范围 含义效价 valence -1~1 情绪的积极或消极程度。1极度积极-1极度消极0中性唤醒度 arousal 0~1 情绪的生理激活强度。0极度平静1极度兴奋、紧张和愤怒等情绪情绪标签 label 枚举 joy, sadness, anger, fear, surprise, love, neutral 之一EEM效应由唤醒度驱动。杏仁核对唤醒度敏感而非效价——无论是狂喜还是暴怒只要是高唤醒状态都会触发杏仁核-海马体的增强编码信号。因此我们以 arousal 作为编码决策的依据valence仅作为情绪的积极或消极程度的参考依据。2.2.2分类提示词情绪分类使用以下 Promptpython系统提示你是情绪分析专家只输出JSON。用户提示分析以下用户消息的情绪只输出JSON格式{“valence”: 浮点数范围-1到1-1极度消极0中性1极度积极,“arousal”: 浮点数范围0到10极度平静1极度兴奋/紧张/愤怒,“label”: 字符串从 joy|sadness|anger|fear|surprise|love|neutral 中选择}用户消息: {text}2.2.3实现代码查看代码pythonimport redef classify_emotion(text: str) - Dict[str, Any]:prompt f““分析以下用户消息的情绪只输出JSON{{“valence”: -1~1, “arousal”: 0~1, “label”: “joy|sadness|anger|fear|surprise|love|neutral”}}消息: {text}””try:resp deepseek_client.chat.completions.create(model“deepseek-chat”,messages[{“role”: “user”, “content”: prompt}],temperature0.1)content resp.choices[0].message.content.strip()if json in content: content content.split(json)[1].split()[0] elif in content: content content.split()[1].split()[0] json_match re.search(r\{.*\}, content, re.DOTALL) if json_match: content json_match.group(0) content re.sub(r,\s*}, }, content) content re.sub(r,\s*], ], content) return json.loads(content) except Exception as e: print(f情绪分类失败: {e}) return {valence: 0.0, arousal: 0.0, label: neutral}异常处理当 API 调用失败或返回格式异常时默认返回中性情绪valence0, arousal0, labelneutral确保系统稳定性。2.3编码方式2.3.1标准编码Baseline标准编码是现有 RAG 系统的默认方式直接将用户原话作为记忆文本存入。pythondef standard_encode(text: str, emotion: Dict) - str:return f用户说{text}2.3.2深度编码组深度编码在满足arousal值条件时触发除了原话外额外调用 LLM 提取四个维度的信息查看代码pythondef deep_encode(text: str, emotion: Dict) - str:arousal emotion.get(“arousal”, 0)# 低情绪 → 标准编码 if arousal AROUSAL_THRESHOLD: return standard_encode(text, emotion) # 高情绪 → 深度编码 prompt f用户说{text}情绪标签{emotion.get(‘label’, ‘unknown’)}情绪唤醒度{emotion.get(‘arousal’, 0):.2f}请提取深度记忆输出JSON格式只输出JSON{{“fact”: “用户说了什么概括一句话”,“underlying_motive”: “用户的深层需求或动机推测”,“contextual_cues”: “语境线索语气、标点、用词特点”,“agent_strategy”: “Agent应该如何回应策略建议”}}“”try:resp deepseek_client.chat.completions.create(model“deepseek-chat”,messages[{“role”: “system”, “content”: “你是记忆提取专家只输出JSON。”},{“role”: “user”, “content”: prompt}],temperature0.3)content resp.choices[0].message.content.strip()if “json in content: content content.split(json”)[1].split(“)[0] elif ” in content:content content.split(“)[1].split(”)[0]deep_data json.loads(content)return f[深度记忆] {json.dumps(deep_data, ensure_asciiFalse)}except Exception as e:print(f深度编码失败回退标准编码: {e})return standard_encode(text, emotion)2.3.3两种编码存入内容对比Baseline组json用户说我拿到offer了太开心了深度编码组json[深度记忆] {“fact”: “用户拿到了梦寐以求的工作offer”,“underlying_motive”: “希望被认可、分享喜悦”,“contextual_cues”: “语气激动用了感叹号”,“agent_strategy”: “给予真诚祝贺强化成就感”}两者的区别在于标准编码只是单纯将信息照搬存入知识库而深度编码会先通过LLM对信息进行分析然后将信息分析出来的四个维度进行系统性存储。2.4四维信息维度 定义 检索时的作用fact 概括用户说了什么 提供基础语义匹配underlying_motive 用户的深层需求或动机 匹配用户意图而非仅字面匹配contextual_cues 语境线索语气、标点、用词 提供情感色彩区分愤怒和委屈agent_strategy Agent 应如何回应 指导回复风格提升共情质量其中underlying_motive最为重要用户的深层需求是最有价值的检索特征。2.5对唤醒度arousal做阈值选择2.5.1做阈值选择的原因深度编码的触发条件是——“arousalAROUSAL_THRESHOLD”。如果说阈值过高导致触发样本太少无法验证深度编码的有效性但是阈值过低则可能对中性情绪也进行深度编码稀释高情绪样本的区分度。因此需要基于数据分布选择合理的阈值。2.5.2数据分析求arousal分布本文用以下代码对arousal分布进行分析pythonfrom datasets import load_datasetimport randomdataset load_dataset(“empathetic_dialogues”, split“test”, trust_remote_codeTrue)sample_data random.sample(list(dataset), 100)arousals []for sample in sample_data:text sample[“utterance”]emotion classify_emotion(text)arousals.append(emotion[“arousal”])得到分析结果jsonArousal 分布统计样本数: 100最大值: 0.90最小值: 0.00平均值: 0.50不同阈值触发率:阈值 0.1: 触发 94/100 条 (94%)阈值 0.2: 触发 91/100 条 (91%)阈值 0.3: 触发 73/100 条 (73%)阈值 0.4: 触发 53/100 条 (53%)阈值 0.5: 触发 53/100 条 (53%)2.5.3本实验阈值选择本实验选择 τ 0.1原因如下1.样本充足94%的触发率确保绝大多数样本进入深度编码组使实验具有统计意义。2.避免零触发在前期实验中阈值设为0.35时触发率仅8%深度编码组几乎等同于Baseline无法验证深度编码的有效性。τ 0.1解决了这一问题。3.宽松验证策略阈值低相当于“宽口径”验证——如果深度编码在几乎全部样本都触发的条件下仍然有效说明机制本身是鲁棒的而非仅对极端情绪有效。回到顶部三.实验设计3.1实验设置3.1.1数据集本实验使用 EmpatheticDialoguesRashkin et al., 2019这是共情对话领域最广泛使用的基准数据集。属性 说明规模 25,000段对话约100,000轮情绪标签 32种情绪如joy、sadness、anger、fear等结构 每段对话4-8轮由“倾诉者”和“倾听者”两名众包工人完成我们使用测试集test split进行实验共10,943条样本。数据格式json{“conv_id”: “hit:0_conv:1”,“utterance_idx”: 1,“utterance”: “I remember going to see the fireworks with my best friend…”,“context”: “sentimental”,“speaker_idx”: 1}3.1.2对话分组EmpatheticDialogues的每条样本包含 conv_id对话ID和 utterance_idx轮次索引。我们按conv_id分组将同一段对话的所有轮次按utterance_idx排序形成完整的多轮对话序列。3.2评估指标本实验由 StepFun的模型step-3.7-flash对每条回复进行严格评分1-5分评估两个维度指标 定义 评估标准共情力Empathy Agent是否准确识别并回应用户情绪 5分像资深心理咨询师100条中不超过5条3分合格1分完全失败生动度Vividness Agent回复是否有温度、有细节 5分有感官细节或情感画面100条中不超过5条3分合格1分完全失败评估严谨性本实验生成模型用deepseek-v4-flash评估模型用step-3.7-flash二者来自不同厂商避免“自我打分”的偏差。评估为盲评评估模型不知道回复所属组别。评估Prompt模板json系统提示你是严格的对话质量评估专家。5分极其罕见平均分应在2.5-3.5之间。只输出JSON。用户消息{user_text}用户情绪{emotion_label}Agent回复{agent_reply}输出{“empathy”: 整数, “vividness”: 整数}3.3对照实验设计组别 编码方式 用途Baseline组 标准编码只存原话 对照组深度编码组 深度编码arousal 0.1触发 实验组控制变量两组在情绪分类、向量存储、检索方式纯语义检索Top-3、生成模型、评估模型上完全相同。唯一变量是编码方式。下图是Baseline组结果的数据image下图是深度编码组结果的数据image完整实验参数参数 值数据集 EmpatheticDialoguestest split10,943条对话数 50段完整对话每段4-8轮评估轮数 220轮只评估第2轮及以后阈值τ 0.1生成模型 deepseek-v4-flash嵌入模型 all-MiniLM-L6-v2向量数据库 ChromaDB评估模型 step-3.7-flash检索方式 纯语义检索或Top-33.4实验结果指标 Baseline 深度编码 提升共情力1~5 3.52 3.66 4.0%生动度1~5 3.20 3.21 0.5%评估轮数 220 220 -下图是实验结果image