长期情绪记忆 × 状态跟踪:从对话历史中构建情绪图谱

个人简介
在这里插入图片描述
作者简介:全栈研发,具备端到端系统落地能力,专注大模型的压缩部署、多模态理解与 Agent 架构设计。 热爱“结构”与“秩序”,相信复杂系统背后总有简洁可控的可能。
我叫观熵。不是在控熵,就是在观测熵的流动
个人主页:观熵
个人邮箱:privatexxxx@163.com
座右铭:愿科技之光,不止照亮智能,也照亮人心!

专栏导航

观熵系列专栏导航:
AI前沿探索:从大模型进化、多模态交互、AIGC内容生成,到AI在行业中的落地应用,我们将深入剖析最前沿的AI技术,分享实用的开发经验,并探讨AI未来的发展趋势
AI开源框架实战:面向 AI 工程师的大模型框架实战指南,覆盖训练、推理、部署与评估的全链路最佳实践
计算机视觉:聚焦计算机视觉前沿技术,涵盖图像识别、目标检测、自动驾驶、医疗影像等领域的最新进展和应用案例
国产大模型部署实战:持续更新的国产开源大模型部署实战教程,覆盖从 模型选型 → 环境配置 → 本地推理 → API封装 → 高性能部署 → 多模型管理 的完整全流程
TensorFlow 全栈实战:从建模到部署:覆盖模型构建、训练优化、跨平台部署与工程交付,帮助开发者掌握从原型到上线的完整 AI 开发流程
PyTorch 全栈实战专栏: PyTorch 框架的全栈实战应用,涵盖从模型训练、优化、部署到维护的完整流程
深入理解 TensorRT:深入解析 TensorRT 的核心机制与部署实践,助力构建高性能 AI 推理系统
Megatron-LM 实战笔记:聚焦于 Megatron-LM 框架的实战应用,涵盖从预训练、微调到部署的全流程
AI Agent:系统学习并亲手构建一个完整的 AI Agent 系统,从基础理论、算法实战、框架应用,到私有部署、多端集成
DeepSeek 实战与解析:聚焦 DeepSeek 系列模型原理解析与实战应用,涵盖部署、推理、微调与多场景集成,助你高效上手国产大模型
端侧大模型:聚焦大模型在移动设备上的部署与优化,探索端侧智能的实现路径
行业大模型 · 数据全流程指南:大模型预训练数据的设计、采集、清洗与合规治理,聚焦行业场景,从需求定义到数据闭环,帮助您构建专属的智能数据基座
机器人研发全栈进阶指南:从ROS到AI智能控制:机器人系统架构、感知建图、路径规划、控制系统、AI智能决策、系统集成等核心能力模块
人工智能下的网络安全:通过实战案例和系统化方法,帮助开发者和安全工程师识别风险、构建防御机制,确保 AI 系统的稳定与安全
智能 DevOps 工厂:AI 驱动的持续交付实践:构建以 AI 为核心的智能 DevOps 平台,涵盖从 CI/CD 流水线、AIOps、MLOps 到 DevSecOps 的全流程实践。
C++学习笔记?:聚焦于现代 C++ 编程的核心概念与实践,涵盖 STL 源码剖析、内存管理、模板元编程等关键技术
AI × Quant 系统化落地实战:从数据、策略到实盘,打造全栈智能量化交易系统
大模型运营专家的Prompt修炼之路:本专栏聚焦开发 / 测试人员的实际转型路径,基于 OpenAI、DeepSeek、抖音等真实资料,拆解 从入门到专业落地的关键主题,涵盖 Prompt 编写范式、结构输出控制、模型行为评估、系统接入与 DevOps 管理。每一篇都不讲概念空话,只做实战经验沉淀,让你一步步成为真正的模型运营专家。


长期情绪记忆 × 状态跟踪:从对话历史中构建情绪图谱


🧠 摘要

情绪是动态变化的。如果智能体每次都只看一轮情绪,就像“金鱼记忆”,根本无法提供真正贴心的体验。本篇将从工程角度拆解“长期情绪记忆系统”的构建方法,聚焦如何通过多轮对话结构化 EmotionSlot,构建 EmotionGraph、演化用户状态曲线、形成用户情绪画像,为后续的个性化推荐、任务调度和人格调节提供数据支撑。我们将提供完整的数据结构、图谱节点模型与部署策略,打造 Agent 的“情绪大脑”。


