新增mood与relation的相互反馈
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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 = ["厌恶", "冷漠", "一般", "友好", "喜欢", "暧昧"]
|
||||
|
||||
Reference in New Issue
Block a user