From 2cfa0c04db8fcf745d1233ac393ff7f90d8569a4 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Tue, 24 Jun 2025 00:02:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0no=5Freply?= =?UTF-8?q?=E7=96=B2=E6=83=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/focus_chat/hfc_version_manager.py | 2 +- src/plugins/built_in/core_actions/plugin.py | 50 +++++++++++++++++++-- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/chat/focus_chat/hfc_version_manager.py b/src/chat/focus_chat/hfc_version_manager.py index fd283e3a0..bccc9e22a 100644 --- a/src/chat/focus_chat/hfc_version_manager.py +++ b/src/chat/focus_chat/hfc_version_manager.py @@ -20,7 +20,7 @@ class HFCVersionManager: """HFC版本号管理器""" # 默认版本号 - DEFAULT_VERSION = "v3.1.0" + DEFAULT_VERSION = "v4.0.0" # 当前运行时版本号 _current_version: Optional[str] = None diff --git a/src/plugins/built_in/core_actions/plugin.py b/src/plugins/built_in/core_actions/plugin.py index 66a2e2ba3..1a8843d53 100644 --- a/src/plugins/built_in/core_actions/plugin.py +++ b/src/plugins/built_in/core_actions/plugin.py @@ -145,6 +145,12 @@ class NoReplyAction(BaseAction): # 最大等待超时时间 _max_timeout = 1200 # 1200秒 + # 跳过LLM判断的配置 + _skip_judge_when_tired = True + _skip_probability_light = 0.2 # 轻度疲惫跳过概率 + _skip_probability_medium = 0.4 # 中度疲惫跳过概率 + _skip_probability_heavy = 0.6 # 重度疲惫跳过概率 + # 动作参数定义 action_parameters = {"reason": "不回复的原因"} @@ -253,17 +259,21 @@ class NoReplyAction(BaseAction): bot_core_personality = global_config.personality.personality_core identity_block = f"你的名字是{bot_name}{bot_nickname},你{bot_core_personality}" - # 构建判断历史字符串 + # 构建判断历史字符串(最多显示3条) history_block = "" if judge_history: history_block = "之前的判断历史:\n" - for i, (timestamp, judge_result, reason) in enumerate(judge_history, 1): + # 只取最近的3条历史记录 + recent_history = judge_history[-3:] if len(judge_history) > 3 else judge_history + for i, (timestamp, judge_result, reason) in enumerate(recent_history, 1): elapsed_seconds = int(timestamp - start_time) history_block += f"{i}. 等待{elapsed_seconds}秒时判断:{judge_result},理由:{reason}\n" history_block += "\n" # 检查过去10分钟的发言频率 frequency_block = "" + should_skip_llm_judge = False # 是否跳过LLM判断 + try: # 获取过去10分钟的所有消息 past_10min_time = current_time - 600 # 10分钟前 @@ -290,11 +300,13 @@ class NoReplyAction(BaseAction): if bot_message_count > talk_frequency_threshold: over_count = bot_message_count - talk_frequency_threshold - # 根据超过的数量设置不同的提示词 + # 根据超过的数量设置不同的提示词和跳过概率 if over_count <= 3: frequency_block = "你感觉稍微有些累,回复的有点多了。\n" + skip_probability = self._skip_probability_light elif over_count <= 5: frequency_block = "你今天说话比较多,感觉有点疲惫,想要稍微休息一下。\n" + skip_probability = self._skip_probability_medium else: frequency_block = "你发现自己说话太多了,感觉很累,想要安静一会儿,除非有重要的事情否则不想回复。\n" @@ -320,6 +332,12 @@ class NoReplyAction(BaseAction): logger.warning(f"{self.log_prefix} 检查发言频率时出错: {e}") frequency_block = "" + # 如果决定跳过LLM判断,直接更新时间并继续等待 + if should_skip_llm_judge: + last_judge_time = time.time() # 更新判断时间,避免立即重新判断 + start_time = current_time # 更新开始时间,避免重复计算同样的消息 + continue # 跳过本次LLM判断,继续循环等待 + # 构建判断上下文 judge_prompt = f""" {time_block} @@ -649,7 +667,7 @@ class CoreActionsPlugin(BasePlugin): config_schema = { "plugin": { "enabled": ConfigField(type=bool, default=True, description="是否启用插件"), - "config_version": ConfigField(type=str, default="0.0.8", description="配置文件版本"), + "config_version": ConfigField(type=str, default="0.0.9", description="配置文件版本"), }, "components": { "enable_reply": ConfigField(type=bool, default=True, description="是否启用'回复'动作"), @@ -669,6 +687,18 @@ class CoreActionsPlugin(BasePlugin): "random_probability": ConfigField( type=float, default=0.8, description="Focus模式下,随机选择不回复的概率(0.0到1.0)", example=0.8 ), + "skip_judge_when_tired": ConfigField( + type=bool, default=True, description="当发言过多时是否启用跳过LLM判断机制" + ), + "skip_probability_light": ConfigField( + type=float, default=0.3, description="轻度疲惫时跳过LLM判断的概率", example=0.2 + ), + "skip_probability_medium": ConfigField( + type=float, default=0.5, description="中度疲惫时跳过LLM判断的概率", example=0.4 + ), + "skip_probability_heavy": ConfigField( + type=float, default=0.7, description="重度疲惫时跳过LLM判断的概率", example=0.6 + ), }, "emoji": { "random_probability": ConfigField( @@ -696,6 +726,18 @@ class CoreActionsPlugin(BasePlugin): max_timeout = self.get_config("no_reply.max_timeout", 1200) NoReplyAction._max_timeout = max_timeout + skip_judge_when_tired = self.get_config("no_reply.skip_judge_when_tired", True) + NoReplyAction._skip_judge_when_tired = skip_judge_when_tired + + skip_probability_light = self.get_config("no_reply.skip_probability_light", 0.2) + NoReplyAction._skip_probability_light = skip_probability_light + + skip_probability_medium = self.get_config("no_reply.skip_probability_medium", 0.4) + NoReplyAction._skip_probability_medium = skip_probability_medium + + skip_probability_heavy = self.get_config("no_reply.skip_probability_heavy", 0.6) + NoReplyAction._skip_probability_heavy = skip_probability_heavy + # --- 根据配置注册组件 --- components = [] if self.get_config("components.enable_reply", True):