📚 目录

  1. 为什么需要情绪记忆?短时感知 × 长期理解的差距
  2. EmotionSlot 结构扩展:增加记忆标记与轮次记录
  3. EmotionGraph 设计:节点合并 × 情绪轨迹 × 时间权重建模
  4. 情绪演化函数与状态曲线:感知用户冷却 / 累积 / 触发点
  5. 用户画像 × 情绪偏好建模机制:实现情绪习惯学习
  6. 系统接入实战:对话系统 / 推荐系统中的情绪记忆调用方式

一、为什么需要情绪记忆?短时感知 × 长期理解的差距


🎯 场景对比:你真的“懂我”了吗?

Agent 类型行为模式结果
无情绪记忆每轮识别一次情绪,无上下文情绪波动、状态转变无法跟踪
有情绪记忆理解你最近“连续消极”,提前安抚构建信任感,提升粘性与效率

✅ 为什么“记住情绪”这么关键?

  1. 节奏控制: 连续高 arousal 时不宜推送任务
  2. 语气策略: 累积负面情绪需转为陪伴式风格
  3. 个性建模: 用户情绪偏好长期形成稳定画像
  4. 用户画像: 喜怒哀乐反应强度体现人格差异
  5. 推荐系统协同: 用情绪状态影响推荐内容与排序逻辑

💡 工程目标

不只是记录“现在是什么情绪”,而是要“知道你最近怎么样”。

  • ⏳ 跨轮追踪情绪状态流动
  • 📈 构建 EmotionGraph 结构,理解事件对情绪的触发影响
  • 🧠 基于历史状态构建“用户情绪习惯画像”

二、EmotionSlot 结构扩展:增加记忆标记与轮次记录


✅ 基础结构回顾

我们前面定义了 EmotionSlot:

{
  "primary": "anger",
  "valence": -0.8,
  "arousal": 0.9,
  "confidence": 0.93,
  "source": "text",
  "timestamp": "2025-04-23T13:21:55"
}

✅ 为记忆场景扩展字段:

{
  ...,
  "turn_id": 17,                     # 对话第几轮
  "session_id": "sess-xyz",         # 对话会话 ID
  "cause": "任务中断未响应",        # 情绪触发语义标签(可选)
  "decay": false,                   # 是否参与情绪记忆衰减机制
  "sticky": true                    # 是否标记为高影响记忆(如情绪爆发)
}

✅ 构建对话情绪轨迹队列 EmotionSequence

class EmotionSequence:
    def __init__(self):
        self.slots = []

    def append(self, slot):
        self.slots.append(slot)

    def get_latest(self, n=3):
        return self.slots[-n:]

    def get_arousal_trend(self):
        return [s.arousal for s in self.slots]

    def get_valence_average(self):
        return np.mean([s.valence for s in self.slots])

可用于动态判断:过去 5 轮是否在冷却、积压还是即将爆发?


✅ 情绪轮流权重示例:用于计算长期状态趋势

def time_decay_weighted_valence(slots):
    now = time.time()
    scores = []
    for s in slots:
        delta = now - s.timestamp
        weight = np.exp(-delta / 300)  # 5 分钟半衰期
        scores.append(s.valence * weight)
    return np.mean(scores)

📌 小结:

  • 情绪状态不应该是“即用即弃”的信息
  • 扩展 EmotionSlot + 引入 Session、轮次、sticky 标记
  • 构建 EmotionSequence 支持趋势分析、轨迹建模、时序行为预测

三、EmotionGraph 设计:节点合并 × 情绪轨迹 × 时间权重建模


🎯 目标:结构化“情绪状态的演化关系”

将 EmotionSlot 扩展为图结构节点,以时间、事件、转变为边,构建“你情绪变化的地图”。


✅ EmotionGraph 数据结构设计

class EmotionGraph:
    def __init__(self):
        self.nodes = []
        self.edges = []

    def add_node(self, slot):
        self.nodes.append(slot)

    def add_edge(self, from_slot, to_slot, relation):
        self.edges.append({
            "from": from_slot,
            "to": to_slot,
            "type": relation,
            "timestamp": time.time()
        })

✅ 情绪节点标准化(EmotionNode)

class EmotionNode:
    def __init__(self, slot, meta=None):
        self.id = uuid.uuid4().hex
        self.primary = slot["primary"]
        self.valence = slot["valence"]
        self.arousal = slot["arousal"]
        self.timestamp = slot["timestamp"]
        self.turn_id = slot.get("turn_id", None)
        self.meta = meta or {}

✅ 三类常见边(关系类型)

