feat(affinity-flow): 重构消息处理以使用StreamContext对象

重构AFC消息处理系统,将基于字典的消息数据传递改为直接使用StreamContext对象。主要变更包括:

- 修改AFCManager的process_message方法为process_stream_context,直接接收StreamContext对象
- 在chatter中重构消息处理逻辑,直接从StreamContext获取未读和历史消息
- 移除批量消息处理功能,改为单次StreamContext处理
- 在message_manager中简化消息处理流程,直接传递StreamContext对象
- 添加未读消息清理机制,防止异常情况下消息一直未读

同时优化兴趣度评分系统的参数:
- 调整回复阈值从0.55到0.56
- 增加最大不回复次数从15到20
- 提升每次不回复的概率增加从0.01到0.02
- 优化提及奖励从3.0降到1.0
- 调整回复后的不回复计数减少从1到3

BREAKING CHANGE: AFCManager的process_message方法已重命名为process_stream_context,参数从message_data改为context对象
This commit is contained in:
Windpicker-owo
2025-09-18 22:27:29 +08:00
parent 9a2320944b
commit 3193927a76
11 changed files with 487 additions and 243 deletions

View File

@@ -42,28 +42,31 @@ class AffinityFlowChatter:
}
self.last_activity_time = time.time()
async def process_message(self, message_data: dict) -> Dict[str, any]:
async def process_stream_context(self, context) -> Dict[str, any]:
"""
处理单个消息
处理StreamContext对象
Args:
message_data: 消息数据字典,包含:
- message_info: 消息基本信息
- processed_plain_text: 处理后的纯文本
- context_messages: 上下文消息(历史+未读)
- unread_messages: 未读消息列表
context: StreamContext对象包含聊天流的所有消息信息
Returns:
处理结果字典
"""
try:
# 取未读消息用于兴趣度计算
unread_messages = message_data.get("unread_messages", [])
# 取未读消息和历史消息
unread_messages = context.get_unread_messages()
history_messages = context.get_history_messages()
# 使用增强版规划器处理消息,传递未读消息用于兴趣度计算
# 准备消息数据
message_data = {
"unread_messages": unread_messages,
"history_messages": history_messages
}
# 使用增强版规划器处理消息
actions, target_message = await self.planner.plan(
mode=ChatMode.FOCUS,
unread_messages=unread_messages
message_data=message_data
)
self.stats["plans_created"] += 1
@@ -76,7 +79,7 @@ class AffinityFlowChatter:
# 更新统计
self.stats["messages_processed"] += 1
self.stats["actions_executed"] += execution_result.get("executed_count", 0)
self.stats["successful_executions"] += 1 # TODO:假设成功
self.stats["successful_executions"] += 1
self.last_activity_time = time.time()
result = {
@@ -89,12 +92,12 @@ class AffinityFlowChatter:
**execution_result,
}
logger.info(f"聊天流 {self.stream_id} 消息处理成功: 动作数={result['actions_count']}, 未读消息={result['unread_messages_processed']}")
logger.info(f"聊天流 {self.stream_id} StreamContext处理成功: 动作数={result['actions_count']}, 未读消息={result['unread_messages_processed']}")
return result
except Exception as e:
logger.error(f"亲和力聊天处理器 {self.stream_id} 处理消息时出错: {e}\n{traceback.format_exc()}")
logger.error(f"亲和力聊天处理器 {self.stream_id} 处理StreamContext时出错: {e}\n{traceback.format_exc()}")
self.stats["failed_executions"] += 1
self.last_activity_time = time.time()