refactor(message_manager): 重构消息分发机制为流循环模式

重构原有的动态消息分发管理器为流循环管理器,每个聊天流拥有独立的无限循环任务主动轮询处理消息。

主要变更:
- 移除 DistributionManager 及相关类(DistributionPriority、DistributionTask、StreamDistributionState、DistributionExecutor)
- 新增 StreamLoopManager 实现基于流的循环处理机制
- 修改 context_manager 和 message_manager 以适配新的流循环模式
- 优化 plan_filter.py 中的消息处理逻辑以适应新的数据格式

BREAKING CHANGE: 原有的分发管理器 API 已被移除,需要更新所有依赖分发功能的代码
This commit is contained in:
Windpicker-owo
2025-09-29 00:42:54 +08:00
parent 8b034e21c6
commit 903ab855bf
5 changed files with 284 additions and 1278 deletions

View File

@@ -401,13 +401,31 @@ class ChatterPlanFilter:
for msg_dict in messages:
try:
# 将字典转换为DatabaseMessages对象
db_message = DatabaseMessages(
message_id=msg_dict.get("message_id", ""),
user_info=msg_dict.get("user_info", {}),
processed_plain_text=msg_dict.get("processed_plain_text", ""),
key_words=msg_dict.get("key_words", "[]"),
is_mentioned=msg_dict.get("is_mentioned", False)
)
# 处理两种可能的数据格式flatten()返回的平铺字段 或 包含user_info字段的字典
user_info_dict = msg_dict.get("user_info", {})
if isinstance(user_info_dict, dict) and user_info_dict:
# 如果有user_info字段使用它
db_message = DatabaseMessages(
message_id=msg_dict.get("message_id", ""),
user_id=user_info_dict.get("user_id", ""),
user_nickname=user_info_dict.get("user_nickname", ""),
user_platform=user_info_dict.get("platform", ""),
processed_plain_text=msg_dict.get("processed_plain_text", ""),
key_words=msg_dict.get("key_words", "[]"),
is_mentioned=msg_dict.get("is_mentioned", False),
**{"user_info": user_info_dict} # 通过kwargs传入user_info
)
else:
# 如果没有user_info字段使用平铺的字段flatten()方法返回的格式)
db_message = DatabaseMessages(
message_id=msg_dict.get("message_id", ""),
user_id=msg_dict.get("user_id", ""),
user_nickname=msg_dict.get("user_nickname", ""),
user_platform=msg_dict.get("user_platform", ""),
processed_plain_text=msg_dict.get("processed_plain_text", ""),
key_words=msg_dict.get("key_words", "[]"),
is_mentioned=msg_dict.get("is_mentioned", False)
)
# 计算消息兴趣度
interest_score_obj = await chatter_interest_scoring_system._calculate_single_message_score(