fix:私聊爆炸

This commit is contained in:
SengokuCola
2025-07-03 18:15:21 +08:00
parent 34bbb24b10
commit 46ad6fd808
2 changed files with 12 additions and 9 deletions

View File

@@ -617,10 +617,10 @@ class DefaultReplyer:
chat_target_name = ( chat_target_name = (
self.chat_target_info.get("person_name") or self.chat_target_info.get("user_nickname") or "对方" self.chat_target_info.get("person_name") or self.chat_target_info.get("user_nickname") or "对方"
) )
chat_target_1 = await global_prompt_manager.get_prompt_async( chat_target_1 = await global_prompt_manager.format_prompt(
"chat_target_private1", sender_name=chat_target_name "chat_target_private1", sender_name=chat_target_name
) )
chat_target_2 = await global_prompt_manager.get_prompt_async( chat_target_2 = await global_prompt_manager.format_prompt(
"chat_target_private2", sender_name=chat_target_name "chat_target_private2", sender_name=chat_target_name
) )
@@ -747,10 +747,10 @@ class DefaultReplyer:
chat_target_name = ( chat_target_name = (
self.chat_target_info.get("person_name") or self.chat_target_info.get("user_nickname") or "对方" self.chat_target_info.get("person_name") or self.chat_target_info.get("user_nickname") or "对方"
) )
chat_target_1 = await global_prompt_manager.get_prompt_async( chat_target_1 = await global_prompt_manager.format_prompt(
"chat_target_private1", sender_name=chat_target_name "chat_target_private1", sender_name=chat_target_name
) )
chat_target_2 = await global_prompt_manager.get_prompt_async( chat_target_2 = await global_prompt_manager.format_prompt(
"chat_target_private2", sender_name=chat_target_name "chat_target_private2", sender_name=chat_target_name
) )

View File

@@ -165,6 +165,9 @@ class S4UChat:
self._is_replying = False self._is_replying = False
self.gpt = S4UStreamGenerator() self.gpt = S4UStreamGenerator()
self.interest_dict: Dict[str, float] = {} # 用户兴趣分
self.at_bot_priority_bonus = 100.0 # @机器人的优先级加成
self.normal_queue_max_size = 50 # 普通队列最大容量
logger.info(f"[{self.stream_name}] S4UChat with two-queue system initialized.") logger.info(f"[{self.stream_name}] S4UChat with two-queue system initialized.")
def _is_vip(self, message: MessageRecv) -> bool: def _is_vip(self, message: MessageRecv) -> bool:
@@ -196,7 +199,7 @@ class S4UChat:
async def add_message(self, message: MessageRecv) -> None: async def add_message(self, message: MessageRecv) -> None:
"""根据VIP状态和中断逻辑将消息放入相应队列。""" """根据VIP状态和中断逻辑将消息放入相应队列。"""
is_vip = self._is_vip(message) is_vip = self._is_vip(message)
self._get_message_priority(message) new_priority_score = self._calculate_base_priority_score(message)
should_interrupt = False should_interrupt = False
if self._current_generation_task and not self._current_generation_task.done(): if self._current_generation_task and not self._current_generation_task.done():
@@ -218,11 +221,11 @@ class S4UChat:
new_sender_id = message.message_info.user_info.user_id new_sender_id = message.message_info.user_info.user_id
current_sender_id = current_msg.message_info.user_info.user_id current_sender_id = current_msg.message_info.user_info.user_id
# 新消息优先级更高 # 新消息优先级更高
if new_priority_score > current_priority_score: if new_priority_score > current_priority:
should_interrupt = True should_interrupt = True
logger.info(f"[{self.stream_name}] New normal message has higher priority, interrupting.") logger.info(f"[{self.stream_name}] New normal message has higher priority, interrupting.")
# 同用户,新消息的优先级不能更低 # 同用户,新消息的优先级不能更低
elif new_sender_id == current_sender_id and new_priority_score >= current_priority_score: elif new_sender_id == current_sender_id and new_priority_score >= current_priority:
should_interrupt = True should_interrupt = True
logger.info(f"[{self.stream_name}] Same user sent new message, interrupting.") logger.info(f"[{self.stream_name}] Same user sent new message, interrupting.")