From 1ea5d28d73b334481d55a6e404d6401aa90892d2 Mon Sep 17 00:00:00 2001 From: UnCLAS-Prommer Date: Mon, 7 Jul 2025 16:57:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E6=96=B0=E7=89=88?= =?UTF-8?q?=E7=9A=84notify=E7=82=B8=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/bot.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 0bc5bec58..0e94991b6 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -166,9 +166,10 @@ class ChatBot: message_data["message_info"]["group_info"]["group_id"] = str( message_data["message_info"]["group_info"]["group_id"] ) - message_data["message_info"]["user_info"]["user_id"] = str( - message_data["message_info"]["user_info"]["user_id"] - ) + if message_data["message_info"].get("user_info") is not None: + message_data["message_info"]["user_info"]["user_id"] = str( + message_data["message_info"]["user_info"]["user_id"] + ) # print(message_data) # logger.debug(str(message_data)) message = MessageRecv(message_data) From 26e14bd6b726dcd4ace1c2ccc7d16641b82097d5 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 7 Jul 2025 20:01:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?better=EF=BC=9A=E4=BC=98=E5=8C=96log?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=8C=E4=B8=8D=E6=98=BE=E7=A4=BA=E6=9D=82?= =?UTF-8?q?=E4=B9=B1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/heart_flow/heartflow.py | 2 +- src/chat/memory_system/memory_activator.py | 3 ++- src/chat/normal_chat/normal_chat.py | 30 ++++++++++++++-------- src/chat/planner_actions/action_manager.py | 2 +- src/chat/planner_actions/planner.py | 5 ++++ src/chat/replyer/default_generator.py | 10 +++++--- src/common/logger.py | 5 +--- src/person_info/relationship_builder.py | 10 ++++---- src/plugins/built_in/core_actions/emoji.py | 4 +-- 9 files changed, 42 insertions(+), 29 deletions(-) diff --git a/src/chat/heart_flow/heartflow.py b/src/chat/heart_flow/heartflow.py index f0e01e838..ca6e8be7b 100644 --- a/src/chat/heart_flow/heartflow.py +++ b/src/chat/heart_flow/heartflow.py @@ -30,7 +30,7 @@ class Heartflow: # 注册子心流 self.subheartflows[subheartflow_id] = new_subflow heartflow_name = get_chat_manager().get_stream_name(subheartflow_id) or subheartflow_id - logger.info(f"[{heartflow_name}] 开始接收消息") + logger.debug(f"[{heartflow_name}] 开始接收消息") return new_subflow except Exception as e: diff --git a/src/chat/memory_system/memory_activator.py b/src/chat/memory_system/memory_activator.py index b9a6248ff..560fe01a6 100644 --- a/src/chat/memory_system/memory_activator.py +++ b/src/chat/memory_system/memory_activator.py @@ -119,7 +119,8 @@ class MemoryActivator: valid_keywords=keywords, max_memory_num=3, max_memory_length=2, max_depth=3 ) - logger.info(f"当前记忆关键词: {self.cached_keywords} 。获取到的记忆: {related_memory}") + logger.debug(f"当前记忆关键词: {self.cached_keywords} ") + logger.debug(f"获取到的记忆: {related_memory}") # 激活时,所有已有记忆的duration+1,达到3则移除 for m in self.running_memory[:]: diff --git a/src/chat/normal_chat/normal_chat.py b/src/chat/normal_chat/normal_chat.py index 569584eb5..314c2c1b5 100644 --- a/src/chat/normal_chat/normal_chat.py +++ b/src/chat/normal_chat/normal_chat.py @@ -469,9 +469,6 @@ class NormalChat: ) -> Optional[list]: """生成普通回复""" try: - logger.info( - f"NormalChat思考:{message.processed_plain_text[:30] + '...' if len(message.processed_plain_text) > 30 else message.processed_plain_text}" - ) person_info_manager = get_person_info_manager() person_id = person_info_manager.get_person_id( message.chat_stream.user_info.platform, message.chat_stream.user_info.user_id @@ -491,10 +488,6 @@ class NormalChat: logger.info(f"对 {message.processed_plain_text} 的回复生成失败") return None - content = " ".join([item[1] for item in reply_set if item[0] == "text"]) - if content: - logger.info(f"{global_config.bot.nickname}的备选回复是:{content}") - return reply_set except Exception as e: @@ -532,7 +525,19 @@ class NormalChat: reasoning = plan_result["action_result"]["reasoning"] is_parallel = plan_result["action_result"].get("is_parallel", False) - logger.info(f"[{self.stream_name}] Planner决策: {action_type}, 理由: {reasoning}, 并行执行: {is_parallel}") + if action_type == "no_action": + logger.info( + f"[{self.stream_name}] {global_config.bot.nickname} 决定进行回复" + ) + elif is_parallel: + logger.info( + f"[{self.stream_name}] {global_config.bot.nickname} 决定进行回复, 同时执行{action_type}动作" + ) + else: + logger.info( + f"[{self.stream_name}] {global_config.bot.nickname} 决定执行{action_type}动作" + ) + self.action_type = action_type # 更新实例属性 self.is_parallel_action = is_parallel # 新增:保存并行执行标志 @@ -623,18 +628,21 @@ class NormalChat: elif plan_result: logger.debug(f"[{self.stream_name}] 额外动作处理完成: {self.action_type}") + if response_set: + content = " ".join([item[1] for item in response_set if item[0] == "text"]) + if not response_set or ( self.enable_planner and self.action_type not in ["no_action"] and not self.is_parallel_action ): if not response_set: - logger.info(f"[{self.stream_name}] 模型未生成回复内容") + logger.warning(f"[{self.stream_name}] 模型未生成回复内容") elif self.enable_planner and self.action_type not in ["no_action"] and not self.is_parallel_action: - logger.info(f"[{self.stream_name}] 模型选择其他动作(非并行动作)") + logger.info(f"[{self.stream_name}] {global_config.bot.nickname} 原本想要回复:{content},但选择执行{self.action_type},不发表回复") # 如果模型未生成回复,移除思考消息 await self._cleanup_thinking_message_by_id(thinking_id) return False - # logger.info(f"[{self.stream_name}] 回复内容: {response_set}") + logger.info(f"[{self.stream_name}] {global_config.bot.nickname} 决定的回复内容: {content}") if self._disabled: logger.info(f"[{self.stream_name}] 已停用,忽略 normal_response。") diff --git a/src/chat/planner_actions/action_manager.py b/src/chat/planner_actions/action_manager.py index c7f9bd6c1..3918831ca 100644 --- a/src/chat/planner_actions/action_manager.py +++ b/src/chat/planner_actions/action_manager.py @@ -96,7 +96,7 @@ class ActionManager: f"从插件系统加载Action组件: {action_name} (插件: {getattr(action_info, 'plugin_name', 'unknown')})" ) - logger.info(f"从插件系统加载了 {len(action_components)} 个Action组件") + logger.info(f"加载了 {len(action_components)} 个Action动作") except Exception as e: logger.error(f"从插件系统加载Action组件失败: {e}") diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index 135ea6bac..edd5d010d 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -124,6 +124,11 @@ class ActionPlanner: logger.info(f"{self.log_prefix}规划器原始响应: {llm_content}") if reasoning_content: logger.info(f"{self.log_prefix}规划器推理: {reasoning_content}") + else: + logger.debug(f"{self.log_prefix}规划器原始提示词: {prompt}") + logger.debug(f"{self.log_prefix}规划器原始响应: {llm_content}") + if reasoning_content: + logger.debug(f"{self.log_prefix}规划器推理: {reasoning_content}") except Exception as req_e: logger.error(f"{self.log_prefix}LLM 请求执行失败: {req_e}") diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index d9a7feda0..0b3c25f14 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -188,7 +188,7 @@ class DefaultReplyer: } for key, value in reply_data.items(): if not value: - logger.info(f"{self.log_prefix} 回复数据跳过{key},生成回复时将忽略。") + logger.debug(f"{self.log_prefix} 回复数据跳过{key},生成回复时将忽略。") # 3. 构建 Prompt with Timer("构建Prompt", {}): # 内部计时器,可选保留 @@ -218,11 +218,13 @@ class DefaultReplyer: ) if global_config.debug.show_prompt: - logger.info(f"{self.log_prefix}Prompt:\n{prompt}\n") + logger.info(f"{self.log_prefix}\n{prompt}\n") + else: + logger.debug(f"{self.log_prefix}\n{prompt}\n") content, (reasoning_content, model_name) = await express_model.generate_response_async(prompt) - logger.info(f"最终回复: {content}") + logger.debug(f"replyer生成内容: {content}") except Exception as llm_e: # 精简报错信息 @@ -331,7 +333,7 @@ class DefaultReplyer: ) if selected_expressions: - logger.info(f"{self.log_prefix} 使用处理器选中的{len(selected_expressions)}个表达方式") + logger.debug(f"{self.log_prefix} 使用处理器选中的{len(selected_expressions)}个表达方式") for expr in selected_expressions: if isinstance(expr, dict) and "situation" in expr and "style" in expr: expr_type = expr.get("type", "style") diff --git a/src/common/logger.py b/src/common/logger.py index 6be06d241..7202b993f 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -322,7 +322,7 @@ MODULE_COLORS = { "main": "\033[1;97m", # 亮白色+粗体 (主程序) "api": "\033[92m", # 亮绿色 "emoji": "\033[92m", # 亮绿色 - "chat": "\033[94m", # 亮蓝色 + "chat": "\033[92m", # 亮蓝色 "config": "\033[93m", # 亮黄色 "common": "\033[95m", # 亮紫色 "tools": "\033[96m", # 亮青色 @@ -346,10 +346,7 @@ MODULE_COLORS = { # 聊天相关模块 "normal_chat": "\033[38;5;81m", # 亮蓝绿色 "normal_chat_response": "\033[38;5;123m", # 青绿色 - "normal_chat_action_modifier": "\033[38;5;111m", # 蓝色 - "normal_chat_planner": "\033[38;5;75m", # 浅蓝色 "heartflow": "\033[38;5;213m", # 粉色 - "heartflow_utils": "\033[38;5;219m", # 浅粉色 "sub_heartflow": "\033[38;5;207m", # 粉紫色 "subheartflow_manager": "\033[38;5;201m", # 深粉色 "background_tasks": "\033[38;5;240m", # 灰色 diff --git a/src/person_info/relationship_builder.py b/src/person_info/relationship_builder.py index 11d7e5b47..7d56e0774 100644 --- a/src/person_info/relationship_builder.py +++ b/src/person_info/relationship_builder.py @@ -140,7 +140,7 @@ class RelationshipBuilder: segments.append(new_segment) person_name = get_person_info_manager().get_value_sync(person_id, "person_name") or person_id - logger.info( + logger.debug( f"{self.log_prefix} 眼熟用户 {person_name} 在 {time.strftime('%H:%M:%S', time.localtime(potential_start_time))} - {time.strftime('%H:%M:%S', time.localtime(message_time))} 之间有 {new_segment['message_count']} 条消息" ) self._save_cache() @@ -187,7 +187,7 @@ class RelationshipBuilder: segments.append(new_segment) person_info_manager = get_person_info_manager() person_name = person_info_manager.get_value_sync(person_id, "person_name") or person_id - logger.info(f"{self.log_prefix} 重新眼熟用户 {person_name} 创建新消息段(超过10条消息间隔): {new_segment}") + logger.debug(f"{self.log_prefix} 重新眼熟用户 {person_name} 创建新消息段(超过10条消息间隔): {new_segment}") self._save_cache() @@ -384,7 +384,7 @@ class RelationshipBuilder: total_message_count = self._get_total_message_count(person_id) if total_message_count >= 45: users_to_build_relationship.append(person_id) - logger.info( + logger.debug( f"{self.log_prefix} 用户 {person_id} 满足关系构建条件,总消息数:{total_message_count},消息段数:{len(segments)}" ) elif total_message_count > 0: @@ -422,7 +422,7 @@ class RelationshipBuilder: # 获取该段的消息(包含边界) segment_messages = get_raw_msg_by_timestamp_with_chat_inclusive(self.chat_id, start_time, end_time) - logger.info( + logger.debug( f"消息段 {i + 1}: {start_date} - {time.strftime('%Y-%m-%d %H:%M', time.localtime(end_time))}, 消息数: {len(segment_messages)}" ) @@ -450,7 +450,7 @@ class RelationshipBuilder: # 按时间排序所有消息(包括间隔标识) processed_messages.sort(key=lambda x: x["time"]) - logger.info(f"为 {person_id} 获取到总共 {len(processed_messages)} 条消息(包含间隔标识)用于印象更新") + logger.debug(f"为 {person_id} 获取到总共 {len(processed_messages)} 条消息(包含间隔标识)用于印象更新") relationship_manager = get_relationship_manager() # 调用原有的更新方法 diff --git a/src/plugins/built_in/core_actions/emoji.py b/src/plugins/built_in/core_actions/emoji.py index 128214427..cb429dd4c 100644 --- a/src/plugins/built_in/core_actions/emoji.py +++ b/src/plugins/built_in/core_actions/emoji.py @@ -11,7 +11,7 @@ from src.plugin_system.apis import emoji_api from src.plugins.built_in.core_actions.no_reply import NoReplyAction -logger = get_logger("core_actions") +logger = get_logger("emoji") class EmojiAction(BaseAction): @@ -65,7 +65,7 @@ class EmojiAction(BaseAction): return False, f"未找到匹配 '{description}' 的表情包" emoji_base64, emoji_description, matched_emotion = emoji_result - logger.info(f"{self.log_prefix} 找到表情包: {emoji_description}, 匹配情感: {matched_emotion}") + logger.info(f"{self.log_prefix} 找到表达{matched_emotion}的表情包") # 使用BaseAction的便捷方法发送表情包 success = await self.send_emoji(emoji_base64) From e64db2fbe5126ef18da6f0a15db3a68aa31bb5e2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 7 Jul 2025 12:01:49 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/normal_chat/normal_chat.py | 14 ++++++-------- src/person_info/relationship_builder.py | 4 +++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/chat/normal_chat/normal_chat.py b/src/chat/normal_chat/normal_chat.py index 314c2c1b5..46366e800 100644 --- a/src/chat/normal_chat/normal_chat.py +++ b/src/chat/normal_chat/normal_chat.py @@ -526,18 +526,14 @@ class NormalChat: is_parallel = plan_result["action_result"].get("is_parallel", False) if action_type == "no_action": - logger.info( - f"[{self.stream_name}] {global_config.bot.nickname} 决定进行回复" - ) + logger.info(f"[{self.stream_name}] {global_config.bot.nickname} 决定进行回复") elif is_parallel: logger.info( f"[{self.stream_name}] {global_config.bot.nickname} 决定进行回复, 同时执行{action_type}动作" ) else: - logger.info( - f"[{self.stream_name}] {global_config.bot.nickname} 决定执行{action_type}动作" - ) - + logger.info(f"[{self.stream_name}] {global_config.bot.nickname} 决定执行{action_type}动作") + self.action_type = action_type # 更新实例属性 self.is_parallel_action = is_parallel # 新增:保存并行执行标志 @@ -637,7 +633,9 @@ class NormalChat: if not response_set: logger.warning(f"[{self.stream_name}] 模型未生成回复内容") elif self.enable_planner and self.action_type not in ["no_action"] and not self.is_parallel_action: - logger.info(f"[{self.stream_name}] {global_config.bot.nickname} 原本想要回复:{content},但选择执行{self.action_type},不发表回复") + logger.info( + f"[{self.stream_name}] {global_config.bot.nickname} 原本想要回复:{content},但选择执行{self.action_type},不发表回复" + ) # 如果模型未生成回复,移除思考消息 await self._cleanup_thinking_message_by_id(thinking_id) return False diff --git a/src/person_info/relationship_builder.py b/src/person_info/relationship_builder.py index 7d56e0774..33ed61c73 100644 --- a/src/person_info/relationship_builder.py +++ b/src/person_info/relationship_builder.py @@ -187,7 +187,9 @@ class RelationshipBuilder: segments.append(new_segment) person_info_manager = get_person_info_manager() person_name = person_info_manager.get_value_sync(person_id, "person_name") or person_id - logger.debug(f"{self.log_prefix} 重新眼熟用户 {person_name} 创建新消息段(超过10条消息间隔): {new_segment}") + logger.debug( + f"{self.log_prefix} 重新眼熟用户 {person_name} 创建新消息段(超过10条消息间隔): {new_segment}" + ) self._save_cache()