From 1f06bdf5e818180eabdb066fa9af54892354fee7 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Fri, 3 Oct 2025 18:19:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(proactive=5Fthinker):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=83=85=E7=BB=AA=E6=A8=A1=E5=9D=97=E5=85=B3=E9=97=AD=E6=97=B6?= =?UTF-8?q?=E4=B8=BB=E5=8A=A8=E6=80=9D=E8=80=83=E6=8A=A5=E9=94=99=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当全局情绪模块被禁用时,尝试获取情绪状态会导致`AttributeError`或`KeyError`,从而中断主动思考任务。 本次提交通过以下方式修复了此问题: 1. 在获取情绪状态前,增加对`global_config.mood.enable_mood`的判断。 2. 在情绪获取逻辑中加入`try...except`块,捕获潜在的异常,并在失败时提供一个默认的情绪状态,增强了代码的鲁棒性。 3. 在日常唤醒任务的异常处理中,增加了`traceback.print_exc()`,以便在出现错误时打印完整的堆栈跟踪,方便快速定位问题。 --- .../built_in/proactive_thinker/proacive_thinker_event.py | 2 ++ .../proactive_thinker/proactive_thinker_executor.py | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/plugins/built_in/proactive_thinker/proacive_thinker_event.py b/src/plugins/built_in/proactive_thinker/proacive_thinker_event.py index 020a07798..88fa169e8 100644 --- a/src/plugins/built_in/proactive_thinker/proacive_thinker_event.py +++ b/src/plugins/built_in/proactive_thinker/proacive_thinker_event.py @@ -1,6 +1,7 @@ import asyncio import random import time +import traceback from datetime import datetime from maim_message import UserInfo @@ -199,6 +200,7 @@ class ProactiveThinkingTask(AsyncTask): logger.info("日常唤醒任务被正常取消。") break except Exception as e: + traceback.print_exc() # 打印完整的堆栈跟踪 logger.error(f"【日常唤醒】任务出现错误,将在60秒后重试: {e}", exc_info=True) await asyncio.sleep(60) diff --git a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py index f268aea32..74c23eba4 100644 --- a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py +++ b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py @@ -158,7 +158,12 @@ class ProactiveThinkerExecutor: ) # 2. 构建基础上下文 - mood_state = mood_manager.get_mood_by_chat_id(stream_id).mood_state + if global_config.mood.enable_mood: + try: + mood_state = mood_manager.get_mood_by_chat_id(stream.stream_id) + except Exception as e: + logger.error(f"获取情绪失败,原因:{e}") + mood_state = "暂时没有" base_context = { "schedule_context": schedule_context, "recent_chat_history": recent_chat_history, @@ -473,4 +478,4 @@ class ProactiveThinkerExecutor: if global_config.debug.show_prompt: logger.info(f"主动思考回复器原始提示词:{prompt}") - return prompt \ No newline at end of file + return prompt