个人简介
作者简介:全栈研发,具备端到端系统落地能力,专注大模型的压缩部署、多模态理解与 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 的“情绪大脑”。
📚 目录
- 为什么需要情绪记忆?短时感知 × 长期理解的差距
- EmotionSlot 结构扩展:增加记忆标记与轮次记录
- EmotionGraph 设计:节点合并 × 情绪轨迹 × 时间权重建模
- 情绪演化函数与状态曲线:感知用户冷却 / 累积 / 触发点
- 用户画像 × 情绪偏好建模机制:实现情绪习惯学习
- 系统接入实战:对话系统 / 推荐系统中的情绪记忆调用方式
一、为什么需要情绪记忆?短时感知 × 长期理解的差距
🎯 场景对比:你真的“懂我”了吗?
Agent 类型 | 行为模式 | 结果 |
---|---|---|
无情绪记忆 | 每轮识别一次情绪,无上下文 | 情绪波动、状态转变无法跟踪 |
有情绪记忆 | 理解你最近“连续消极”,提前安抚 | 构建信任感,提升粘性与效率 |
✅ 为什么“记住情绪”这么关键?
- 节奏控制: 连续高 arousal 时不宜推送任务
- 语气策略: 累积负面情绪需转为陪伴式风格
- 个性建模: 用户情绪偏好长期形成稳定画像
- 用户画像: 喜怒哀乐反应强度体现人格差异
- 推荐系统协同: 用情绪状态影响推荐内容与排序逻辑
💡 工程目标
不只是记录“现在是什么情绪”,而是要“知道你最近怎么样”。
- ⏳ 跨轮追踪情绪状态流动
- 📈 构建 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 {}
✅ 三类常见边(关系类型)
类型 | 示例 | 含义 |
---|---|---|
transition | A → 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 输出控制逻辑]
🌟 如果本文对你有帮助,欢迎三连支持!
👍 点个赞,给我一些反馈动力
⭐ 收藏起来,方便之后复习查阅
🔔 关注我,后续还有更多实战内容持续更新
写系统,也写秩序;写代码,也写世界。
观熵出品,皆为实战沉淀。