From a96c2720dce4d52b26f0451e31ace3741b73177f Mon Sep 17 00:00:00 2001 From: Bakadax Date: Sun, 4 May 2025 17:57:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=95=BF=E6=96=87=E6=9C=AC=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=88=AA=E6=96=AD=E5=BC=80=E5=85=B3=EF=BC=8C=E7=BB=B0=E5=8F=B7?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E4=B8=8A=E4=B8=8B=E6=96=87=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.py | 43 ++++++++++++------- .../group_nickname/nickname_manager.py | 2 +- src/plugins/utils/chat_message_builder.py | 2 + template/bot_config_template.toml | 5 ++- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/config/config.py b/src/config/config.py index 1afad2b1..98427912 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -244,6 +244,8 @@ class BotConfig: default_factory=lambda: ["表情包", "图片", "回复", "聊天记录"] ) # 添加新的配置项默认值 + long_message_auto_truncate: bool = True # HFC 模式过长消息自动截断,防止他人 prompt 恶意注入,减少token消耗,但可能损失图片/长文信息,按需选择状态(默认开启) + # mood mood_update_interval: float = 1.0 # 情绪更新间隔 单位秒 mood_decay_rate: float = 0.95 # 情绪衰减率 @@ -277,11 +279,12 @@ class BotConfig: enable_pfc_chatting: bool = False # 是否启用PFC聊天 # Group Nickname - ENABLE_NICKNAME_MAPPING: bool = False # 绰号映射功能总开关 - MAX_NICKNAMES_IN_PROMPT: int = 10 # Prompt 中最多注入的绰号数量 - NICKNAME_PROBABILITY_SMOOTHING: int = 1 # 绰号加权随机选择的平滑因子 - NICKNAME_QUEUE_MAX_SIZE: int = 100 # 绰号处理队列最大容量 - NICKNAME_PROCESS_SLEEP_INTERVAL: float = 60 # 绰号处理进程休眠间隔(秒) + enable_nickname_mapping: bool = False # 绰号映射功能总开关 + max_nicknames_in_prompt: int = 10 # Prompt 中最多注入的绰号数量 + nickname_probability_smoothing: int = 1 # 绰号加权随机选择的平滑因子 + nickname_queue_max_size: int = 100 # 绰号处理队列最大容量 + nickname_process_sleep_interval: float = 60 # 绰号处理进程休眠间隔(秒) + nickname_observation_context_size: int = 30 # 绰号处理选中上下文长度 # 模型配置 llm_reasoning: dict[str, str] = field(default_factory=lambda: {}) @@ -417,22 +420,26 @@ class BotConfig: def group_nickname(parent: dict): if config.INNER_VERSION in SpecifierSet(">=1.6.1.1"): - gn_config = parent.get("group_nickname", {}) - config.ENABLE_NICKNAME_MAPPING = gn_config.get( - "enable_nickname_mapping", config.ENABLE_NICKNAME_MAPPING + group_nickname_config = parent.get("group_nickname", {}) + config.enable_nickname_mapping = group_nickname_config.get( + "enable_nickname_mapping", config.enable_nickname_mapping ) - config.MAX_NICKNAMES_IN_PROMPT = gn_config.get( - "max_nicknames_in_prompt", config.MAX_NICKNAMES_IN_PROMPT + config.max_nicknames_in_prompt = group_nickname_config.get( + "max_nicknames_in_prompt", config.max_nicknames_in_prompt ) - config.NICKNAME_PROBABILITY_SMOOTHING = gn_config.get( - "nickname_probability_smoothing", config.NICKNAME_PROBABILITY_SMOOTHING + config.nickname_probability_smoothing = group_nickname_config.get( + "nickname_probability_smoothing", config.nickname_probability_smoothing ) - config.NICKNAME_QUEUE_MAX_SIZE = gn_config.get( - "nickname_queue_max_size", config.NICKNAME_QUEUE_MAX_SIZE + config.nickname_queue_max_size = group_nickname_config.get( + "nickname_queue_max_size", config.nickname_queue_max_size ) - config.NICKNAME_PROCESS_SLEEP_INTERVAL = gn_config.get( - "nickname_process_sleep_interval", config.NICKNAME_PROCESS_SLEEP_INTERVAL + config.nickname_process_sleep_interval = group_nickname_config.get( + "nickname_process_sleep_interval", config.nickname_process_sleep_interval ) + if config.INNER_VERSION in SpecifierSet(">=1.6.1.3"): + config.nickname_observation_context_size = group_nickname_config.get( + "nickname_observation_context_size", config.nickname_observation_context_size + ) def bot(parent: dict): # 机器人基础配置 @@ -620,6 +627,10 @@ class BotConfig: config.consolidate_memory_percentage = memory_config.get( "consolidate_memory_percentage", config.consolidate_memory_percentage ) + if config.INNER_VERSION in SpecifierSet(">=1.6.1.3"): + config.long_message_auto_truncate = memory_config.get( + "long_message_auto_truncate", config.long_message_auto_truncate + ) def remote(parent: dict): remote_config = parent["remote"] diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index ac158a66..72ba3032 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -205,7 +205,7 @@ class NicknameManager: log_prefix = f"[{current_chat_stream.stream_id}]" try: # 1. 获取历史记录 - history_limit = getattr(self.config, "NICKNAME_ANALYSIS_HISTORY_LIMIT", 30) + history_limit = getattr(self.config, "NICKNAME_ANALYSIS_HISTORY_LIMIT", global_config.nickname_observation_context_size) history_messages = get_raw_msg_before_timestamp_with_chat( chat_id=current_chat_stream.stream_id, timestamp=time.time(), diff --git a/src/plugins/utils/chat_message_builder.py b/src/plugins/utils/chat_message_builder.py index f30403e3..a7f79bbb 100644 --- a/src/plugins/utils/chat_message_builder.py +++ b/src/plugins/utils/chat_message_builder.py @@ -205,6 +205,8 @@ async def _build_readable_messages_internal( message_details_raw.sort(key=lambda x: x[0]) # 按时间戳(第一个元素)升序排序,越早的消息排在前面 # 应用截断逻辑 (如果 truncate 为 True) + if not global_config.long_message_auto_truncate: + truncate = False message_details: List[Tuple[float, str, str]] = [] n_messages = len(message_details_raw) if truncate and n_messages > 0: diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index f88f8521..2f080d40 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "1.6.1.2" +version = "1.6.1.3" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #如果你想要修改配置文件,请在修改后将version的值进行变更 @@ -131,6 +131,7 @@ max_nicknames_in_prompt = 10 # Prompt 中最多注入的绰号数量(防止to nickname_probability_smoothing = 1 # 绰号加权随机选择的平滑因子 nickname_queue_max_size = 100 # 绰号处理队列最大容量 nickname_process_sleep_interval = 60 # 绰号处理进程休眠间隔(秒) +nickname_observation_context_size = 30 # 绰号处理选中上下文长度 [memory] build_memory_interval = 2000 # 记忆构建间隔 单位秒 间隔越低,麦麦学习越多,但是冗余信息也会增多 @@ -152,6 +153,8 @@ memory_ban_words = [ # "403","张三" ] +long_message_auto_truncate = true # HFC 模式过长消息自动截断,防止他人 prompt 恶意注入,减少token消耗,但可能损失图片/长文信息,按需选择状态(默认开启) + [mood] mood_update_interval = 1.0 # 情绪更新间隔 单位秒 mood_decay_rate = 0.95 # 情绪衰减率