refactor(chat): 优化上下文管理器,添加启动与停止功能,改进消息用户ID获取逻辑

This commit is contained in:
Windpicker-owo
2025-09-27 16:31:23 +08:00
parent c49b3f3ac4
commit 9a70c7a93d
3 changed files with 43 additions and 5 deletions

View File

@@ -14,7 +14,7 @@ from src.common.logger import get_logger
from src.config.config import global_config
from src.chat.interest_system import interest_manager
from src.chat.energy_system import energy_manager
from . import distribution_manager
from .distribution_manager import distribution_manager
logger = get_logger("context_manager")
@@ -549,6 +549,13 @@ class StreamContextManager:
def _message_to_dict(self, message: Any) -> Dict[str, Any]:
"""将消息对象转换为字典"""
try:
# 获取user_id优先从user_info.user_id获取其次从user_id属性获取
user_id = ""
if hasattr(message, 'user_info') and hasattr(message.user_info, 'user_id'):
user_id = getattr(message.user_info, 'user_id', "")
else:
user_id = getattr(message, 'user_id', "")
return {
"message_id": getattr(message, "message_id", ""),
"processed_plain_text": getattr(message, "processed_plain_text", ""),
@@ -557,7 +564,7 @@ class StreamContextManager:
"is_mentioned": getattr(message, "is_mentioned", False),
"is_command": getattr(message, "is_command", False),
"key_words": getattr(message, "key_words", "[]"),
"user_id": getattr(message, "user_id", ""),
"user_id": user_id,
"time": getattr(message, "time", time.time()),
}
except Exception as e:
@@ -858,6 +865,23 @@ class StreamContextManager:
return False, f"验证器执行失败: {e}"
return True, None
async def start(self) -> None:
"""启动上下文管理器"""
if self.is_running:
logger.warning("上下文管理器已经在运行")
return
await self.start_auto_cleanup()
logger.info("上下文管理器已启动")
async def stop(self) -> None:
"""停止上下文管理器"""
if not self.is_running:
return
await self.stop_auto_cleanup()
logger.info("上下文管理器已停止")
async def start_auto_cleanup(self, interval: Optional[float] = None) -> None:
"""启动自动清理

View File

@@ -79,6 +79,17 @@ class MessageManager:
def add_message(self, stream_id: str, message: DatabaseMessages):
"""添加消息到指定聊天流"""
# 检查流上下文是否存在,不存在则创建
context = self.context_manager.get_stream_context(stream_id)
if not context:
# 创建新的流上下文
from src.common.data_models.message_manager_data_model import StreamContext
new_context = StreamContext(stream_id=stream_id)
success = self.context_manager.add_stream_context(stream_id, new_context)
if not success:
logger.error(f"无法为流 {stream_id} 创建上下文")
return
# 使用 context_manager 添加消息
success = self.context_manager.add_message_to_context(stream_id, message)

View File

@@ -106,10 +106,13 @@ class ChatterActionPlanner:
reply_not_available = False
if unread_messages:
# 获取用户ID
# 获取用户ID优先从user_info.user_id获取其次从user_id属性获取
user_id = None
if unread_messages[0].user_id:
user_id = unread_messages[0].user_id
first_message = unread_messages[0]
if hasattr(first_message, 'user_info') and hasattr(first_message.user_info, 'user_id'):
user_id = getattr(first_message.user_info, 'user_id', None)
elif hasattr(first_message, 'user_id'):
user_id = getattr(first_message, 'user_id', None)
# 构建计算上下文
calc_context = {