From 236451d246c52f6cd85375376011f50841c1108a Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sat, 26 Apr 2025 22:55:29 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=B2=A1=E6=9C=89=E5=8F=8A=E6=97=B6=E8=BD=AC=E7=A7=BB?= =?UTF-8?q?=EF=BC=8C=E5=92=8C=E6=A6=82=E7=8E=87=E5=8F=AF=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=E8=B4=9F=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/heart_flow/mai_state_manager.py | 16 ++++++++-------- src/heart_flow/sub_heartflow.py | 6 +++--- src/heart_flow/subheartflow_manager.py | 4 ++++ src/plugins/heartFC_chat/heartFC_chat.py | 2 +- src/plugins/heartFC_chat/normal_chat.py | 20 ++++++++++++-------- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/heart_flow/mai_state_manager.py b/src/heart_flow/mai_state_manager.py index 64fd40489..ee5cd95ee 100644 --- a/src/heart_flow/mai_state_manager.py +++ b/src/heart_flow/mai_state_manager.py @@ -37,13 +37,13 @@ class MaiState(enum.Enum): return 1000 if self == MaiState.OFFLINE: - return 0 + return 10 elif self == MaiState.PEEKING: - return 2 + return 30 elif self == MaiState.NORMAL_CHAT: - return 3 + return 40 elif self == MaiState.FOCUSED_CHAT: - return 2 + return 30 def get_focused_chat_max_num(self): # 调试用 @@ -51,13 +51,13 @@ class MaiState(enum.Enum): return 1000 if self == MaiState.OFFLINE: - return 0 + return 10 elif self == MaiState.PEEKING: - return 1 + return 20 elif self == MaiState.NORMAL_CHAT: - return 1 + return 30 elif self == MaiState.FOCUSED_CHAT: - return 3 + return 40 class MaiStateInfo: diff --git a/src/heart_flow/sub_heartflow.py b/src/heart_flow/sub_heartflow.py index ead07f53c..6ea60ea1f 100644 --- a/src/heart_flow/sub_heartflow.py +++ b/src/heart_flow/sub_heartflow.py @@ -151,8 +151,8 @@ class InterestChatting: if self.above_threshold: self.start_hfc_probability += 0.1 else: - if self.start_hfc_probability != 0: - self.start_hfc_probability -= 0.1 + if self.start_hfc_probability > 0: + self.start_hfc_probability = max(0, self.start_hfc_probability - 0.1) async def increase_interest(self, value: float): self.interest_level += value @@ -170,7 +170,7 @@ class InterestChatting: return { "interest_level": round(interest, 2), "start_hfc_probability": round(self.start_hfc_probability, 4), - "is_above_threshold": self.is_above_threshold, + "above_threshold": self.above_threshold, } async def should_evaluate_reply(self) -> bool: diff --git a/src/heart_flow/subheartflow_manager.py b/src/heart_flow/subheartflow_manager.py index 6d22494d4..35efbc550 100644 --- a/src/heart_flow/subheartflow_manager.py +++ b/src/heart_flow/subheartflow_manager.py @@ -267,6 +267,7 @@ class SubHeartflowManager: # 使用 self.mai_state_info 获取当前状态和限制 current_state = self.mai_state_info.get_current_state() focused_limit = current_state.get_focused_chat_max_num() + logger.debug(f"{log_prefix} 当前状态 ({current_state.value}) 开始尝试提升到FOCUSED状态") if int(time.time()) % 20 == 0: # 每20秒输出一次 @@ -285,6 +286,8 @@ class SubHeartflowManager: flow_id = sub_hf.subheartflow_id stream_name = chat_manager.get_stream_name(flow_id) or flow_id + logger.debug(f"{log_prefix} 检查子心流: {stream_name},现在状态: {sub_hf.chat_state.chat_status.value}") + # 跳过非CHAT状态或已经是FOCUSED状态的子心流 if sub_hf.chat_state.chat_status == ChatState.FOCUSED: continue @@ -296,6 +299,7 @@ class SubHeartflowManager: continue # 检查是否满足提升概率 + logger.debug(f"{log_prefix} 检查子心流: {stream_name},现在概率: {sub_hf.interest_chatting.start_hfc_probability}") if random.random() >= sub_hf.interest_chatting.start_hfc_probability: continue diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index 8f376b37f..4f96353fd 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -154,7 +154,7 @@ class HeartFChatting: 其生命周期现在由其关联的 SubHeartflow 的 FOCUSED 状态控制。 """ - CONSECUTIVE_NO_REPLY_THRESHOLD = 4 # 连续不回复的阈值 + CONSECUTIVE_NO_REPLY_THRESHOLD = 1 # 连续不回复的阈值 def __init__( self, diff --git a/src/plugins/heartFC_chat/normal_chat.py b/src/plugins/heartFC_chat/normal_chat.py index 912da3520..b54b28187 100644 --- a/src/plugins/heartFC_chat/normal_chat.py +++ b/src/plugins/heartFC_chat/normal_chat.py @@ -409,19 +409,23 @@ class NormalChat: async def start_chat(self): """为此 NormalChat 实例关联的 ChatStream 启动聊天任务(如果尚未运行), - 并在启动前处理一次初始的高兴趣消息。""" + 并在后台处理一次初始的高兴趣消息。""" # 文言文注释示例:启聊之始,若有遗珠,当于暗处拂拭,勿碍正途。 if self._chat_task is None or self._chat_task.done(): - # --- 修改:调用新的私有方法处理初始消息 --- - await self._process_initial_interest_messages() + # --- 修改:使用 create_task 启动初始消息处理 --- + logger.info(f"[{self.stream_name}] 开始后台处理初始兴趣消息...") + # 创建一个任务来处理初始消息,不阻塞当前流程 + initial_process_task = asyncio.create_task(self._process_initial_interest_messages()) + # 可以考虑给这个任务也添加完成回调来记录日志或处理错误 + # initial_process_task.add_done_callback(...) # --- 修改结束 --- - # 启动后台轮询任务 + # 启动后台轮询任务 (这部分不变) logger.info(f"[{self.stream_name}] 启动后台兴趣消息轮询任务...") - task = asyncio.create_task(self._reply_interested_message()) - task.add_done_callback(lambda t: self._handle_task_completion(t)) # 回调现在是实例方法 - self._chat_task = task + polling_task = asyncio.create_task(self._reply_interested_message()) # 注意变量名区分 + polling_task.add_done_callback(lambda t: self._handle_task_completion(t)) + self._chat_task = polling_task # self._chat_task 仍然指向主要的轮询任务 else: - logger.info(f"[{self.stream_name}] 聊天任务已在运行中。") + logger.info(f"[{self.stream_name}] 聊天轮询任务已在运行中。") def _handle_task_completion(self, task: asyncio.Task): """任务完成回调处理"""