类型示例含义
transitionA → B情绪自然过渡
cause_of任务失败 → 愤怒节点某事件引发该情绪
resolved_by愤怒节点 → 安抚回复节点情绪被某行为缓解

✅ 示例图谱片段:

[中立] ──(transition)──> [焦虑] ──(cause_of: “任务失败”)──> [愤怒]
                         ↑
                  (resolved_by)
                         ↓
                 [安抚性输出:我理解你...]

✅ 节点合并策略(同类情绪连续出现)

def merge_if_similar(node_a, node_b, threshold=0.2):
    if abs(node_a.valence - node_b.valence) < threshold and \
       abs(node_a.arousal - node_b.arousal) < threshold:
        return True
    return False

解决“情绪抖动导致图谱过碎”的问题,保留趋势主线


✅ 情绪轨迹输出接口(EmotionPath)

def trace_emotion_path(graph, start_node):
    path = [start_node]
    while True:
        next_edges = [e for e in graph.edges if e["from"] == path[-1]]
        if not next_edges:
            break
        next_node = next_edges[0]["to"]
        path.append(next_node)
    return path

✅ 情绪冷却与复发预测(节点属性建模)

为节点添加:

node.meta = {
    "resolved": True,
    "duration": 153,          # 情绪持续时间(秒)
    "reactivated": False      # 后续是否再次激活该情绪
}

📌 小结:

  • EmotionGraph 用图结构建模“情绪的变化链条”
  • 节点记录情绪状态,边记录转变 / 触发 / 缓解关系
  • 可追踪情绪路径、分析演化趋势、预测情绪事件对行为的影响

四、情绪演化函数与状态曲线:感知用户冷却 / 累积 / 触发点


🎯 目标:理解情绪如何随时间与交互演变

情绪不是瞬时点,而是波动曲线
Agent 需要“看懂”用户正在升温、逐渐冷却,还是即将爆发


✅ 构建时间权重衰减机制(decayed_valence)

def decayed_valence(slot, now=None, decay_time=300):
    now = now or time.time()
    delta = now - slot["timestamp"]
    weight = np.exp(-delta / decay_time)
    return slot["valence"] * weight
  • 300s 半衰期,模拟情绪“自动冷却”机制
  • 可扩展为任务特定衰减速率(如客服场景衰减更慢)

✅ 状态曲线构建:EmotionTrendTracker

class EmotionTrendTracker:
    def __init__(self):
        self.sequence = []

    def update(self, slot):
        self.sequence.append(slot)

    def valence_curve(self):
        return [decayed_valence(s) for s in self.sequence]

    def arousal_curve(self):
        return [s["arousal"] for s in self.sequence]

✅ 可视化输出(建议接入前端):

import matplotlib.pyplot as plt

def plot_emotion_curve(sequence):
    valence = [decayed_valence(s) for s in sequence]
    arousal = [s["arousal"] for s in sequence]
    x = range(len(sequence))

    plt.plot(x, valence, label="Valence")
    plt.plot(x, arousal, label="Arousal")
    plt.legend()
    plt.title("Emotion Curve Over Time")
    plt.xlabel("Turn")
    plt.ylabel("Score")
    plt.show()

✅ 情绪拐点检测逻辑(如“即将情绪爆发”)

def is_emotional_peak(sequence, window=3):
    recent = sequence[-window:]
    mean_arousal = np.mean([s["arousal"] for s in recent])
    std_arousal = np.std([s["arousal"] for s in recent])
    return mean_arousal > 0.7 and std_arousal < 0.1

表示连续高 arousal 且情绪稳定,进入“激化状态”


✅ 情绪惯性特征提取:构建用户偏好模型输入

特征名含义
avg_valence平均情绪倾向(情绪乐观/悲观)
max_arousal最高激动程度(易激动程度)
burst_count突发情绪次数
recovery_time_avg从极端情绪恢复的平均时间

📌 小结:

  • 情绪状态是波动曲线,不是静态标签
  • 构建演化函数、趋势提取器与可视化工具可用于
    • 决策拐点检测(任务是否中断)
    • 情绪缓解判断(是否可以继续推进)
    • 个性化情绪管理模型输入特征

五、用户画像 × 情绪偏好建模机制:实现情绪习惯学习


🎯 目标:建立“情绪人格特征”的建模方法

不仅是记住每次情绪,而是理解你这个人,通常会怎么反应


✅ 核心问题

  • 你是“容易生气”还是“惯性回避”?
  • 你“愤怒时沉默”,还是“激烈表达”?
  • 每当悲伤,是“自我恢复”还是“需要外部陪伴”?

