refactor(chat): 重构消息兴趣度计算与动作记录机制

重构聊天系统以使用集中式消息管理API,移除ChatMessageContext类,将兴趣度计算和动作记录功能整合到StreamContext中。

主要变更:
- 移除ChatMessageContext类,使用StreamContext统一管理消息上下文
- 在DatabaseMessages模型中添加interest_degree、actions、should_reply字段
- 实现消息管理器API用于更新消息信息和刷新focus_energy
- 重构ChatStream的focus_energy计算逻辑,基于StreamContext历史消息
- 在动作管理器中添加动作记录功能,确保动作执行后更新消息状态

BREAKING CHANGE: ChatMessageContext类已被移除,相关功能需使用StreamContext API替代
This commit is contained in:
Windpicker-owo
2025-09-26 13:56:43 +08:00
parent 9c6fbce81b
commit ca8a47f246
7 changed files with 364 additions and 179 deletions

View File

@@ -128,7 +128,6 @@ class ChatterActionPlanner:
# 更新ChatStream的兴趣度数据
from src.plugin_system.apis.chat_api import get_chat_manager
chat_stream = get_chat_manager().get_stream(self.chat_id)
chat_stream.add_message_interest(score)
logger.debug(f"已更新聊天 {self.chat_id} 的ChatStream兴趣度分数: {score:.3f}")
# 更新情绪状态和ChatStream兴趣度数据
@@ -145,6 +144,39 @@ class ChatterActionPlanner:
chat_mood.chat_stream.update_focus_energy()
logger.debug(f"已更新聊天 {self.chat_id} 的ChatStream兴趣度和Focus Energy分数: {score:.3f}")
# 为所有未读消息记录兴趣度信息
for message in unread_messages:
# 查找对应的兴趣度评分
message_score = next((s for s in interest_scores if s.message_id == message.message_id), None)
if message_score:
message.interest_degree = message_score.total_score
message.should_reply = self.interest_scoring.should_reply(message_score, message)[0]
logger.debug(f"已记录消息 {message.message_id} - 兴趣度: {message_score.total_score:.3f}, 应回复: {message.should_reply}")
# 更新StreamContext中的消息信息并刷新focus_energy
if context:
from src.chat.message_manager.message_manager import message_manager
message_manager.update_message_and_refresh_energy(
stream_id=self.chat_id,
message_id=message.message_id,
interest_degree=message_score.total_score,
should_reply=message.should_reply
)
else:
# 如果没有找到评分,设置默认值
message.interest_degree = 0.0
message.should_reply = False
# 更新StreamContext中的消息信息并刷新focus_energy
if context:
from src.chat.message_manager.message_manager import message_manager
message_manager.update_message_and_refresh_energy(
stream_id=self.chat_id,
message_id=message.message_id,
interest_degree=0.0,
should_reply=False
)
# base_threshold = self.interest_scoring.reply_threshold
# 检查兴趣度是否达到非回复动作阈值
non_reply_action_interest_threshold = global_config.affinity_flow.non_reply_action_interest_threshold
@@ -177,10 +209,13 @@ class ChatterActionPlanner:
# 5. 使用 PlanExecutor 执行 Plan
execution_result = await self.executor.execute(filtered_plan)
# 6. 根据执行结果更新统计信息
# 6. 动作记录现在由ChatterActionManager统一处理
# 动作记录逻辑已移至ChatterActionManager.execute_action方法中
# 7. 根据执行结果更新统计信息
self._update_stats_from_execution_result(execution_result)
# 7. 检查关系更新
# 8. 检查关系更新
await self.relationship_tracker.check_and_update_relationships()
# 8. 返回结果