feat(chat): 优化消息打断系统概率模型为反比例函数
将消息打断系统的概率计算从线性模型改为反比例函数模型, 提供更合理的打断概率分布: - 第1次打断概率约80% - 第2次打断概率约35% - 第3次打断概率约15% - 后续趋近于最低概率(5%) 新模型通过反比例函数实现前期高概率、快速衰减的特性, 避免线性模型中后期打断概率仍然较高的问题,提升用户体验。
This commit is contained in:
@@ -93,7 +93,7 @@ class StreamContext(BaseDataModel):
|
||||
return recent_history
|
||||
|
||||
def calculate_interruption_probability(self, max_limit: int, min_probability: float = 0.1, probability_factor: float | None = None) -> float:
|
||||
"""计算打断概率 - 使用简单线性概率模型
|
||||
"""计算打断概率 - 使用反比例函数模型
|
||||
|
||||
Args:
|
||||
max_limit: 最大打断次数
|
||||
@@ -110,20 +110,25 @@ class StreamContext(BaseDataModel):
|
||||
if self.interruption_count >= max_limit:
|
||||
return 0.0
|
||||
|
||||
# 线性概率计算:次数越多,概率越低
|
||||
# 公式:概率 = max(min_probability, 1.0 - (当前打断次数 / 最大打断次数))
|
||||
# 反比例函数概率计算:前期高概率,快速衰减到低概率
|
||||
# 公式:概率 = a / (count + b) + min_probability
|
||||
# 参数设计:
|
||||
# - a = 1.4 (反比例系数)
|
||||
# - b = 2.0 (平移参数)
|
||||
# 这确保了:
|
||||
# - 第1次打断:90% 概率 (如果min_probability=0.1, max_limit=10)
|
||||
# - 第2次打断:80% 概率
|
||||
# - ...
|
||||
# - 第9次打断:10% 概率 (等于min_probability)
|
||||
# - 第10次打断:0% 概率 (达到上限)
|
||||
# - 第1次打断:80% 概率 (count=0)
|
||||
# - 第2次打断:35% 概率 (count=1)
|
||||
# - 第3次打断:15% 概率 (count=2)
|
||||
# - 第4次及以后:约10% 概率 (趋近于min_probability)
|
||||
# - 达到max_limit:0% 概率 (达到上限)
|
||||
|
||||
probability = 1.0 - (self.interruption_count / max_limit)
|
||||
a = 1.4 # 反比例系数
|
||||
b = 2.0 # 平移参数
|
||||
|
||||
# 设置最低概率,确保始终有打断的可能性
|
||||
probability = a / (self.interruption_count + b) + min_probability
|
||||
|
||||
# 确保概率在合理范围内
|
||||
probability = max(min_probability, probability)
|
||||
|
||||
return max(0.0, min(1.0, probability))
|
||||
|
||||
async def increment_interruption_count(self):
|
||||
|
||||
@@ -122,15 +122,16 @@ allow_reply_self = false # 是否允许回复自己说的话
|
||||
max_context_size = 25 # 上下文长度
|
||||
thinking_timeout = 40 # MoFox-Bot一次回复最长思考规划时间,超过这个时间的思考会放弃(往往是api反应太慢)
|
||||
|
||||
# 消息打断系统配置 - 线性概率模型
|
||||
# 消息打断系统配置 - 反比例函数概率模型
|
||||
interruption_enabled = true # 是否启用消息打断系统
|
||||
interruption_max_limit = 5 # 每个聊天流的最大打断次数
|
||||
interruption_min_probability = 0.05 # 最低打断概率(即使达到较高打断次数,也保证有此概率的打断机会)
|
||||
interruption_min_probability = 0.05 # 最低打断概率(反比例函数趋近的下限值)
|
||||
interruption_afc_reduction = 0.05 # 每次连续打断降低的afc阈值数值
|
||||
|
||||
# DEPRECATED: interruption_probability_factor (已废弃的配置项)
|
||||
# 新的线性概率模型不再需要复杂的概率因子
|
||||
# 公式:打断概率 = max(最低概率, 1.0 - (当前打断次数 / 最大打断次数))
|
||||
# 新的反比例函数概率模型不再需要复杂的概率因子
|
||||
# 公式:打断概率 = 1.4 / (当前打断次数 + 2.0) + 最低概率
|
||||
# 特性:第1次80% → 第2次35% → 第3次15% → 趋近于最低概率
|
||||
# interruption_probability_factor = 0.8 # 此配置已废弃,请删除
|
||||
|
||||
# 动态消息分发系统配置
|
||||
|
||||
Reference in New Issue
Block a user