From 0810682c3fb30c7105f0be219bde771969433361 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Tue, 2 Sep 2025 17:24:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=EF=BC=9A1515cef=EF=BC=88fix?= =?UTF-8?q?=EF=BC=9A=E5=BF=85=E8=A6=81=E6=80=A7=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/chat_loop/heartFC_chat.py | 11 +++++++---- src/chat/emoji_system/emoji_manager.py | 9 ++++----- src/chat/planner_actions/planner.py | 12 +++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/chat/chat_loop/heartFC_chat.py b/src/chat/chat_loop/heartFC_chat.py index 3e21537e4..7d2671b57 100644 --- a/src/chat/chat_loop/heartFC_chat.py +++ b/src/chat/chat_loop/heartFC_chat.py @@ -245,8 +245,9 @@ class HeartFChatting: # 统一使用 _should_process_messages 判断是否应该处理 should_process,interest_value = await self._should_process_messages(recent_messages if has_new_messages else None) if should_process: - earliest_message_data = recent_messages[0] - self.last_read_time = earliest_message_data.get("time") + #earliest_message_data = recent_messages[0] + #self.last_read_time = earliest_message_data.get("time") + self.context.last_read_time = time.time() await self.cycle_processor.observe(interest_value = interest_value) else: # Normal模式:消息数量不足,等待 @@ -430,6 +431,8 @@ class HeartFChatting: logger.info( f"{self.context.log_prefix} 累计消息数量达到{new_message_count}条(>{modified_exit_count_threshold}),结束等待" ) + logger.info(self.context.last_read_time) + logger.info(new_message) return True,total_interest/new_message_count # 检查累计兴趣值 @@ -452,9 +455,9 @@ class HeartFChatting: ) return True,accumulated_interest/new_message_count # 每10秒输出一次等待状态 - if int(time.time() - self.last_read_time) > 0 and int(time.time() - self.last_read_time) % 10 == 0: + if int(time.time() - self.context.last_read_time) > 0 and int(time.time() - self.context.last_read_time) % 10 == 0: logger.info( - f"{self.context.log_prefix} 已等待{time.time() - self.last_read_time:.0f}秒,累计{new_message_count}条消息,继续等待..." + f"{self.context.log_prefix} 已等待{time.time() - self.context.last_read_time:.0f}秒,累计{new_message_count}条消息,继续等待..." ) await asyncio.sleep(0.5) diff --git a/src/chat/emoji_system/emoji_manager.py b/src/chat/emoji_system/emoji_manager.py index a3402bfa8..80b2c409b 100644 --- a/src/chat/emoji_system/emoji_manager.py +++ b/src/chat/emoji_system/emoji_manager.py @@ -739,13 +739,12 @@ class EmojiManager: emoji = await self.get_emoji_from_manager(emoji_hash) if emoji and emoji.emotion: logger.info(f"[缓存命中] 从内存获取表情包描述: {emoji.emotion}...") - return ",".join(emoji.emotion) + return emoji.emotion # 如果内存中没有,从数据库查找 - self._ensure_db() try: - emoji_record = Emoji.get_or_none(Emoji.emoji_hash == emoji_hash) - if emoji_record and emoji_record.emotion: + emoji_record = await self.get_emoji_from_db(emoji_hash) + if emoji_record and emoji_record[0].emotion: logger.info(f"[缓存命中] 从数据库获取表情包描述: {emoji_record.emotion[:50]}...") return emoji_record.emotion except Exception as e: @@ -756,7 +755,7 @@ class EmojiManager: except Exception as e: logger.error(f"获取表情包描述失败 (Hash: {emoji_hash}): {str(e)}") return None - + async def get_emoji_description_by_hash(self, emoji_hash: str) -> Optional[str]: """根据哈希值获取已注册表情包的描述 diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index f23bebede..e09818527 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -39,7 +39,7 @@ def init_prompt(): {identity_block} {custom_prompt_block} -{chat_context_description},以下是具体的聊天内容 +{chat_context_description},以下是具体的聊天内容,其中[mxxx]是消息id。 {chat_content_block} {moderation_prompt} @@ -202,7 +202,6 @@ class ActionPlanner: action_description=action_info.description, action_parameters=param_text, action_require=require_text, - target_prompt=target_prompt, ) return action_options_block @@ -220,6 +219,9 @@ class ActionPlanner: Returns: 找到的原始消息字典,如果未找到则返回None """ + # 检测message_id 是否为纯数字 + if message_id.isdigit(): + message_id = f"m{message_id}" for item in message_id_list: if item.get("id") == message_id: return item.get("message") @@ -481,8 +483,6 @@ class ActionPlanner: mentioned_bonus = "\n- 有人提到你,或者at你" if mode == ChatMode.FOCUS: - by_what = "聊天内容" - target_prompt = '\n "target_message_id":"触发action的消息id"' no_action_block = f"""重要说明: - 'no_reply' 表示只进行不进行回复,等待合适的回复时机 - 当你刚刚发送了消息,没有人回复时,选择no_reply @@ -499,8 +499,6 @@ class ActionPlanner: }} """ else: # NORMAL Mode - by_what = "聊天内容和用户的最新消息" - target_prompt = "" no_action_block = f"""重要说明: - 'reply' 表示只进行普通聊天回复,不执行任何额外动作 - 其他action表示在普通回复的基础上,执行相应的额外动作 @@ -527,7 +525,7 @@ class ActionPlanner: chat_context_description = f"你正在和 {chat_target_name} 私聊" action_options_block = await self._build_action_options( - current_available_actions, mode, target_prompt + current_available_actions, mode ) moderation_prompt_block = "请不要输出违法违规内容,不要输出色情,暴力,政治相关内容,如有敏感内容,请规避。"