为什么要做一个情感引擎?
在聊天机器人领域,大多数对话系统是无状态的——每次对话都是全新开始,没有记忆,没有情感积累。SoulSync 的目标是让机器人具备持续的情感记忆和渐进的关系演进能力。
这个项目作为 AstrBot 的插件运行,纯 Python 实现,零强制依赖。经过 3 个大版本迭代,已经发展成一个包含 20+ 模块、141 项配置的完整情感计算系统。
核心架构:双通道情感分析
SoulSync 采用关键词 + LLM 双通道架构进行情感分析:
关键词通道:每轮必做,基于预定义的正面/负面/亲密关键词词典进行快速匹配,O(n) 复杂度,延迟极低
LLM 通道:按四维决策(关键词强度、时间压力、强制计数器、LLM 标记)触发,调用辅助 LLM 进行深度情感分析
权重融合:关键词权重 0.6 + LLM 权重 0.4,惩罚奖励权重 0.6 独立融合
# 双通道融合示意
keyword_result = engine.analyze_keywords(text) # 每轮必做
if smart_updater.should_trigger_llm(...):
llm_result = await llm_analyzer.analyze(text, profile) # 按需触发
final_delta = (
keyword_result["fav_delta"] * 0.6 +
llm_result["fav_delta"] * 0.4
)python8 维情感模型
借鉴 Plutchik 情绪轮模型,SoulSync 定义了 8 个情感维度,每个维度值域 0~100:
维度 | 中文 | 图标 | 触发关键词示例 |
|---|---|---|---|
joy | 喜悦 | 😊 | 开心、高兴、哈哈 |
trust | 信任 | 🤗 | 信任、相信、依靠 |
anger | 愤怒 | 😠 | 生气、烦、恨 |
sadness | 悲伤 | 😢 | 难过、伤心、失望 |
当两个维度同时达到阈值时,会激活复合情绪标签,例如「感动」= 喜悦≥60 + 信任≥60,「醋意」= 愤怒≥50 + 恐惧≥50。
十二阶段关系演进
关系不是二元的「喜欢/不喜欢」,而是一个连续的演进过程。SoulSync 定义了 12 个正向阶段:
🌱 初识期(阈值 15)→ 🌿 好感期(35)→ 🤝 信任期(55)
🍀 熟悉期(75)→ 💬 交心期(95)→ 💛 深化期(115)
🧡 心动期(135)→ 💜 默契期(152)→ 💖 依恋期(168)
💞 缠绵期(180)→ 🌳 承诺期(185)→ 🌸 共生期(200)
每个阶段都有独立的对话风格配置(称呼、口吻、互动倾向),LLM 会根据当前阶段自动调整回复风格。例如「初识期」保持礼貌克制,「心动期」则变得害羞又甜蜜。
阶段判定使用滞后带保护机制——上升需要超过阈值+缓冲分,防止在阶段边界反复跳动。负好感走独立路线:冷淡→反感→厌恶→敌对。
遗忘曲线记忆系统
记忆不是永久的。SoulSync 的长期记忆采用指数衰减遗忘曲线:
def vividness_of(event, half_life_days=30.0):
"""遗忘曲线:清晰度 = base × 0.5^(天数/半衰期)"""
if event.get("important"):
return 100 # 重要记忆永不遗忘
days = (now - anchor) / 86400.0
return max(5, round(base * 0.5 ** (days / half_life_days)))python关键设计点:
半衰期可配:默认 30 天,可通过 WebUI 调整
记忆唤醒:被回忆的记忆清晰度重置为 100,从当前时刻重新衰减
重要标记:用户可标记重要记忆,永不遗忘
模糊化输出:清晰度低于 60% 的记忆只输出「模糊的回忆(温暖的一段记忆·清晰度 35%)」
惩罚奖励机制
关系需要维护。SoulSync 实现了 6 种行为机制,所有效果带 72h 半衰期自然衰减:
机制 | 触发条件 | 效果 |
|---|---|---|
🔥 行为势头 | 连续正/负面互动 | +0.24 / -0.76 每层(上限 10 层) |
❄️ 冷落惩罚 | 每日定时结算 | 基础 -1.8 + 0.43/天 × 好感因子(上限 -14) |
💫 回归奖励 | 冷落 48h+ 后回归 | +1.5 + 0.24/天(上限 +6.0) |
💔 背叛检测 | 背叛/欺骗关键词 | -7.3(累犯加重,冷却 1h) |
存储架构演进
v1.0 使用 JSON 文件存储,v3.0 迁移到 SQLite:
WAL 模式连接池:单例模式,10s 超时,支持并发读
月度分表:每日快照按月分表,避免单表膨胀
排行榜缓存:独立缓存表,避免每次全表排序
一键回退:环境变量 SOULSYNC_DB_FALLBACK=true 切回 JSON 模式
架构亮点总结
事件总线解耦:favor.changed / stage.advanced 等事件驱动模块间通信
钩子机制:前置钩子(意图识别)+ 后置钩子(prompt 泄漏清理)
热更新配置:141 项配置通过 WebUI 保存即生效,无需重载插件
渐进式摘要压缩:记忆超过阈值自动压缩旧记忆为泛化摘要,TF-IDF 关键词提取
转生系统:好感达阈值自动转生(递增式无限轮回),每转关键词敏感度 +5%
完整代码已开源在 GitHub,欢迎 Star 和 PR。
© 2026 Yahajiang. 本文采用 CC BY-NC-SA 4.0 许可协议,转载需注明出处。