✅ 情绪偏好画像字段设计(EmotionProfile)

class EmotionProfile:
    def __init__(self, user_id):
        self.user_id = user_id
        self.avg_valence = 0.0
        self.avg_arousal = 0.0
        self.burst_frequency = 0.0
        self.recovery_time_avg = 0.0
        self.emotion_tendencies = {}  # e.g. {"anger": "explosive", "sadness": "withdraw"}

    def update(self, emotion_sequence):
        self.avg_valence = np.mean([s["valence"] for s in emotion_sequence])
        self.avg_arousal = np.mean([s["arousal"] for s in emotion_sequence])
        self.burst_frequency = detect_burst_rate(emotion_sequence)
        self.recovery_time_avg = calc_recovery_time(emotion_sequence)

✅ 典型用户情绪类型画像标签(示例)

标签名特征应用策略
易激型(high-arousal-explosive)高 arousal + 多 burst回复需快速安抚,避免长输入
内敛型(low-expression-silent)高 valence 偏负但无表达引导式问题唤出情绪
自愈型(fast-recovery-positive)情绪波动小,恢复快可快速恢复任务推进节奏
依赖型(emotion-seeking-slow-recovery)持续低 valence + 高依赖安抚回复增加陪伴模版密度、拉长回应时间

✅ 应用位置

  • 表达策略调度器(根据类型决定语气 + 节奏)
  • 多 Agent 交接(不同 Agent 可共享情绪画像一致性)
  • 个性化任务节奏 / 推荐系统(如不在情绪高峰推荐高压力任务)

六、系统接入实战:对话系统 / 推荐系统中的情绪记忆调用方式


✅ 推荐系统中的情绪画像用法(影响内容 + 排序)

# 情绪偏好驱动内容筛选
if user_profile.avg_valence < -0.5:
    exclude = ["高压话题", "效率提醒类提示"]
    sort_by = ["轻松", "正向反馈型内容"]

✅ 对话系统中的 Hook 调用方式

emotion_context = EmotionContext.load(user_id)
emotion_profile = EmotionProfile.load(user_id)

# 当前对话构建逻辑
if emotion_profile.burst_frequency > 0.8:
    strategy = "短句式 + 快速响应 + 弹性交互"
elif emotion_profile.recovery_time_avg > 500:
    strategy = "陪伴模式 + 低节奏输出 + 鼓励引导"

final_prompt = build_prompt_with_persona(emotion_context.latest(), emotion_profile, task)

✅ 架构接入建议(EmotionLayer 组件)

[识别模型] → [EmotionSlot]
        ↓
[EmotionGraph / Sequence] → [EmotionProfile]
        ↓
[PromptBuilder] ← EmotionContext + EmotionProfile
        ↓
[Agent 输出控制逻辑]

🌟 如果本文对你有帮助,欢迎三连支持!

👍 点个赞,给我一些反馈动力
⭐ 收藏起来,方便之后复习查阅
🔔 关注我,后续还有更多实战内容持续更新


写系统,也写秩序;写代码,也写世界。
观熵出品,皆为实战沉淀。

copype amd64 o:\Win10PE imagex /apply o:\Win10PE\media\sources\boot.wim 1 o:\mount dism /Get-Packages /Image:"o:\mount" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-FontSupport-ZH-CN.cab" dism /image:"o:\mount" /Set-AllIntl:zh-CN dism /image:"o:\mount" /set-inputlocale:0804:00000804 dism /image:"o:\mount" /set-timezone:"China Standard Time" dism /image:"o:\mount" /set-SKUIntlDefaults:zh-CN dism /image:o:\mount /Remove-Package /PackageName:Microsoft-Windows-WinPE-LanguagePack-Package~31bf3856ad364e35~amd64~en-US~10.0.15063.0 dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-HTA.cab" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\zh-cn\WinPE-HTA_zh-cn.cab" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-MDAC.cab" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\zh-cn\WinPE-MDAC_zh-cn.cab" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-Scripting.cab" dism /image:o:\mount /Add-Package /PackagePath:"I:\win10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\zh-cn\WinPE-WMI_zh-cn.cab" dism /image:"o:\mount" /Set-ScratchSpace:512 imagex /capture /compress maximum /boot o:\mount o:\Win10PE\media\sources\boot.wim "winpe" "winpe" MakeWinPEMedia /ISO o:\Win10PE o:\Win10PE.iso https://blog.csdn.net/glc22/article/details/69388729
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

观熵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值