fix(proactive_thinker): 修复情绪模块关闭时主动思考报错的问题
当全局情绪模块被禁用时,尝试获取情绪状态会导致`AttributeError`或`KeyError`,从而中断主动思考任务。 本次提交通过以下方式修复了此问题: 1. 在获取情绪状态前,增加对`global_config.mood.enable_mood`的判断。 2. 在情绪获取逻辑中加入`try...except`块,捕获潜在的异常,并在失败时提供一个默认的情绪状态,增强了代码的鲁棒性。 3. 在日常唤醒任务的异常处理中,增加了`traceback.print_exc()`,以便在出现错误时打印完整的堆栈跟踪,方便快速定位问题。
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
return prompt
|
||||
|
||||
Reference in New Issue
Block a user