新增mood与relation的相互反馈

This commit is contained in:
meng_xi_pan
2025-04-02 11:47:37 +08:00
parent 52e363700a
commit 7c51cbf027
3 changed files with 50 additions and 37 deletions

View File

@@ -137,12 +137,13 @@ class ThinkFlowChat:
await heartflow.get_subheartflow(stream_id).do_thinking_after_reply(response_set, chat_talking_prompt)
async def _update_relationship(self, message, response_set):
"""更新关系"""
"""更新关系情绪"""
ori_response = ",".join(response_set)
stance, emotion = await self.gpt._get_emotion_tags(ori_response, message.processed_plain_text)
await relationship_manager.calculate_update_relationship_value(
chat_stream=message.chat_stream, label=emotion, stance=stance
)
self.mood_manager.update_mood_from_emotion(emotion, global_config.mood_intensity_factor)
async def process_message(self, message_data: str) -> None:
"""处理消息并生成回复"""
@@ -276,11 +277,11 @@ class ThinkFlowChat:
timer2 = time.time()
timing_results["更新心流"] = timer2 - timer1
# 更新关系
# 更新关系情绪
timer1 = time.time()
await self._update_relationship(message, response_set)
timer2 = time.time()
timing_results["更新关系"] = timer2 - timer1
timing_results["更新关系情绪"] = timer2 - timer1
# 输出性能计时结果
if do_reply:

View File

@@ -5,6 +5,7 @@ from dataclasses import dataclass
from ..config.config import global_config
from src.common.logger import get_module_logger, LogConfig, MOOD_STYLE_CONFIG
from ..person_info.relationship_manager import relationship_manager
mood_config = LogConfig(
# 使用海马体专用样式
@@ -55,15 +56,15 @@ class MoodManager:
# 情绪词映射表 (valence, arousal)
self.emotion_map = {
"开心": (0.8, 0.6), # 高愉悦度,中等唤醒度
"愤怒": (-0.7, 0.7), # 负愉悦度,高唤醒度
"悲伤": (-0.6, 0.3), # 负愉悦度,低唤醒度
"惊讶": (0.2, 0.8), # 中等愉悦度,高唤醒度
"害羞": (0.5, 0.2), # 中等愉悦度,低唤醒度
"平静": (0.0, 0.5), # 中性愉悦度,中等唤醒度
"恐惧": (-0.7, 0.6), # 负愉悦度,高唤醒度
"厌恶": (-0.4, 0.4), # 负愉悦度,低唤醒度
"困惑": (0.0, 0.6), # 中性愉悦度,高唤醒度
"开心": (0.21, 0.6),
"害羞": (0.15, 0.2),
"愤怒": (-0.24, 0.8),
"恐惧": (-0.21, 0.7),
"悲伤": (-0.21, 0.3),
"厌恶": (-0.12, 0.4),
"惊讶": (0.06, 0.7),
"困惑": (0.0, 0.6),
"平静": (0.03, 0.5),
}
# 情绪文本映射表
@@ -93,7 +94,7 @@ class MoodManager:
cls._instance = MoodManager()
return cls._instance
def start_mood_update(self, update_interval: float = 1.0) -> None:
def start_mood_update(self, update_interval: float = 5.0) -> None:
"""
启动情绪更新线程
:param update_interval: 更新间隔(秒)
@@ -232,6 +233,8 @@ class MoodManager:
valence_change, arousal_change = self.emotion_map[emotion]
valence_change *= relationship_manager.gain_coefficient[relationship_manager.positive_feedback_value]
# 应用情绪强度
valence_change *= intensity
arousal_change *= intensity
@@ -245,3 +248,4 @@ class MoodManager:
self.current_mood.arousal = max(0.0, min(1.0, self.current_mood.arousal))
self._update_mood_text()

View File

@@ -14,10 +14,19 @@ logger = get_module_logger("rel_manager", config=relationship_config)
class RelationshipManager:
def __init__(self):
self.positive_feedback_dict = {} # 正反馈系统
self.positive_feedback_value = 0 # 正反馈系统
self.gain_coefficient = [1.0, 1.0, 1.1, 1.2, 1.4, 1.7, 1.9, 2.0]
self._mood_manager = None
def positive_feedback_sys(self, person_id, value, label: str, stance: str):
"""正反馈系统"""
@property
def mood_manager(self):
if self._mood_manager is None:
from ..moods.moods import MoodManager # 延迟导入
self._mood_manager = MoodManager.get_instance()
return self._mood_manager
def positive_feedback_sys(self, label: str, stance: str):
"""正反馈系统,通过正反馈系数增益情绪变化,根据情绪再影响关系变更"""
positive_list = [
"开心",
@@ -32,29 +41,27 @@ class RelationshipManager:
"厌恶",
]
if person_id not in self.positive_feedback_dict:
self.positive_feedback_dict[person_id] = 0
if label in positive_list and stance != "反对":
if 7 > self.positive_feedback_dict[person_id] >= 0:
self.positive_feedback_dict[person_id] += 1
elif self.positive_feedback_dict[person_id] < 0:
self.positive_feedback_dict[person_id] = 0
return value
if 7 > self.positive_feedback_value >= 0:
self.positive_feedback_value += 1
elif self.positive_feedback_value < 0:
self.positive_feedback_value = 0
elif label in negative_list and stance != "支持":
if -7 < self.positive_feedback_dict[person_id] <= 0:
self.positive_feedback_dict[person_id] -= 1
elif self.positive_feedback_dict[person_id] > 0:
self.positive_feedback_dict[person_id] = 0
return value
else:
return value
if -7 < self.positive_feedback_value <= 0:
self.positive_feedback_value -= 1
elif self.positive_feedback_value > 0:
self.positive_feedback_value = 0
gain_coefficient = [1.0, 1.1, 1.2, 1.4, 1.7, 1.9, 2.0]
value *= gain_coefficient[abs(self.positive_feedback_dict[person_id])-1]
if abs(self.positive_feedback_dict[person_id]) - 1:
logger.info(f"触发增益,当前增益系数:{gain_coefficient[abs(self.positive_feedback_dict[person_id])-1]}")
if abs(self.positive_feedback_value) > 1:
logger.info(f"触发mood变更增益当前增益系数{self.gain_coefficient[abs(self.positive_feedback_value)]}")
def mood_feedback(self, value):
"""情绪反馈"""
mood_manager = self.mood_manager
mood_gain = (mood_manager.get_current_mood().valence) ** 2 \
* math.copysign(1, value * mood_manager.get_current_mood().valence)
value += value * mood_gain
logger.info(f"当前relationship增益系数{mood_gain:.3f}")
return value
@@ -124,7 +131,8 @@ class RelationshipManager:
else:
value = 0
value = self.positive_feedback_sys(person_id, value, label, stance)
self.positive_feedback_sys(label, stance)
value = self.mood_feedback(value)
level_num = self.calculate_level_num(old_value + value)
relationship_level = ["厌恶", "冷漠", "一般", "友好", "喜欢", "暧昧"]