diff --git a/src/chat/heart_flow/heartFC_chat.py b/src/chat/heart_flow/heartFC_chat.py index eef097ed..269c3f5d 100644 --- a/src/chat/heart_flow/heartFC_chat.py +++ b/src/chat/heart_flow/heartFC_chat.py @@ -191,18 +191,22 @@ class HeartFChatting: question_probability = 0.005 else: question_probability = 0.001 + + question_probability = question_probability * global_config.chat.auto_chat_value - if question_probability > 0 and not self.questioned and len(global_conflict_tracker.get_questions_by_chat_id(self.stream_id)) > 0: #长久没有回复,可以试试主动发言,提问概率随着时间增加 + if question_probability > 0 and not self.questioned and len(global_conflict_tracker.get_questions_by_chat_id(self.stream_id)) == 0: #长久没有回复,可以试试主动发言,提问概率随着时间增加 + logger.info(f"{self.log_prefix} 长久没有回复,可以试试主动发言,概率: {question_probability}") if random.random() < question_probability: # 30%概率主动发言 - print(f"{self.log_prefix} 长久没有回复,可以试试主动发言,开始生成问题") + self.questioned = True self.last_active_time = time.time() + print(f"{self.log_prefix} 长久没有回复,可以试试主动发言,开始生成问题") cycle_timers, thinking_id = self.start_cycle() question_maker = QuestionMaker(self.stream_id) question, conflict_context = await question_maker.make_question() if question and conflict_context: await global_conflict_tracker.track_conflict(question, conflict_context, True, self.stream_id) await self._lift_question_reply(question,cycle_timers,thinking_id) - self.end_cycle(cycle_timers, thinking_id) + # self.end_cycle(cycle_timers, thinking_id) if len(recent_messages_list) >= 1: @@ -740,6 +744,7 @@ class HeartFChatting: enable_tool=global_config.tool.enable_tool, request_type="replyer", from_plugin=False, + reply_time_point = action_planner_info.action_data.get("loop_start_time", time.time()), ) if not success or not llm_response or not llm_response.reply_set: diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index f76b663b..1e773bbd 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -469,8 +469,8 @@ class ActionPlanner: # 调用LLM llm_content, (reasoning_content, _, _) = await self.planner_llm.generate_response_async(prompt=prompt) - # logger.info(f"{self.log_prefix}规划器原始提示词: {prompt}") - # logger.info(f"{self.log_prefix}规划器原始响应: {llm_content}") + logger.info(f"{self.log_prefix}规划器原始提示词: {prompt}") + logger.info(f"{self.log_prefix}规划器原始响应: {llm_content}") if global_config.debug.show_prompt: logger.info(f"{self.log_prefix}规划器原始提示词: {prompt}") diff --git a/src/chat/replyer/group_generator.py b/src/chat/replyer/group_generator.py index 9b9d0334..58ce21a6 100644 --- a/src/chat/replyer/group_generator.py +++ b/src/chat/replyer/group_generator.py @@ -71,6 +71,7 @@ class DefaultReplyer: from_plugin: bool = True, stream_id: Optional[str] = None, reply_message: Optional[DatabaseMessages] = None, + reply_time_point: Optional[float] = time.time(), ) -> Tuple[bool, LLMGenerationDataModel]: # sourcery skip: merge-nested-ifs """ @@ -104,6 +105,7 @@ class DefaultReplyer: enable_tool=enable_tool, reply_message=reply_message, reply_reason=reply_reason, + reply_time_point=reply_time_point, ) llm_response.prompt = prompt llm_response.selected_expressions = selected_expressions @@ -544,6 +546,7 @@ class DefaultReplyer: available_actions: Optional[Dict[str, ActionInfo]] = None, chosen_actions: Optional[List[ActionPlannerInfo]] = None, enable_tool: bool = True, + reply_time_point: Optional[float] = time.time(), ) -> Tuple[str, List[int]]: """ 构建回复器上下文 @@ -583,13 +586,13 @@ class DefaultReplyer: message_list_before_now_long = get_raw_msg_before_timestamp_with_chat( chat_id=chat_id, - timestamp=time.time(), + timestamp=reply_time_point, limit=global_config.chat.max_context_size * 1, ) message_list_before_short = get_raw_msg_before_timestamp_with_chat( chat_id=chat_id, - timestamp=time.time(), + timestamp=reply_time_point, limit=int(global_config.chat.max_context_size * 0.33), ) diff --git a/src/chat/replyer/private_generator.py b/src/chat/replyer/private_generator.py index 0e81ece9..6c2cac97 100644 --- a/src/chat/replyer/private_generator.py +++ b/src/chat/replyer/private_generator.py @@ -70,6 +70,7 @@ class PrivateReplyer: from_plugin: bool = True, stream_id: Optional[str] = None, reply_message: Optional[DatabaseMessages] = None, + reply_time_point: Optional[float] = time.time(), ) -> Tuple[bool, LLMGenerationDataModel]: # sourcery skip: merge-nested-ifs """ diff --git a/src/config/official_configs.py b/src/config/official_configs.py index 4222cbe5..10762ed3 100644 --- a/src/config/official_configs.py +++ b/src/config/official_configs.py @@ -79,6 +79,9 @@ class ChatConfig(ConfigBase): mentioned_bot_reply: bool = True """是否启用提及必回复""" + auto_chat_value: float = 1 + """自动聊天,越小,麦麦主动聊天的概率越低""" + at_bot_inevitable_reply: float = 1 """@bot 必然回复,1为100%回复,0为不额外增幅""" diff --git a/src/plugin_system/apis/generator_api.py b/src/plugin_system/apis/generator_api.py index 335cc18f..29d0b66d 100644 --- a/src/plugin_system/apis/generator_api.py +++ b/src/plugin_system/apis/generator_api.py @@ -90,6 +90,7 @@ async def generate_reply( enable_chinese_typo: bool = True, request_type: str = "generator_api", from_plugin: bool = True, + reply_time_point: Optional[float] = None, ) -> Tuple[bool, Optional["LLMGenerationDataModel"]]: """生成回复 @@ -109,6 +110,7 @@ async def generate_reply( model_set_with_weight: 模型配置列表,每个元素为 (TaskConfig, weight) 元组 request_type: 请求类型(可选,记录LLM使用) from_plugin: 是否来自插件 + reply_time_point: 回复时间点 Returns: Tuple[bool, List[Tuple[str, Any]], Optional[str]]: (是否成功, 回复集合, 提示词) """ @@ -136,6 +138,7 @@ async def generate_reply( reply_reason=reply_reason, from_plugin=from_plugin, stream_id=chat_stream.stream_id if chat_stream else chat_id, + reply_time_point=reply_time_point, ) if not success: logger.warning("[GeneratorAPI] 回复生成失败") diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 81ef5447..f91718be 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "6.18.1" +version = "6.18.2" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #如果你想要修改配置文件,请递增version的值 @@ -77,6 +77,7 @@ expression_groups = [ talk_value = 1 #聊天频率,越小越沉默,范围0-1 mentioned_bot_reply = true # 是否启用提及必回复 max_context_size = 30 # 上下文长度 +auto_chat_value = 1 # 自动聊天,越小,麦麦主动聊天的概率越低 planner_smooth = 5 #规划器平滑,增大数值会减小planner负荷,略微降低反应速度,推荐2-8,0为关闭,必须大于等于0 # 动态发言频率规则:按时段/按chat_id调整 talk_value(优先匹配具体chat,再匹配全局)