diff --git a/src/chat/focus_chat/planners/actions/emoji_action.py b/src/chat/focus_chat/planners/actions/emoji_action.py index 44af4ecca..68da4b1d8 100644 --- a/src/chat/focus_chat/planners/actions/emoji_action.py +++ b/src/chat/focus_chat/planners/actions/emoji_action.py @@ -23,11 +23,7 @@ class EmojiAction(BaseAction): action_parameters: dict[str:str] = { "description": "文字描述你想要发送的表情", } - action_require: list[str] = [ - "你想要发送一个表情", - "表达情绪时可以选择使用", - "一般在你回复之后可以选择性使用" - ] + action_require: list[str] = ["你想要发送一个表情", "表达情绪时可以选择使用", "一般在你回复之后可以选择性使用"] associated_types: list[str] = ["emoji"] @@ -108,7 +104,7 @@ class EmojiAction(BaseAction): # ) # else: # anchor_message.update_chat_stream(self.chat_stream) - + logger.info(f"{self.log_prefix} 为了表情包创建占位符") anchor_message = await create_empty_anchor_message( self.chat_stream.platform, self.chat_stream.group_info, self.chat_stream diff --git a/src/chat/focus_chat/planners/planner_simple.py b/src/chat/focus_chat/planners/planner_simple.py index d8518ea23..83fff195a 100644 --- a/src/chat/focus_chat/planners/planner_simple.py +++ b/src/chat/focus_chat/planners/planner_simple.py @@ -58,7 +58,6 @@ def init_prompt(): """, "simple_planner_prompt", ) - Prompt( """ @@ -192,7 +191,6 @@ class ActionPlanner(BasePlanner): reasoning = f"LLM 请求失败,你的模型出现问题: {req_e}" action = "no_reply" - if llm_content: try: fixed_json_string = repair_json(llm_content) @@ -233,9 +231,7 @@ class ActionPlanner(BasePlanner): reasoning = extracted_reasoning except Exception as json_e: - logger.warning( - f"{self.log_prefix}解析LLM响应JSON失败 {json_e}. LLM原始输出: '{llm_content}'" - ) + logger.warning(f"{self.log_prefix}解析LLM响应JSON失败 {json_e}. LLM原始输出: '{llm_content}'") traceback.print_exc() reasoning = f"解析LLM响应JSON失败: {json_e}. 将使用默认动作 'no_reply'." action = "no_reply" @@ -353,7 +349,7 @@ class ActionPlanner(BasePlanner): # moderation_prompt_block = "请不要输出违法违规内容,不要输出色情,暴力,政治相关内容,如有敏感内容,请规避。" moderation_prompt_block = "" - + # 获取当前时间 time_block = f"当前时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" diff --git a/src/chat/focus_chat/replyer/default_replyer.py b/src/chat/focus_chat/replyer/default_replyer.py index 650eb2788..644b5fe9d 100644 --- a/src/chat/focus_chat/replyer/default_replyer.py +++ b/src/chat/focus_chat/replyer/default_replyer.py @@ -75,7 +75,7 @@ def init_prompt(): 不要浮夸,不要夸张修辞,只输出一条回复就好。 现在,你说: """, - "default_replyer_private_prompt", + "default_replyer_private_prompt", ) @@ -181,7 +181,7 @@ class DefaultReplyer: return False, None # --- 回复器 (Replier) 的定义 --- # - + async def deal_emoji( self, anchor_message: MessageRecv, @@ -192,10 +192,9 @@ class DefaultReplyer: """ 表情动作处理类 """ - + await self._create_thinking_message(anchor_message, thinking_id) - - + try: has_sent_something = False sent_msg_list = [] @@ -208,8 +207,7 @@ class DefaultReplyer: reply.append(("emoji", emoji_base64)) else: logger.warning(f"{self.log_prefix} 没有找到合适表情") - - + if reply: with Timer("发送表情", cycle_timers): sent_msg_list = await self.send_response_messages( @@ -230,8 +228,6 @@ class DefaultReplyer: logger.error(f"回复失败: {e}") traceback.print_exc() return False, None - - async def reply( self, @@ -293,7 +289,7 @@ class DefaultReplyer: # TODO: API-Adapter修改标记 # logger.info(f"{self.log_prefix}[Replier-{thinking_id}]\nPrompt:\n{prompt}\n") content, (reasoning_content, model_name) = await self.express_model.generate_response_async(prompt) - + logger.debug(f"prompt: {prompt}") logger.info(f"最终回复: {content}") @@ -384,8 +380,8 @@ class DefaultReplyer: style_habbits_str = "\n".join(style_habbits) grammar_habbits_str = "\n".join(grammar_habbits) - - # 关键词检测与反应 + + # 关键词检测与反应 keywords_reaction_prompt = "" try: # 处理关键词规则 @@ -393,7 +389,7 @@ class DefaultReplyer: if any(keyword in target_message for keyword in rule.keywords): logger.info(f"检测到关键词规则:{rule.keywords},触发反应:{rule.reaction}") keywords_reaction_prompt += f"{rule.reaction}," - + # 处理正则表达式规则 for rule in global_config.keyword_reaction.regex_rules: for pattern_str in rule.regex: @@ -411,7 +407,7 @@ class DefaultReplyer: continue except Exception as e: logger.error(f"关键词检测与反应时发生异常: {str(e)}", exc_info=True) - + time_block = f"当前时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" # logger.debug("开始构建 focus prompt") diff --git a/src/chat/focus_chat/working_memory/memory_manager.py b/src/chat/focus_chat/working_memory/memory_manager.py index 1015207aa..4d18eae81 100644 --- a/src/chat/focus_chat/working_memory/memory_manager.py +++ b/src/chat/focus_chat/working_memory/memory_manager.py @@ -510,11 +510,15 @@ class MemoryManager: # 如果有摘要信息,添加到提示中 if summary1: prompt += f"记忆1主题:{summary1['brief']}\n" - prompt += "记忆1关键要点:\n" + "\n".join([f"- {point}" for point in summary1.get("key_points", [])]) + "\n\n" + prompt += ( + "记忆1关键要点:\n" + "\n".join([f"- {point}" for point in summary1.get("key_points", [])]) + "\n\n" + ) if summary2: prompt += f"记忆2主题:{summary2['brief']}\n" - prompt += "记忆2关键要点:\n" + "\n".join([f"- {point}" for point in summary2.get("key_points", [])]) + "\n\n" + prompt += ( + "记忆2关键要点:\n" + "\n".join([f"- {point}" for point in summary2.get("key_points", [])]) + "\n\n" + ) # 添加记忆原始内容 prompt += f""" diff --git a/src/chat/utils/utils.py b/src/chat/utils/utils.py index 4ed9174c6..3ceebc9e2 100644 --- a/src/chat/utils/utils.py +++ b/src/chat/utils/utils.py @@ -636,4 +636,4 @@ def translate_timestamp_to_human_readable(timestamp: float, mode: str = "normal" return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp)) + ":\n" else: # mode = "lite" or unknown # 只返回时分秒格式,喵~ - return time.strftime("%H:%M:%S", time.localtime(timestamp)) \ No newline at end of file + return time.strftime("%H:%M:%S", time.localtime(timestamp)) diff --git a/src/chat/utils/utils_image.py b/src/chat/utils/utils_image.py index 9dcd644a9..087584535 100644 --- a/src/chat/utils/utils_image.py +++ b/src/chat/utils/utils_image.py @@ -184,9 +184,7 @@ class ImageManager: return f"[图片:{cached_description}]" # 调用AI获取描述 - prompt = ( - "请用中文描述这张图片的内容。如果有文字,请把文字都描述出来,请留意其主题,直观感受,以及是否有擦边色情内容。最多100个字。" - ) + prompt = "请用中文描述这张图片的内容。如果有文字,请把文字都描述出来,请留意其主题,直观感受,以及是否有擦边色情内容。最多100个字。" description, _ = await self._llm.generate_response_for_image(prompt, image_base64, image_format) if description is None: diff --git a/src/common/remote.py b/src/common/remote.py index 23cb5cf68..064a07cb0 100644 --- a/src/common/remote.py +++ b/src/common/remote.py @@ -90,7 +90,9 @@ class TelemetryHeartBeatTask(AsyncTask): else: logger.error("无效的服务端响应") else: - logger.error(f"请求UUID失败,不过你还是可以正常使用麦麦,状态码: {response.status_code}, 响应内容: {response.text}") + logger.error( + f"请求UUID失败,不过你还是可以正常使用麦麦,状态码: {response.status_code}, 响应内容: {response.text}" + ) # 请求失败,重试次数+1 try_count += 1 diff --git a/src/config/config_base.py b/src/config/config_base.py index ba6519f7d..6c414f0b2 100644 --- a/src/config/config_base.py +++ b/src/config/config_base.py @@ -79,7 +79,11 @@ class ConfigBase: if field_origin_type is list: # 如果列表元素类型是ConfigBase的子类,则对每个元素调用from_dict - if field_type_args and isinstance(field_type_args[0], type) and issubclass(field_type_args[0], ConfigBase): + if ( + field_type_args + and isinstance(field_type_args[0], type) + and issubclass(field_type_args[0], ConfigBase) + ): return [field_type_args[0].from_dict(item) for item in value] return [cls._convert_field(item, field_type_args[0]) for item in value] elif field_origin_type is set: