mirror of https://github.com/Mai-with-u/MaiBot.git
fix:表达和聊天配置项为0时bug
parent
bc045a0c85
commit
34825abaa7
|
|
@ -173,7 +173,11 @@ class ChatConfig(ConfigBase):
|
|||
def get_talk_value(self, chat_id: Optional[str]) -> float:
|
||||
"""根据规则返回当前 chat 的动态 talk_value,未匹配则回退到基础值。"""
|
||||
if not self.enable_talk_value_rules or not self.talk_value_rules:
|
||||
return self.talk_value
|
||||
result = self.talk_value
|
||||
# 防止返回0值,自动转换为0.0001
|
||||
if result == 0:
|
||||
return 0.0000001
|
||||
return result
|
||||
|
||||
now_min = self._now_minutes()
|
||||
|
||||
|
|
@ -199,7 +203,11 @@ class ChatConfig(ConfigBase):
|
|||
start_min, end_min = parsed
|
||||
if self._in_range(now_min, start_min, end_min):
|
||||
try:
|
||||
return float(value)
|
||||
result = float(value)
|
||||
# 防止返回0值,自动转换为0.0001
|
||||
if result == 0:
|
||||
return 0.0000001
|
||||
return result
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
|
|
@ -218,12 +226,20 @@ class ChatConfig(ConfigBase):
|
|||
start_min, end_min = parsed
|
||||
if self._in_range(now_min, start_min, end_min):
|
||||
try:
|
||||
return float(value)
|
||||
result = float(value)
|
||||
# 防止返回0值,自动转换为0.0001
|
||||
if result == 0:
|
||||
return 0.0000001
|
||||
return result
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
# 3) 未命中规则返回基础值
|
||||
return self.talk_value
|
||||
result = self.talk_value
|
||||
# 防止返回0值,自动转换为0.0001
|
||||
if result == 0:
|
||||
return 0.0000001
|
||||
return result
|
||||
|
||||
|
||||
@dataclass
|
||||
|
|
@ -345,22 +361,30 @@ class ExpressionConfig(ConfigBase):
|
|||
tuple: (是否使用表达, 是否学习表达, 学习间隔)
|
||||
"""
|
||||
if not self.learning_list:
|
||||
# 如果没有配置,使用默认值:启用表达,启用学习,300秒间隔
|
||||
return True, True, 300
|
||||
# 如果没有配置,使用默认值:启用表达,启用学习,学习强度1.0(对应300秒间隔)
|
||||
return True, True, 1.0
|
||||
|
||||
# 优先检查聊天流特定的配置
|
||||
if chat_stream_id:
|
||||
specific_expression_config = self._get_stream_specific_config(chat_stream_id)
|
||||
if specific_expression_config is not None:
|
||||
return specific_expression_config
|
||||
use_expression, enable_learning, learning_intensity = specific_expression_config
|
||||
# 防止学习强度为0,自动转换为0.0001
|
||||
if learning_intensity == 0:
|
||||
learning_intensity = 0.0000001
|
||||
return use_expression, enable_learning, learning_intensity
|
||||
|
||||
# 检查全局配置(第一个元素为空字符串的配置)
|
||||
global_expression_config = self._get_global_config()
|
||||
if global_expression_config is not None:
|
||||
return global_expression_config
|
||||
use_expression, enable_learning, learning_intensity = global_expression_config
|
||||
# 防止学习强度为0,自动转换为0.0001
|
||||
if learning_intensity == 0:
|
||||
learning_intensity = 0.0000001
|
||||
return use_expression, enable_learning, learning_intensity
|
||||
|
||||
# 如果都没有匹配,返回默认值
|
||||
return True, True, 300
|
||||
# 如果都没有匹配,返回默认值:启用表达,启用学习,学习强度1.0(对应300秒间隔)
|
||||
return True, True, 1.0
|
||||
|
||||
def _get_stream_specific_config(self, chat_stream_id: str) -> Optional[tuple[bool, bool, int]]:
|
||||
"""
|
||||
|
|
@ -396,6 +420,9 @@ class ExpressionConfig(ConfigBase):
|
|||
use_expression: bool = config_item[1].lower() == "enable"
|
||||
enable_learning: bool = config_item[2].lower() == "enable"
|
||||
learning_intensity: float = float(config_item[3])
|
||||
# 防止学习强度为0,自动转换为0.0001
|
||||
if learning_intensity == 0:
|
||||
learning_intensity = 0.0000001
|
||||
return use_expression, enable_learning, learning_intensity # type: ignore
|
||||
except (ValueError, IndexError):
|
||||
continue
|
||||
|
|
@ -419,6 +446,9 @@ class ExpressionConfig(ConfigBase):
|
|||
use_expression: bool = config_item[1].lower() == "enable"
|
||||
enable_learning: bool = config_item[2].lower() == "enable"
|
||||
learning_intensity = float(config_item[3])
|
||||
# 防止学习强度为0,自动转换为0.0001
|
||||
if learning_intensity == 0:
|
||||
learning_intensity = 0.0000001
|
||||
return use_expression, enable_learning, learning_intensity # type: ignore
|
||||
except (ValueError, IndexError):
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -86,6 +86,10 @@ class ExpressionLearner:
|
|||
_, self.enable_learning, self.learning_intensity = global_config.expression.get_expression_config_for_chat(
|
||||
self.chat_id
|
||||
)
|
||||
# 防止除以零:如果学习强度为0或负数,使用最小值0.0001
|
||||
if self.learning_intensity <= 0:
|
||||
logger.warning(f"学习强度为 {self.learning_intensity},已自动调整为 0.0001 以避免除以零错误")
|
||||
self.learning_intensity = 0.0000001
|
||||
self.min_messages_for_learning = 15 / self.learning_intensity # 触发学习所需的最少消息数
|
||||
self.min_learning_interval = 120 / self.learning_intensity
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ learning_list = [ # 表达学习配置列表,支持按聊天流配置
|
|||
# 第三位: 是否学习表达 ("enable"/"disable")
|
||||
# 第四位: 学习强度(浮点数),影响学习频率,最短学习时间间隔 = 300/学习强度(秒)
|
||||
# 学习强度越高,学习越频繁;学习强度越低,学习越少
|
||||
# 如果学习强度设置为0会自动转换为0.0001以避免除以零错误
|
||||
]
|
||||
|
||||
expression_groups = [
|
||||
|
|
@ -86,7 +87,7 @@ allow_reflect = [] # 允许进行表达反思的聊天流ID列表,格式:["q
|
|||
|
||||
|
||||
[chat] # 麦麦的聊天设置
|
||||
talk_value = 1 # 聊天频率,越小越沉默,范围0-1
|
||||
talk_value = 1 # 聊天频率,越小越沉默,范围0-1,如果设置为0会自动转换为0.0001以避免除以零错误
|
||||
mentioned_bot_reply = true # 是否启用提及必回复
|
||||
max_context_size = 30 # 上下文长度
|
||||
planner_smooth = 2 # 规划器平滑,增大数值会减小planner负荷,略微降低反应速度,推荐1-5,0为关闭,必须大于等于0
|
||||
|
|
@ -97,7 +98,7 @@ enable_talk_value_rules = true # 是否启用动态发言频率规则
|
|||
# 推荐格式(对象数组):{ target="platform:id:type" 或 "", time="HH:MM-HH:MM", value=0.5 }
|
||||
# 说明:
|
||||
# - target 为空字符串表示全局;type 为 group/private,例如:"qq:1919810:group" 或 "qq:114514:private";
|
||||
# - 支持跨夜区间,例如 "23:00-02:00";数值范围建议 0-1。
|
||||
# - 支持跨夜区间,例如 "23:00-02:00";数值范围建议 0-1,如果 value 设置为0会自动转换为0.0001以避免除以零错误。
|
||||
talk_value_rules = [
|
||||
{ target = "", time = "00:00-08:59", value = 0.8 },
|
||||
{ target = "", time = "09:00-22:59", value = 1.0 },
|
||||
|
|
|
|||
Loading…
Reference in New Issue