From 62e00d4dc09efbcb075c4fe7e62b00a4a21fe83d Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Wed, 13 Aug 2025 16:10:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A1=A8=E6=83=85=E5=8C=85?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=88=A0=E9=99=A4=E8=AE=B0=E5=BD=95=E5=90=8E?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=AD=A3=E7=A1=AE=E7=9A=84=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E3=80=82=E5=90=8C=E6=97=B6=EF=BC=8C=E6=9B=B4=E6=96=B0=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E6=8F=90=E7=A4=BA=E6=A8=A1=E6=9D=BF=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=97=A5=E7=A8=8B=E5=92=8C=E5=BF=83=E6=83=85=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E4=BB=A5=E6=8F=90=E5=8D=87=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E4=BA=92=E5=8A=A8=E7=9A=84=E8=87=AA=E7=84=B6=E6=80=A7=E5=92=8C?= =?UTF-8?q?=E8=B6=A3=E5=91=B3=E6=80=A7=EF=BC=88=E5=B8=8C=E6=9C=9B=E8=83=BD?= =?UTF-8?q?=E6=9B=B4=E5=A5=BD=E7=9A=84=E5=9B=9E=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/emoji_system/emoji_manager.py | 4 ++- src/chat/planner_actions/planner.py | 42 +++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/chat/emoji_system/emoji_manager.py b/src/chat/emoji_system/emoji_manager.py index df82b7205..8915b06cf 100644 --- a/src/chat/emoji_system/emoji_manager.py +++ b/src/chat/emoji_system/emoji_manager.py @@ -210,7 +210,9 @@ class MaiEmoji: logger.warning(f"[删除] 数据库中未找到哈希值为 {self.hash} 的表情包记录。") result = 0 # Indicate no DB record was deleted else: - result = will_delete_emoji.delete_instance() # Returns the number of rows deleted. + session.delete(will_delete_emoji) + session.commit() + result = 1 # Successfully deleted one record except Exception as e: logger.error(f"[错误] 删除数据库记录时出错: {str(e)}") result = 0 diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index 163b75ef8..e3a1d5eb1 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -21,18 +21,35 @@ from src.chat.planner_actions.action_manager import ActionManager from src.chat.message_receive.chat_stream import get_chat_manager from src.plugin_system.base.component_types import ActionInfo, ChatMode, ComponentType from src.plugin_system.core.component_registry import component_registry - +from src.common.schedule_manager import schedule_manager +from src.mood.mood_manager import mood_manager logger = get_logger("planner") install(extra_lines=3) def init_prompt(): - Prompt( - """ + Prompt( +""" +{schedule_block} +{mood_block} {time_block} {identity_block} -你现在需要根据聊天内容,选择的合适的action来参与聊天。 +你的核心任务是积极地在对话中寻找参与机会,像一个真正的群成员一样,自然地融入并活跃气氛。你的目标是让对话更有趣、更顺畅。 + +判断标准如下(重要性依次递减): +1. **直接互动**:当有人直接 @你、回复你、或明确提到你的名字 {bot_name} 时,你应该优先回应。 +2. **扩展对话**: + * 当讨论的话题与你的知识、身份或兴趣相关时,积极分享你的见解。 + * 当用户的言论中透露出求助、困惑、好奇或强烈情绪时,主动提供帮助、解答或表达关心。 + * 当对话出现模糊的观点或不明确的信息时,可以主动提问,寻求澄清。 +3. **主动引导**: + * 如果对话陷入长时间的沉默或冷场,你可以主动开启一个你认为大家可能感兴趣的新话题。 + * 可以适时分享一些有趣的事实、笑话或与当前氛围相符的内容。 +4. **发言边界与时机 (Speaking Boundaries and Timing)**: + * **保持礼貌距离**:避免在短时间内连续发言,给他人留出空间。如果对话节奏过快或话题非常私人,选择观察而非强行加入。 + +根据以上判断,选择最合适的action来参与聊天。 {chat_context_description},以下是具体的聊天内容 {chat_content_block} @@ -346,6 +363,18 @@ class ActionPlanner: action_options_block = "" + # 先定义 schedule_block 和 mood_block,这些在主模板中需要使用 + schedule_block = "" + if global_config.schedule.enable: + current_activity = schedule_manager.get_current_activity() + if current_activity: + schedule_block = f"你当前正在:{current_activity}。" + + mood_block = "" + if global_config.mood.enable_mood: + chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id) + mood_block = f"你现在的心情是:{chat_mood.mood_state}" + for using_actions_name, using_actions_info in current_available_actions.items(): if using_actions_info.action_parameters: param_text = "\n" @@ -362,6 +391,8 @@ class ActionPlanner: using_action_prompt = await global_prompt_manager.get_prompt_async("action_prompt") using_action_prompt = using_action_prompt.format( + schedule_block=schedule_block, + mood_block=mood_block, action_name=using_actions_name, action_description=using_actions_info.description, action_parameters=param_text, @@ -384,6 +415,8 @@ class ActionPlanner: planner_prompt_template = await global_prompt_manager.get_prompt_async("planner_prompt") prompt = planner_prompt_template.format( + schedule_block=schedule_block, + mood_block=mood_block, time_block=time_block, chat_context_description=chat_context_description, chat_content_block=chat_content_block, @@ -393,6 +426,7 @@ class ActionPlanner: action_options_text=action_options_block, moderation_prompt=moderation_prompt_block, identity_block=identity_block, + bot_name=bot_name, ) return prompt, message_id_list except Exception as e: