diff --git a/src/chat/frequency_control/frequency_control.py b/src/chat/frequency_control/frequency_control.py index a71a171f..33c7e712 100644 --- a/src/chat/frequency_control/frequency_control.py +++ b/src/chat/frequency_control/frequency_control.py @@ -272,6 +272,9 @@ class FrequencyControl: # 限制调整范围 target_talk_adjust = max(self.min_adjust, min(self.max_adjust, target_talk_adjust)) + # 记录调整前的值 + old_adjust = self.talk_frequency_adjust + # 平滑调整 self.talk_frequency_adjust = ( self.talk_frequency_adjust * (1 - self.smoothing_factor) + @@ -288,12 +291,21 @@ class FrequencyControl: adjust_direction = "不调整(该时段无活跃度)" else: adjust_direction = "保持" + + # 计算实际变化方向 + actual_change = "" + if self.talk_frequency_adjust > old_adjust: + actual_change = f"(实际提高: {old_adjust:.2f}→{self.talk_frequency_adjust:.2f})" + elif self.talk_frequency_adjust < old_adjust: + actual_change = f"(实际降低: {old_adjust:.2f}→{self.talk_frequency_adjust:.2f})" + else: + actual_change = f"(无变化: {self.talk_frequency_adjust:.2f})" logger.info( f"{self.log_prefix} 发言频率调整: " - f"当前: {message_count}消息/{user_count}用户, 人均: {message_count/user_count if user_count > 0 else 0:.2f}消息/用户, " - f"基准: {current_hour_10min_messages:.2f}消息/{current_hour_10min_users:.2f}用户,人均:{current_hour_10min_messages/current_hour_10min_users if current_hour_10min_users > 0 else 0:.2f}消息/用户, " - f"调整: {adjust_direction} → {target_talk_adjust:.2f} → {self.talk_frequency_adjust:.2f}" + f"当前: {message_count}消息/{user_count}用户, 人均: {message_count/user_count if user_count > 0 else 0:.2f}消息|" + f"基准: {current_hour_10min_messages:.2f}消息/{current_hour_10min_users:.2f}用户,人均:{current_hour_10min_messages/current_hour_10min_users if current_hour_10min_users > 0 else 0:.2f}消息|" + f"目标调整: {adjust_direction}到{target_talk_adjust:.2f}, 实际结果: {self.talk_frequency_adjust:.2f} {actual_change}" ) except Exception as e: @@ -368,6 +380,9 @@ class FrequencyControl: # 限制调整范围 target_focus_adjust = max(self.min_adjust, min(self.max_adjust, target_focus_adjust)) + # 记录调整前的值 + old_focus_adjust = self.focus_value_adjust + # 平滑调整 self.focus_value_adjust = ( self.focus_value_adjust * (1 - self.smoothing_factor) + @@ -388,13 +403,22 @@ class FrequencyControl: adjust_direction = "不调整(该时段无活跃度)" else: adjust_direction = "保持" + + # 计算实际变化方向 + actual_change = "" + if self.focus_value_adjust > old_focus_adjust: + actual_change = f"(实际提高: {old_focus_adjust:.2f}→{self.focus_value_adjust:.2f})" + elif self.focus_value_adjust < old_focus_adjust: + actual_change = f"(实际降低: {old_focus_adjust:.2f}→{self.focus_value_adjust:.2f})" + else: + actual_change = f"(无变化: {self.focus_value_adjust:.2f})" logger.info( f"{self.log_prefix} 专注度调整(10分钟): " - f"当前: {message_count}消息/{user_count}用户,人均:{message_count/user_count if user_count > 0 else 0:.2f}消息/用户, " - f"基准: {current_hour_10min_messages:.2f}消息/{current_hour_10min_users:.2f}用户,人均:{current_hour_10min_messages/current_hour_10min_users if current_hour_10min_users > 0 else 0:.2f}消息/用户, " + f"当前: {message_count}消息/{user_count}用户,人均:{message_count/user_count if user_count > 0 else 0:.2f}消息|" + f"基准: {current_hour_10min_messages:.2f}消息/{current_hour_10min_users:.2f}用户,人均:{current_hour_10min_messages/current_hour_10min_users if current_hour_10min_users > 0 else 0:.2f}消息|" f"比率: 用户{user_count/current_hour_10min_users if current_hour_10min_users > 0 else 0:.2f}x, 消息{message_count/current_hour_10min_messages if current_hour_10min_messages > 0 else 0:.2f}x, " - f"调整: {adjust_direction} → {target_focus_adjust:.2f} → {self.focus_value_adjust:.2f}" + f"目标调整: {adjust_direction}到{target_focus_adjust:.2f}, 实际结果: {self.focus_value_adjust:.2f} {actual_change}" ) except Exception as e: diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index 8bbd1632..a67c973b 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -40,40 +40,38 @@ def init_prompt(): """ {time_block} {name_block} -你现在需要根据聊天内容,选择的合适的action来参与聊天。 -请你根据以下行事风格来决定action: -{plan_style} - {chat_context_description},以下是具体的聊天内容 +**聊天内容** {chat_content_block} -{moderation_prompt} - -现在请你根据聊天内容和用户的最新消息选择合适的action和触发action的消息: +**动作记录** {actions_before_now_block} -动作:no_action -动作描述:不进行动作,等待合适的时机 -- 当你刚刚发送了消息,没有人回复时,选择no_action -- 当你一次发送了太多消息,为了避免过于烦人,可以不回复 +**回复标准** +请你根据聊天内容和用户的最新消息选择合适回复或者沉默: +1.你可以选择呼叫了你的名字,但是你没有做出回应的消息进行回复 +2.你可以自然的顺着正在进行的聊天内容进行回复或自然的提出一个问题 +4.如果你刚刚进行了回复,不要对同一个话题重复回应 +5.请控制你的发言频率,不要太过频繁的发言,当你刚刚发送了消息,没有人回复时,选择no_action +6.如果有人对你感到厌烦,请减少回复 +7.如果有人对你进行攻击,或者情绪激动,请你以合适的方法应对 +8.最好不要选择图片和表情包作为回复对象 +{moderation_prompt} + +**动作** +保持沉默:no_action {{ "action": "no_action", - "reason":"不动作的原因" + "reason":"不回复的原因" }} -动作:reply -动作描述:参与聊天回复,发送文本进行表达 -- 你想要闲聊或者随便附和 -- 有人提到了你,但是你还没有回应 -- 如果你刚刚进行了回复,不要对同一个话题重复回应 +进行回复:reply {{ "action": "reply", "target_message_id":"想要回复的消息id", "reason":"回复的原因" }} - 你必须从上面列出的可用action中选择一个,并说明触发action的消息id(不是消息原文)和选择该action的原因。消息id格式:m+数字 - 请根据动作示例,以严格的 JSON 格式输出,且仅包含 JSON 内容: """, "planner_prompt", @@ -84,26 +82,29 @@ def init_prompt(): {time_block} {name_block} -{chat_context_description},以下是具体的聊天内容 +{chat_context_description} +**聊天内容** {chat_content_block} -{moderation_prompt} - -现在,最新的聊天消息引起了你的兴趣,你想要对其中的消息进行回复,回复标准如下: -- 你想要闲聊或者随便附和 -- 有人提到了你,但是你还没有回应 -- 如果你刚刚进行了回复,不要对同一个话题重复回应 - -你之前的动作记录: +**动作记录** {actions_before_now_block} +**回复标准** +请你选择合适的消息进行回复: +1.你可以选择呼叫了你的名字,但是你没有做出回应的消息进行回复 +2.你可以自然的顺着正在进行的聊天内容进行回复 +3.你可以自然的提出一个问题 +4.如果有人对你感到厌烦,请你不要太积极的提问或是表达,可以进行顺从 +5.如果有人对你进行攻击,或者情绪激动,请你以合适的方法应对 +6.最好不要选择图片和表情包作为回复对象 +7.{moderation_prompt} + 请你从新消息中选出一条需要回复的消息并输出其id,输出格式如下: {{ "action": "reply", "target_message_id":"想要回复的消息id,消息id格式:m+数字", "reason":"回复的原因" }} - 请根据示例,以严格的 JSON 格式输出,且仅包含 JSON 内容: """, "planner_reply_prompt", @@ -127,12 +128,18 @@ def init_prompt(): """ {name_block} -{chat_context_description},{time_block},现在请你根据以下聊天内容,选择一个或多个action来参与聊天。如果没有合适的action,请选择no_action。, +{chat_context_description},{time_block},现在请你根据以下聊天内容,选择一个或多个合适的action。如果没有合适的action,请选择no_action。, {chat_content_block} -{moderation_prompt} -现在请你根据聊天内容和用户的最新消息选择合适的action和触发action的消息: +**要求** +1.action必须符合使用条件,如果符合条件,就选择 +2.如果聊天内容不适合使用action,即使符合条件,也不要使用 +3.{moderation_prompt} +4.请注意如果相同的内容已经被执行,请不要重复执行 +这是你最近执行过的动作: +{actions_before_now_block} +**可用的action** no_action:不选择任何动作 {{ @@ -142,9 +149,6 @@ no_action:不选择任何动作 {action_options_text} -这是你最近执行过的动作,请注意如果相同的内容已经被执行,请不要重复执行: -{actions_before_now_block} - 请选择,并说明触发action的消息id和选择该action的原因。消息id格式:m+数字 请根据动作示例,以严格的 JSON 格式输出,且仅包含 JSON 内容: """, @@ -830,7 +834,6 @@ class ActionPlanner: # action_options_text=action_options_block, moderation_prompt=moderation_prompt_block, name_block=name_block, - plan_style=global_config.personality.plan_style, ) else: planner_prompt_template = await global_prompt_manager.get_prompt_async("planner_reply_prompt") diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 410fe17c..05cf0e9e 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -673,7 +673,7 @@ class DefaultReplyer: bot_nickname = "" prompt_personality = ( - f"{global_config.personality.personality_core};{global_config.personality.personality_side}" + f"{global_config.personality.personality};" ) return f"你的名字是{bot_name}{bot_nickname},你{prompt_personality}" @@ -780,14 +780,14 @@ class DefaultReplyer: for name, result, duration in task_results: results_dict[name] = result chinese_name = task_name_mapping.get(name, name) - if duration < 0.01: + if duration < 0.1: almost_zero_str += f"{chinese_name}," continue timing_logs.append(f"{chinese_name}: {duration:.1f}s") if duration > 8: logger.warning(f"回复生成前信息获取耗时过长: {chinese_name} 耗时: {duration:.1f}s,请使用更快的模型") - logger.info(f"回复准备: {'; '.join(timing_logs)}; {almost_zero_str} <0.01s") + logger.info(f"回复准备: {'; '.join(timing_logs)}; {almost_zero_str} <0.1s") expression_habits_block, selected_expressions = results_dict["expression_habits"] expression_habits_block: str diff --git a/src/chat/utils/statistic.py b/src/chat/utils/statistic.py index f1b1f429..1aaa9461 100644 --- a/src/chat/utils/statistic.py +++ b/src/chat/utils/statistic.py @@ -728,7 +728,7 @@ class StatisticOutputTask(AsyncTask): f"