From 1515cef487ba35ecc16e2a3eba2b99c74d6deef2 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 11 Aug 2025 01:08:42 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=BF=85=E8=A6=81=E6=80=A7?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/chat_loop/heartFC_chat.py | 7 ++++-- src/chat/emoji_system/emoji_manager.py | 32 ++++++++++++++++++++++++++ src/chat/planner_actions/planner.py | 13 +++-------- src/chat/utils/utils_image.py | 9 ++++---- 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/chat/chat_loop/heartFC_chat.py b/src/chat/chat_loop/heartFC_chat.py index 5b1aafc7f..c39e593ed 100644 --- a/src/chat/chat_loop/heartFC_chat.py +++ b/src/chat/chat_loop/heartFC_chat.py @@ -267,6 +267,8 @@ class HeartFChatting: logger.info( f"{self.log_prefix} 累计消息数量达到{new_message_count}条(>{modified_exit_count_threshold}),结束等待" ) + logger.info(self.last_read_time) + logger.info(new_message) return True,total_interest/new_message_count # 检查累计兴趣值 @@ -317,8 +319,9 @@ class HeartFChatting: should_process,interest_value = await self._should_process_messages(recent_messages_dict) if should_process: - earliest_message_data = recent_messages_dict[0] - self.last_read_time = earliest_message_data.get("time") + # earliest_message_data = recent_messages_dict[0] + # self.last_read_time = earliest_message_data.get("time") + self.last_read_time = time.time() await self._observe(interest_value = interest_value) else: diff --git a/src/chat/emoji_system/emoji_manager.py b/src/chat/emoji_system/emoji_manager.py index 6d50d890e..00f93421a 100644 --- a/src/chat/emoji_system/emoji_manager.py +++ b/src/chat/emoji_system/emoji_manager.py @@ -708,6 +708,38 @@ class EmojiManager: if not emoji.is_deleted and emoji.hash == emoji_hash: return emoji return None # 如果循环结束还没找到,则返回 None + + async def get_emoji_tag_by_hash(self, emoji_hash: str) -> Optional[str]: + """根据哈希值获取已注册表情包的描述 + + Args: + emoji_hash: 表情包的哈希值 + + Returns: + Optional[str]: 表情包描述,如果未找到则返回None + """ + try: + # 先从内存中查找 + emoji = await self.get_emoji_from_manager(emoji_hash) + if emoji and emoji.emotion: + logger.info(f"[缓存命中] 从内存获取表情包描述: {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: + logger.info(f"[缓存命中] 从数据库获取表情包描述: {emoji_record.emotion[:50]}...") + return emoji_record.emotion + except Exception as e: + logger.error(f"从数据库查询表情包描述时出错: {e}") + + return None + + 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 82584f7fa..a70395a44 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -38,7 +38,7 @@ def init_prompt(): {moderation_prompt} -现在请你根据{by_what}选择合适的action和触发action的消息: +现在请你根据聊天内容和用户的最新消息选择合适的action和触发action的消息: {actions_before_now_block} {no_action_block} @@ -57,7 +57,8 @@ def init_prompt(): 动作描述:{action_description} {action_require} {{ - "action": "{action_name}",{action_parameters}{target_prompt} + "action": "{action_name}",{action_parameters}, + "target_message_id":"触发action的消息id", "reason":"触发action的原因" }} """, @@ -310,10 +311,6 @@ class ActionPlanner: if mode == ChatMode.FOCUS: - - - by_what = "聊天内容" - target_prompt = '\n "target_message_id":"触发action的消息id"' no_action_block = f"""重要说明: - 'no_reply' 表示只进行不进行回复,等待合适的回复时机 - 当你刚刚发送了消息,没有人回复时,选择no_reply @@ -333,8 +330,6 @@ class ActionPlanner: """ else: - by_what = "聊天内容和用户的最新消息" - target_prompt = "" no_action_block = f"""重要说明: - 'reply' 表示只进行普通聊天回复,不执行任何额外动作 - 其他action表示在普通回复的基础上,执行相应的额外动作 @@ -381,7 +376,6 @@ class ActionPlanner: action_description=using_actions_info.description, action_parameters=param_text, action_require=require_text, - target_prompt=target_prompt, ) action_options_block += using_action_prompt @@ -401,7 +395,6 @@ class ActionPlanner: planner_prompt_template = await global_prompt_manager.get_prompt_async("planner_prompt") prompt = planner_prompt_template.format( time_block=time_block, - by_what=by_what, chat_context_description=chat_context_description, chat_content_block=chat_content_block, actions_before_now_block=actions_before_now_block, diff --git a/src/chat/utils/utils_image.py b/src/chat/utils/utils_image.py index b03df6ad1..58df290d4 100644 --- a/src/chat/utils/utils_image.py +++ b/src/chat/utils/utils_image.py @@ -120,10 +120,11 @@ class ImageManager: try: from src.chat.emoji_system.emoji_manager import get_emoji_manager emoji_manager = get_emoji_manager() - cached_emoji_description = await emoji_manager.get_emoji_description_by_hash(image_hash) - if cached_emoji_description: - logger.info(f"[缓存命中] 使用已注册表情包描述: {cached_emoji_description[:50]}...") - return cached_emoji_description + tags = await emoji_manager.get_emoji_tag_by_hash(image_hash) + if tags: + tag_str = ",".join(tags) + logger.info(f"[缓存命中] 使用已注册表情包描述: {tag_str}...") + return f"[表情包:{tag_str}]" except Exception as e: logger.debug(f"查询EmojiManager时出错: {e}")