feat(affinity_interest_calculator): 添加回复冷却减少功能,移除兴趣和关系分数上限

This commit is contained in:
Windpicker-owo
2025-11-11 14:57:09 +08:00
parent e79494d3c2
commit c38f086fd2

View File

@@ -51,6 +51,7 @@ class AffinityInterestCalculator(BaseInterestCalculator):
# 连续不回复概率提升 # 连续不回复概率提升
self.no_reply_count = 0 self.no_reply_count = 0
self.max_no_reply_count = affinity_config.max_no_reply_count self.max_no_reply_count = affinity_config.max_no_reply_count
self.reply_cooldown_reduction = affinity_config.reply_cooldown_reduction # 回复后减少的不回复计数
if self.max_no_reply_count > 0: if self.max_no_reply_count > 0:
self.probability_boost_per_no_reply = ( self.probability_boost_per_no_reply = (
affinity_config.no_reply_threshold_adjustment / self.max_no_reply_count affinity_config.no_reply_threshold_adjustment / self.max_no_reply_count
@@ -73,6 +74,8 @@ class AffinityInterestCalculator(BaseInterestCalculator):
logger.info(f" - 回复阈值: {self.reply_threshold}") logger.info(f" - 回复阈值: {self.reply_threshold}")
logger.info(f" - 智能匹配: {self.use_smart_matching}") logger.info(f" - 智能匹配: {self.use_smart_matching}")
logger.info(f" - 回复后连续对话: {self.enable_post_reply_boost}") logger.info(f" - 回复后连续对话: {self.enable_post_reply_boost}")
logger.info(f" - 回复冷却减少: {self.reply_cooldown_reduction}")
logger.info(f" - 最大不回复计数: {self.max_no_reply_count}")
# 检查 bot_interest_manager 状态 # 检查 bot_interest_manager 状态
try: try:
@@ -208,8 +211,7 @@ class AffinityInterestCalculator(BaseInterestCalculator):
len(match_result.matched_tags) * affinity_config.match_count_bonus, affinity_config.max_match_bonus len(match_result.matched_tags) * affinity_config.match_count_bonus, affinity_config.max_match_bonus
) )
final_score = match_result.overall_score * 1.15 * match_result.confidence + match_count_bonus final_score = match_result.overall_score * 1.15 * match_result.confidence + match_count_bonus
# 限制兴趣匹配分数上限为1.0,防止总分超标 # 移除兴趣匹配分数上限允许超过1.0,最终分数会被整体限制
final_score = min(final_score, 1.0)
logger.debug(f"兴趣匹配最终得分: {final_score:.3f} (原始: {match_result.overall_score * 1.15 * match_result.confidence + match_count_bonus:.3f})") logger.debug(f"兴趣匹配最终得分: {final_score:.3f} (原始: {match_result.overall_score * 1.15 * match_result.confidence + match_count_bonus:.3f})")
return final_score return final_score
else: else:
@@ -231,7 +233,8 @@ class AffinityInterestCalculator(BaseInterestCalculator):
# 优先使用内存中的关系分 # 优先使用内存中的关系分
if user_id in self.user_relationships: if user_id in self.user_relationships:
relationship_value = self.user_relationships[user_id] relationship_value = self.user_relationships[user_id]
return min(relationship_value, 1.0) # 移除关系分上限允许超过1.0,最终分数会被整体限制
return relationship_value
# 如果内存中没有尝试从统一的评分API获取 # 如果内存中没有尝试从统一的评分API获取
try: try:
@@ -397,8 +400,15 @@ class AffinityInterestCalculator(BaseInterestCalculator):
logger.debug( logger.debug(
f"[回复后机制] 激活连续对话模式,阈值将在接下来 {self.post_reply_boost_max_count} 条消息中降低" f"[回复后机制] 激活连续对话模式,阈值将在接下来 {self.post_reply_boost_max_count} 条消息中降低"
) )
# 同时重置不回复计数
self.no_reply_count = 0 # 应用回复后减少不回复计数的功能
if self.reply_cooldown_reduction > 0:
old_count = self.no_reply_count
self.no_reply_count = max(0, self.no_reply_count - self.reply_cooldown_reduction)
logger.debug(
f"[回复后机制] 应用回复冷却减少: 不回复计数 {old_count}{self.no_reply_count} "
f"(减少量: {self.reply_cooldown_reduction})"
)
def on_message_processed(self, replied: bool): def on_message_processed(self, replied: bool):
"""消息处理完成后调用,更新各种计数器 """消息处理完成后调用,更新各种计数器