Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc
This commit is contained in:
@@ -5,6 +5,7 @@ import time
|
|||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
from src.config.config import global_config, model_config
|
from src.config.config import global_config, model_config
|
||||||
from src.chat.message_receive.message import MessageRecv
|
from src.chat.message_receive.message import MessageRecv
|
||||||
|
from src.common.data_models.database_data_model import DatabaseMessages
|
||||||
from src.chat.message_receive.chat_stream import get_chat_manager
|
from src.chat.message_receive.chat_stream import get_chat_manager
|
||||||
from src.chat.utils.prompt import Prompt, global_prompt_manager
|
from src.chat.utils.prompt import Prompt, global_prompt_manager
|
||||||
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_by_timestamp_with_chat_inclusive
|
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_by_timestamp_with_chat_inclusive
|
||||||
@@ -65,7 +66,7 @@ class ChatMood:
|
|||||||
|
|
||||||
self.last_change_time: float = 0
|
self.last_change_time: float = 0
|
||||||
|
|
||||||
async def update_mood_by_message(self, message: MessageRecv, interested_rate: float):
|
async def update_mood_by_message(self, message: MessageRecv | DatabaseMessages, interested_rate: float):
|
||||||
# 如果当前聊天处于失眠状态,则锁定情绪,不允许更新
|
# 如果当前聊天处于失眠状态,则锁定情绪,不允许更新
|
||||||
if self.chat_id in mood_manager.insomnia_chats:
|
if self.chat_id in mood_manager.insomnia_chats:
|
||||||
logger.debug(f"{self.log_prefix} 处于失眠状态,情绪已锁定,跳过更新。")
|
logger.debug(f"{self.log_prefix} 处于失眠状态,情绪已锁定,跳过更新。")
|
||||||
@@ -73,7 +74,13 @@ class ChatMood:
|
|||||||
|
|
||||||
self.regression_count = 0
|
self.regression_count = 0
|
||||||
|
|
||||||
during_last_time = message.message_info.time - self.last_change_time # type: ignore
|
# 处理不同类型的消息对象
|
||||||
|
if isinstance(message, MessageRecv):
|
||||||
|
message_time = message.message_info.time
|
||||||
|
else: # DatabaseMessages
|
||||||
|
message_time = message.time
|
||||||
|
|
||||||
|
during_last_time = message_time - self.last_change_time
|
||||||
|
|
||||||
base_probability = 0.05
|
base_probability = 0.05
|
||||||
time_multiplier = 4 * (1 - math.exp(-0.01 * during_last_time))
|
time_multiplier = 4 * (1 - math.exp(-0.01 * during_last_time))
|
||||||
@@ -96,8 +103,6 @@ class ChatMood:
|
|||||||
logger.debug(
|
logger.debug(
|
||||||
f"{self.log_prefix} 更新情绪状态,感兴趣度: {interested_rate:.2f}, 更新概率: {update_probability:.2f}"
|
f"{self.log_prefix} 更新情绪状态,感兴趣度: {interested_rate:.2f}, 更新概率: {update_probability:.2f}"
|
||||||
)
|
)
|
||||||
|
|
||||||
message_time: float = message.message_info.time # type: ignore
|
|
||||||
message_list_before_now = get_raw_msg_by_timestamp_with_chat_inclusive(
|
message_list_before_now = get_raw_msg_by_timestamp_with_chat_inclusive(
|
||||||
chat_id=self.chat_id,
|
chat_id=self.chat_id,
|
||||||
timestamp_start=self.last_change_time,
|
timestamp_start=self.last_change_time,
|
||||||
|
|||||||
@@ -139,6 +139,24 @@ class AffinityChatter(BaseChatter):
|
|||||||
"""
|
"""
|
||||||
return self.planner.get_relationship_stats()
|
return self.planner.get_relationship_stats()
|
||||||
|
|
||||||
|
def get_current_mood_state(self) -> str:
|
||||||
|
"""
|
||||||
|
获取当前聊天的情绪状态
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
当前情绪状态描述
|
||||||
|
"""
|
||||||
|
return self.planner.get_current_mood_state()
|
||||||
|
|
||||||
|
def get_mood_stats(self) -> Dict[str, Any]:
|
||||||
|
"""
|
||||||
|
获取情绪状态统计信息
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
情绪状态统计信息字典
|
||||||
|
"""
|
||||||
|
return self.planner.get_mood_stats()
|
||||||
|
|
||||||
def get_user_relationship(self, user_id: str) -> float:
|
def get_user_relationship(self, user_id: str) -> float:
|
||||||
"""
|
"""
|
||||||
获取用户关系分
|
获取用户关系分
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from src.plugins.built_in.affinity_flow_chatter.plan_filter import ChatterPlanFi
|
|||||||
from src.plugins.built_in.affinity_flow_chatter.plan_generator import ChatterPlanGenerator
|
from src.plugins.built_in.affinity_flow_chatter.plan_generator import ChatterPlanGenerator
|
||||||
from src.plugins.built_in.affinity_flow_chatter.interest_scoring import ChatterInterestScoringSystem
|
from src.plugins.built_in.affinity_flow_chatter.interest_scoring import ChatterInterestScoringSystem
|
||||||
from src.plugins.built_in.affinity_flow_chatter.relationship_tracker import ChatterRelationshipTracker
|
from src.plugins.built_in.affinity_flow_chatter.relationship_tracker import ChatterRelationshipTracker
|
||||||
|
from src.mood.mood_manager import mood_manager
|
||||||
|
|
||||||
|
|
||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
@@ -117,6 +118,12 @@ class ChatterActionPlanner:
|
|||||||
logger.info(f"兴趣度不足 ({latest_score.total_score:.2f}),移除回复")
|
logger.info(f"兴趣度不足 ({latest_score.total_score:.2f}),移除回复")
|
||||||
reply_not_available = True
|
reply_not_available = True
|
||||||
|
|
||||||
|
# 更新情绪状态 - 使用最新消息的兴趣度
|
||||||
|
if latest_message and score > 0:
|
||||||
|
chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id)
|
||||||
|
await chat_mood.update_mood_by_message(latest_message, score)
|
||||||
|
logger.debug(f"已更新聊天 {self.chat_id} 的情绪状态,兴趣度: {score:.3f}")
|
||||||
|
|
||||||
# base_threshold = self.interest_scoring.reply_threshold
|
# base_threshold = self.interest_scoring.reply_threshold
|
||||||
# 检查兴趣度是否达到非回复动作阈值
|
# 检查兴趣度是否达到非回复动作阈值
|
||||||
non_reply_action_interest_threshold = global_config.affinity_flow.non_reply_action_interest_threshold
|
non_reply_action_interest_threshold = global_config.affinity_flow.non_reply_action_interest_threshold
|
||||||
@@ -233,5 +240,20 @@ class ChatterActionPlanner:
|
|||||||
"max_tracking_users": self.relationship_tracker.max_tracking_users,
|
"max_tracking_users": self.relationship_tracker.max_tracking_users,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_current_mood_state(self) -> str:
|
||||||
|
"""获取当前聊天的情绪状态"""
|
||||||
|
chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id)
|
||||||
|
return chat_mood.mood_state
|
||||||
|
|
||||||
|
def get_mood_stats(self) -> Dict[str, any]:
|
||||||
|
"""获取情绪状态统计"""
|
||||||
|
chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id)
|
||||||
|
return {
|
||||||
|
"current_mood": chat_mood.mood_state,
|
||||||
|
"is_angry_from_wakeup": chat_mood.is_angry_from_wakeup,
|
||||||
|
"regression_count": chat_mood.regression_count,
|
||||||
|
"last_change_time": chat_mood.last_change_time,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# 全局兴趣度评分系统实例 - 在 individuality 模块中创建
|
# 全局兴趣度评分系统实例 - 在 individuality 模块中创建
|
||||||
|
|||||||
Reference in New Issue
Block a user