diff --git a/src/plugins/PFC/actions.py b/src/plugins/PFC/actions.py index 386cd5f6..bda88516 100644 --- a/src/plugins/PFC/actions.py +++ b/src/plugins/PFC/actions.py @@ -74,10 +74,10 @@ async def handle_action( logger.error(f"[私聊][{conversation_instance.private_name}] ObservationInfo 为空,无法处理动作 '{action}'。") # 在 conversation_info 和 done_action 存在时更新状态 if conversation_info and hasattr(conversation_info, 'done_action') and conversation_info.done_action: - conversation_info.done_action[-1].update({ + conversation_info.done_action[-1].update({ "status": "error", "final_reason": "ObservationInfo is None", - }) + }) conversation_instance.state = ConversationState.ERROR return if not conversation_info: # conversation_info 在这里是必需的 @@ -180,9 +180,9 @@ async def handle_action( # 检查生成的内容是否有效 if not generated_content_for_check_or_send or \ - generated_content_for_check_or_send.startswith("抱歉") or \ - generated_content_for_check_or_send.strip() == "" or \ - (action == "send_new_message" and generated_content_for_check_or_send == "no" and should_send_reply): # RG决定发送但文本为"no"或空 + generated_content_for_check_or_send.startswith("抱歉") or \ + generated_content_for_check_or_send.strip() == "" or \ + (action == "send_new_message" and generated_content_for_check_or_send == "no" and should_send_reply): # RG决定发送但文本为"no"或空 warning_msg = f"{log_prefix} 生成内容无效或为错误提示" if action == "send_new_message" and generated_content_for_check_or_send == "no": # 特殊情况日志 @@ -586,7 +586,7 @@ async def handle_action( event_for_emotion_update = "你选择等待对方的回复(对方可能很快回复了)" if conversation_instance.emotion_updater and conversation_info and observation_info: # 确保都存在 - await conversation_instance.emotion_updater.update_emotion_based_on_context( + await conversation_instance.emotion_updater.update_emotion_based_on_context( conversation_info=conversation_info, observation_info=observation_info, chat_observer_for_history=conversation_instance.chat_observer, # 确保 chat_observer 存在 @@ -634,7 +634,7 @@ async def handle_action( # 1. 重置临时存储的计数值 if conversation_info: # 确保 conversation_info 存在 - conversation_info.other_new_messages_during_planning_count = 0 + conversation_info.other_new_messages_during_planning_count = 0 # 2. 更新动作历史记录的最终状态和原因 # 优化:如果动作成功但状态仍是默认的 recall,则更新为 done @@ -659,7 +659,7 @@ async def handle_action( elif action in ["rethink_goal", "end_conversation", "block_and_ignore", "say_goodbye"]: final_reason = f"成功执行 {action}" elif action in ["direct_reply", "send_new_message"]: # 正常发送成功的case - final_reason = "成功发送" + final_reason = "成功发送" else: final_reason = f"动作 {action} 成功完成" # 如果已经是 "done" 或 "done_no_reply",则保留它们和它们对应的 final_reason @@ -683,7 +683,7 @@ async def handle_action( # 更新 done_action 中的记录 # 防御性检查,确保 conversation_info, done_action 存在,并且索引有效 if conversation_info and hasattr(conversation_info, 'done_action') and \ - conversation_info.done_action and action_index < len(conversation_info.done_action): + conversation_info.done_action and action_index < len(conversation_info.done_action): conversation_info.done_action[action_index].update( { "status": final_status, @@ -699,8 +699,8 @@ async def handle_action( log_final_reason = final_reason if final_reason else "无明确原因" # 为成功发送的动作添加发送内容摘要 if final_status == "done" and action_successful and \ - action in ["direct_reply", "send_new_message"] and \ - hasattr(conversation_instance, 'generated_reply') and conversation_instance.generated_reply: - log_final_reason += f" (发送内容: '{conversation_instance.generated_reply[:30]}...')" + action in ["direct_reply", "send_new_message"] and \ + hasattr(conversation_instance, 'generated_reply') and conversation_instance.generated_reply: + log_final_reason += f" (发送内容: '{conversation_instance.generated_reply[:30]}...')" logger.info(f"[私聊][{conversation_instance.private_name}] 动作 '{action}' 处理完成。最终状态: {final_status}, 原因: {log_final_reason}") \ No newline at end of file diff --git a/src/plugins/PFC/conversation.py b/src/plugins/PFC/conversation.py index 74212dc7..2c87370c 100644 --- a/src/plugins/PFC/conversation.py +++ b/src/plugins/PFC/conversation.py @@ -126,7 +126,7 @@ class Conversation: # 最终关系评估 if self._initialized and self.relationship_updater and self.conversation_info and \ - self.observation_info and self.chat_observer: + self.observation_info and self.chat_observer: try: logger.info(f"[私聊][{self.private_name}] 准备执行最终关系评估...") await self.relationship_updater.update_relationship_final( diff --git a/src/plugins/PFC/conversation_initializer.py b/src/plugins/PFC/conversation_initializer.py index 2e348be9..1a4f8747 100644 --- a/src/plugins/PFC/conversation_initializer.py +++ b/src/plugins/PFC/conversation_initializer.py @@ -8,9 +8,6 @@ from src.plugins.utils.chat_message_builder import build_readable_messages, get_ from maim_message import UserInfo from src.plugins.chat.chat_stream import chat_manager from src.config.config import global_config -from ..person_info.person_info import person_info_manager -from ..person_info.relationship_manager import relationship_manager -from ..moods.moods import MoodManager # 导入 PFC 内部组件和类型 from .pfc_types import ConversationState @@ -226,7 +223,7 @@ async def initialize_core_components(conversation_instance: 'Conversation'): logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 空闲对话检测器已启动") if conversation_instance.mood_mng and hasattr(conversation_instance.mood_mng, 'start_mood_update') and \ - not conversation_instance.mood_mng._running: # type: ignore + not conversation_instance.mood_mng._running: # type: ignore conversation_instance.mood_mng.start_mood_update(update_interval=global_config.mood_update_interval) # type: ignore logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) MoodManager 已启动后台更新,间隔: {global_config.mood_update_interval} 秒。") elif conversation_instance.mood_mng and conversation_instance.mood_mng._running: # type: ignore @@ -235,7 +232,7 @@ async def initialize_core_components(conversation_instance: 'Conversation'): logger.warning(f"[私聊][{conversation_instance.private_name}] (Initializer) MoodManager 未能启动,相关功能可能受限。") if conversation_instance.conversation_info and conversation_instance.conversation_info.person_id and \ - conversation_instance.relationship_translator and conversation_instance.person_info_mng: # 确保都存在 + conversation_instance.relationship_translator and conversation_instance.person_info_mng: # 确保都存在 try: numeric_relationship_value = await conversation_instance.person_info_mng.get_value( conversation_instance.conversation_info.person_id, "relationship_value" @@ -254,11 +251,11 @@ async def initialize_core_components(conversation_instance: 'Conversation'): if conversation_instance.conversation_info and conversation_instance.mood_mng: # 确保都存在 try: - conversation_instance.conversation_info.current_emotion_text = conversation_instance.mood_mng.get_prompt() # type: ignore - logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本: {conversation_instance.conversation_info.current_emotion_text}") + conversation_instance.conversation_info.current_emotion_text = conversation_instance.mood_mng.get_prompt() # type: ignore + logger.info(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本: {conversation_instance.conversation_info.current_emotion_text}") except Exception as e_init_emo: - logger.error(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本出错: {e_init_emo}") - # 保留 ConversationInfo 中的默认值 + logger.error(f"[私聊][{conversation_instance.private_name}] (Initializer) 初始化时加载情绪文本出错: {e_init_emo}") + # 保留 ConversationInfo 中的默认值 # 6. 标记初始化成功并设置运行状态 (这些标志由PFCManager控制和检查) # conversation_instance._initialized = True -> 由 manager 设置 diff --git a/src/plugins/PFC/conversation_loop.py b/src/plugins/PFC/conversation_loop.py index dff5caf3..53de59fb 100644 --- a/src/plugins/PFC/conversation_loop.py +++ b/src/plugins/PFC/conversation_loop.py @@ -208,7 +208,7 @@ async def run_conversation_loop(conversation_instance: 'Conversation'): last_action_record_for_end_check = {} if conversation_instance.conversation_info and conversation_instance.conversation_info.done_action: - last_action_record_for_end_check = conversation_instance.conversation_info.done_action[-1] + last_action_record_for_end_check = conversation_instance.conversation_info.done_action[-1] action_ended: bool = ( last_action_record_for_end_check.get("action") in ["end_conversation", "say_goodbye"] and last_action_record_for_end_check.get("status") == "done" ) if goal_ended or action_ended: diff --git a/src/plugins/PFC/pfc_relationship.py b/src/plugins/PFC/pfc_relationship.py index 4dfee52c..be2abf48 100644 --- a/src/plugins/PFC/pfc_relationship.py +++ b/src/plugins/PFC/pfc_relationship.py @@ -202,7 +202,7 @@ class PfcRelationshipUpdater: logger.info(f"[私聊][{self.private_name}] 最终关系值更新:与【{self.private_name}】的关系值从 {current_relationship_value:.2f} 调整了 {adjustment_val:.2f},最终为 {new_relationship_value:.2f}") if conversation_info.person_id: # 虽然通常结束了,但更新一下无妨 - conversation_info.relationship_text = await self.relationship_mng.build_relationship_info(conversation_info.person_id, is_id=True) + conversation_info.relationship_text = await self.relationship_mng.build_relationship_info(conversation_info.person_id, is_id=True) class PfcRepationshipTranslator: diff --git a/src/plugins/PFC/pfc_utils.py b/src/plugins/PFC/pfc_utils.py index 2f267739..2a16439b 100644 --- a/src/plugins/PFC/pfc_utils.py +++ b/src/plugins/PFC/pfc_utils.py @@ -137,9 +137,9 @@ def get_items_from_json( if field in item: current_item_result[field] = item[field] elif field not in default_result: # 如果字段不存在且没有默认值 - logger.warning(f"[私聊][{private_name}] JSON数组元素缺少必要字段 '{field}': {item}") - valid_item = False - break # 这个元素无效 + logger.warning(f"[私聊][{private_name}] JSON数组元素缺少必要字段 '{field}': {item}") + valid_item = False + break # 这个元素无效 if not valid_item: continue @@ -156,10 +156,10 @@ def get_items_from_json( # 验证字符串不为空 (只检查 items 中要求的字段) for field in items: - if field in current_item_result and isinstance(current_item_result[field], str) and not current_item_result[field].strip(): - logger.warning(f"[私聊][{private_name}] JSON数组元素字段 '{field}' 不能为空字符串: {item}") - valid_item = False - break + if field in current_item_result and isinstance(current_item_result[field], str) and not current_item_result[field].strip(): + logger.warning(f"[私聊][{private_name}] JSON数组元素字段 '{field}' 不能为空字符串: {item}") + valid_item = False + break if valid_item: valid_items_list.append(current_item_result) # 只添加完全有效的项 @@ -188,8 +188,8 @@ def get_items_from_json( # 尝试直接解析清理后的内容 json_data = json.loads(cleaned_content) if not isinstance(json_data, dict): - logger.error(f"[私聊][{private_name}] 解析为单个对象,但结果不是字典类型: {type(json_data)}") - return False, default_result # 返回失败和默认值 + logger.error(f"[私聊][{private_name}] 解析为单个对象,但结果不是字典类型: {type(json_data)}") + return False, default_result # 返回失败和默认值 except json.JSONDecodeError: # 如果直接解析失败,尝试用正则表达式查找 JSON 对象部分 (作为后备) @@ -201,8 +201,8 @@ def get_items_from_json( potential_json_str = json_match.group() json_data = json.loads(potential_json_str) if not isinstance(json_data, dict): - logger.error(f"[私聊][{private_name}] 正则提取后解析,但结果不是字典类型: {type(json_data)}") - return False, default_result + logger.error(f"[私聊][{private_name}] 正则提取后解析,但结果不是字典类型: {type(json_data)}") + return False, default_result logger.debug(f"[私聊][{private_name}] 通过正则提取并成功解析JSON对象。") except json.JSONDecodeError: logger.error(f"[私聊][{private_name}] 正则提取的部分 '{potential_json_str[:100]}...' 无法解析为JSON。") @@ -222,9 +222,9 @@ def get_items_from_json( if item in json_data: result[item] = json_data[item] elif item not in default_result: # 如果字段不存在且没有默认值 - logger.error(f"[私聊][{private_name}] JSON对象缺少必要字段 '{item}'。JSON内容: {json_data}") - valid_single_object = False - break # 这个对象无效 + logger.error(f"[私聊][{private_name}] JSON对象缺少必要字段 '{item}'。JSON内容: {json_data}") + valid_single_object = False + break # 这个对象无效 if not valid_single_object: return False, default_result @@ -248,10 +248,10 @@ def get_items_from_json( break if valid_single_object: - logger.debug(f"[私聊][{private_name}] 成功解析并验证了单个JSON对象。") - return True, result # 返回提取并验证后的字典 + logger.debug(f"[私聊][{private_name}] 成功解析并验证了单个JSON对象。") + return True, result # 返回提取并验证后的字典 else: - return False, default_result # 验证失败 + return False, default_result # 验证失败 async def get_person_id(private_name: str, chat_stream: ChatStream): @@ -280,8 +280,8 @@ async def get_person_id(private_name: str, chat_stream: ChatStream): nickname=private_name, # 使用传入的 private_name 作为昵称 ) if person_id is None: # 如果 get_or_create_person 返回 None,说明创建失败 - logger.error(f"[私聊][{private_name}] get_or_create_person 未能获取或创建 person_id。") - return None # 返回 None 表示失败 + logger.error(f"[私聊][{private_name}] get_or_create_person 未能获取或创建 person_id。") + return None # 返回 None 表示失败 return person_id, private_platform_str, private_user_id_str # 返回获取或创建的 person_id except ValueError: diff --git a/src/plugins/PFC/reply_checker.py b/src/plugins/PFC/reply_checker.py index d86e64ac..cb95eded 100644 --- a/src/plugins/PFC/reply_checker.py +++ b/src/plugins/PFC/reply_checker.py @@ -79,7 +79,7 @@ class ReplyChecker: # <--- 新增详细对比日志 --- END ---> if not match_found: # <--- 根据标记判断 - logger.debug(f"[私聊][{self.private_name}] ReplyChecker: 未找到重复。") # <--- 新增日志 + logger.debug(f"[私聊][{self.private_name}] ReplyChecker: 未找到重复。") # <--- 新增日志 return (True, "消息内容未与机器人历史发言重复。", False) except Exception as e: diff --git a/src/plugins/PFC/reply_generator.py b/src/plugins/PFC/reply_generator.py index 2c12f7d2..dfb6d879 100644 --- a/src/plugins/PFC/reply_generator.py +++ b/src/plugins/PFC/reply_generator.py @@ -362,8 +362,8 @@ class ReplyGenerator: if action_type == "send_new_message": # 返回一个表示错误的JSON,让调用方知道出错了但仍能解析 return """{{ - "send": "no", - "txt": "LLM生成回复时出错" + "send": "no", + "txt": "LLM生成回复时出错" }}""".strip() else: return "抱歉,我现在有点混乱,让我重新思考一下..." \ No newline at end of file