From aec1319d2b9fbd46ec4f95d619e4e24a5f75c247 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Sun, 4 May 2025 20:21:03 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=A7=E8=81=AA?= =?UTF-8?q?=E6=98=8E=E5=88=A4=E6=96=AD=EF=BC=8C=E9=81=BF=E5=85=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E7=BD=AEprompt=E6=B3=A8=E5=85=A5=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=BA0=E7=9A=84=E6=83=85=E5=86=B5=20=E5=B0=86?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E6=95=B0=E9=87=8F=E6=8F=90=E5=87=BA?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=AD=E4=BB=A5=E8=AE=A9=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E9=85=8D=E7=BD=AE=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=B0=8F=E5=86=99=E5=AD=97=E6=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.py | 36 ++++++++++--------- .../group_nickname/nickname_manager.py | 12 ++++--- src/plugins/group_nickname/nickname_utils.py | 4 +-- template/bot_config_template.toml | 1 + 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/config/config.py b/src/config/config.py index 312f3e95..2f091cba 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -275,11 +275,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_analysis_history_limit: int = 30 # 绰号处理可见最大上下文 # 模型配置 llm_reasoning: dict[str, str] = field(default_factory=lambda: {}) @@ -412,21 +413,24 @@ class BotConfig: def group_nickname(parent: dict): if config.INNER_VERSION in SpecifierSet(">=1.6.2"): - 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 + ) + config.nickname_analysis_history_limit = group_nickname_config.get( + "nickname_analysis_history_limit", config.nickname_analysis_history_limit ) def bot(parent: dict): diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index ac158a66..609884be 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -103,7 +103,7 @@ class NicknameManager: logger.info("正在初始化 NicknameManager 组件...") self.config = global_config - self.is_enabled = self.config.ENABLE_NICKNAME_MAPPING + self.is_enabled = self.config.enable_nickname_mapping # 数据库处理器 person_info_collection = getattr(db, "person_info", None) @@ -138,12 +138,12 @@ class NicknameManager: self.is_enabled = False # 队列和线程 - self.queue_max_size = getattr(self.config, "NICKNAME_QUEUE_MAX_SIZE", 100) + self.queue_max_size = getattr(self.config, "nickname_queue_max_size", 100) # 使用 asyncio.Queue self.nickname_queue: asyncio.Queue = asyncio.Queue(maxsize=self.queue_max_size) self._stop_event = threading.Event() # stop_event 仍然使用 threading.Event,因为它是由另一个线程设置的 self._nickname_thread: Optional[threading.Thread] = None - self.sleep_interval = getattr(self.config, "NICKNAME_PROCESS_SLEEP_INTERVAL", 0.5) # 超时时间 + self.sleep_interval = getattr(self.config, "nickname_process_sleep_interval", 60) # 超时时间 self._initialized = True logger.info("NicknameManager 初始化完成。") @@ -153,6 +153,10 @@ class NicknameManager: if not self.is_enabled: logger.info("绰号处理功能已禁用,处理器未启动。") return + if global_config.max_nicknames_in_prompt == 0: # 考虑有神秘的用户输入为0的可能性 + logger.error("[错误] 绰号注入数量不合适,绰号处理功能已禁用!") + return + if self._nickname_thread is None or not self._nickname_thread.is_alive(): logger.info("正在启动绰号处理器线程...") self._stop_event.clear() @@ -205,7 +209,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", 30) history_messages = get_raw_msg_before_timestamp_with_chat( chat_id=current_chat_stream.stream_id, timestamp=time.time(), diff --git a/src/plugins/group_nickname/nickname_utils.py b/src/plugins/group_nickname/nickname_utils.py index 4fdca08d..c5896b02 100644 --- a/src/plugins/group_nickname/nickname_utils.py +++ b/src/plugins/group_nickname/nickname_utils.py @@ -25,7 +25,7 @@ def select_nicknames_for_prompt(all_nicknames_info: Dict[str, List[Dict[str, int return [] candidates = [] # 存储 (用户名, 绰号, 次数, 权重) - smoothing_factor = getattr(global_config, "NICKNAME_PROBABILITY_SMOOTHING", 1.0) # 平滑因子,避免权重为0 + smoothing_factor = getattr(global_config, "nickname_probability_smoothing", 1.0) # 平滑因子,避免权重为0 for user_name, nicknames in all_nicknames_info.items(): if nicknames and isinstance(nicknames, list): @@ -48,7 +48,7 @@ def select_nicknames_for_prompt(all_nicknames_info: Dict[str, List[Dict[str, int return [] # 确定需要选择的数量 - max_nicknames = getattr(global_config, "MAX_NICKNAMES_IN_PROMPT", 5) + max_nicknames = getattr(global_config, "max_nicknames_in_prompt", 5) num_to_select = min(max_nicknames, len(candidates)) try: diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 6723f2de..9de4c562 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -129,6 +129,7 @@ max_nicknames_in_prompt = 10 # Prompt 中最多注入的绰号数量(防止to nickname_probability_smoothing = 1 # 绰号加权随机选择的平滑因子 nickname_queue_max_size = 100 # 绰号处理队列最大容量 nickname_process_sleep_interval = 60 # 绰号处理进程休眠间隔(秒) +nickname_analysis_history_limit = 30 # 绰号处理可见最大上下文 [memory] build_memory_interval = 2000 # 记忆构建间隔 单位秒 间隔越低,麦麦学习越多,但是冗余信息也会增多 From 11a73d611f059ab60fd23cf1d526f02479864d3c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 4 May 2025 12:22:53 +0000 Subject: [PATCH 02/10] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/nickname_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index 609884be..fc1fcf45 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -153,7 +153,7 @@ class NicknameManager: if not self.is_enabled: logger.info("绰号处理功能已禁用,处理器未启动。") return - if global_config.max_nicknames_in_prompt == 0: # 考虑有神秘的用户输入为0的可能性 + if global_config.max_nicknames_in_prompt == 0: # 考虑有神秘的用户输入为0的可能性 logger.error("[错误] 绰号注入数量不合适,绰号处理功能已禁用!") return From d108f95b099d3e98e9512b3dff0b9fa6ad3971d8 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Mon, 5 May 2025 15:09:38 +0800 Subject: [PATCH 03/10] =?UTF-8?q?prompt=20=E5=9C=A8=20debug=20=E4=B8=AD?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E6=89=93=E5=8D=B0=E4=BB=A5=E4=BE=BF=E8=B0=83?= =?UTF-8?q?=E8=AF=95=20=E5=A2=9E=E5=8A=A0=E6=98=A0=E5=B0=84=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=20botqq=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/nickname_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index fc1fcf45..0a9219d3 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -252,7 +252,7 @@ class NicknameManager: ), None, ) - user_name_map[user_id] = latest_nickname or f"未知({user_id})" + user_name_map[user_id] = latest_nickname or f"{global_config.BOT_NICKNAME}(你)" if user_id == global_config.BOT_QQ else f"未知" item = (chat_history_str, bot_reply_str, platform, group_id, user_name_map) await self._add_to_queue(item, platform, group_id) @@ -391,7 +391,7 @@ class NicknameManager: return {"is_exist": False} prompt = _build_mapping_prompt(chat_history_str, bot_reply, user_name_map) - logger.debug(f"构建的绰号映射 Prompt:\n{prompt[:500]}...") + logger.debug(f"构建的绰号映射 Prompt:\n{prompt}...") try: response_content, _, _ = await self.llm_mapper.generate_response(prompt) From 3d49be43b899269b0fbc8ec9532a57b24de1c992 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Mon, 5 May 2025 15:11:21 +0800 Subject: [PATCH 04/10] ruff --- src/plugins/group_nickname/nickname_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index 0a9219d3..c9fed976 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -252,7 +252,7 @@ class NicknameManager: ), None, ) - user_name_map[user_id] = latest_nickname or f"{global_config.BOT_NICKNAME}(你)" if user_id == global_config.BOT_QQ else f"未知" + user_name_map[user_id] = latest_nickname or f"{global_config.BOT_NICKNAME}(你)" if user_id == global_config.BOT_QQ else "未知" item = (chat_history_str, bot_reply_str, platform, group_id, user_name_map) await self._add_to_queue(item, platform, group_id) From c87ac0098259639918222be327a36cc1b1848bc9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 5 May 2025 07:11:42 +0000 Subject: [PATCH 05/10] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/nickname_manager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index c9fed976..7aa2b42f 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -252,7 +252,11 @@ class NicknameManager: ), None, ) - user_name_map[user_id] = latest_nickname or f"{global_config.BOT_NICKNAME}(你)" if user_id == global_config.BOT_QQ else "未知" + user_name_map[user_id] = ( + latest_nickname or f"{global_config.BOT_NICKNAME}(你)" + if user_id == global_config.BOT_QQ + else "未知" + ) item = (chat_history_str, bot_reply_str, platform, group_id, user_name_map) await self._add_to_queue(item, platform, group_id) From 54ac1d0aaad35e92762e38467decba626b1d7934 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Mon, 5 May 2025 15:38:27 +0800 Subject: [PATCH 06/10] =?UTF-8?q?prompt=20=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E9=BB=98=E8=AE=A4=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/nickname_manager.py | 2 +- src/plugins/group_nickname/nickname_mapper.py | 1 - template/bot_config_template.toml | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index 7aa2b42f..bde7e456 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -253,7 +253,7 @@ class NicknameManager: None, ) user_name_map[user_id] = ( - latest_nickname or f"{global_config.BOT_NICKNAME}(你)" + latest_nickname or f"{global_config.BOT_NICKNAME}" if user_id == global_config.BOT_QQ else "未知" ) diff --git a/src/plugins/group_nickname/nickname_mapper.py b/src/plugins/group_nickname/nickname_mapper.py index 35f96445..b41215cd 100644 --- a/src/plugins/group_nickname/nickname_mapper.py +++ b/src/plugins/group_nickname/nickname_mapper.py @@ -32,7 +32,6 @@ def _build_mapping_prompt(chat_history_str: str, bot_reply: str, user_name_map: 已知用户信息(ID: 名称): {user_list_str} -*注意:名称后面带有"(你)"表示是你自己。* 聊天记录: --- diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 9de4c562..c13d64dc 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -301,11 +301,11 @@ pri_out = 8 #绰号映射生成模型 [model.llm_nickname_mapping] -name = "deepseek-ai/DeepSeek-V3" +name = "Qwen/Qwen2.5-32B-Instruct" provider = "SILICONFLOW" -temp = 0.3 -pri_in = 2 -pri_out = 8 +temp = 0.7 +pri_in = 1.26 +pri_out = 1.26 #以下模型暂时没有使用!! #以下模型暂时没有使用!! From 2289b91a32aedc49f0c282b1b24d4e8e2a055021 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 6 May 2025 16:53:30 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.py | 4 ++-- template/bot_config_template.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config/config.py b/src/config/config.py index 2f091cba..d27bb7a3 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -412,7 +412,7 @@ class BotConfig: config.steal_emoji = emoji_config.get("steal_emoji", config.steal_emoji) def group_nickname(parent: dict): - if config.INNER_VERSION in SpecifierSet(">=1.6.2"): + if config.INNER_VERSION in SpecifierSet(">=1.6.3"): group_nickname_config = parent.get("group_nickname", {}) config.enable_nickname_mapping = group_nickname_config.get( "enable_nickname_mapping", config.enable_nickname_mapping @@ -724,7 +724,7 @@ class BotConfig: "chat": {"func": chat, "support": ">=1.6.0", "necessary": False}, "normal_chat": {"func": normal_chat, "support": ">=1.6.0", "necessary": False}, "focus_chat": {"func": focus_chat, "support": ">=1.6.0", "necessary": False}, - "group_nickname": {"func": group_nickname, "support": ">=0.6.3", "necessary": False}, + "group_nickname": {"func": group_nickname, "support": ">=1.6.3", "necessary": False}, } # 原地修改,将 字符串版本表达式 转换成 版本对象 diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index f4e00bfb..ab1d8b4c 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "1.6.2" +version = "1.6.3" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #如果你想要修改配置文件,请在修改后将version的值进行变更 From 4033c6d8adbb172c53d92f006e054782052e1f96 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 13 May 2025 13:09:29 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E7=BB=B0=E5=8F=B7=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config.py | 6 +++++- src/plugins/group_nickname/nickname_manager.py | 18 +++++++++++++++--- template/bot_config_template.toml | 3 ++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/config/config.py b/src/config/config.py index 3bb14c2e..5fe216ad 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -279,8 +279,9 @@ class BotConfig: 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_process_sleep_interval: float = 5 # 绰号处理进程休眠间隔(秒) nickname_analysis_history_limit: int = 30 # 绰号处理可见最大上下文 + nickname_analysis_probability: float = 0.1 # 绰号随机概率命中,该值越大,绰号分析越频繁 # 模型配置 llm_reasoning: dict[str, str] = field(default_factory=lambda: {}) @@ -432,6 +433,9 @@ class BotConfig: config.nickname_analysis_history_limit = group_nickname_config.get( "nickname_analysis_history_limit", config.nickname_analysis_history_limit ) + config.nickname_analysis_probability = group_nickname_config.get( + "nickname_analysis_probability", config.nickname_analysis_probability + ) def bot(parent: dict): # 机器人基础配置 diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index bde7e456..378755e1 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -1,7 +1,9 @@ import asyncio import threading +import random import time import json +import random import re from typing import Dict, Optional, List, Any from pymongo.errors import OperationFailure, DuplicateKeyError @@ -143,7 +145,7 @@ class NicknameManager: self.nickname_queue: asyncio.Queue = asyncio.Queue(maxsize=self.queue_max_size) self._stop_event = threading.Event() # stop_event 仍然使用 threading.Event,因为它是由另一个线程设置的 self._nickname_thread: Optional[threading.Thread] = None - self.sleep_interval = getattr(self.config, "nickname_process_sleep_interval", 60) # 超时时间 + self.sleep_interval = getattr(self.config, "nickname_process_sleep_interval", 5) # 超时时间 self._initialized = True logger.info("NicknameManager 初始化完成。") @@ -176,6 +178,7 @@ class NicknameManager: self._stop_event.set() # 设置停止事件,_processing_loop 会检测到 try: # 不需要清空 asyncio.Queue,让循环自然结束或被取消 + # self.empty_queue(self.nickname_queue) self._nickname_thread.join(timeout=10) # 等待线程结束 if self._nickname_thread.is_alive(): logger.warning("绰号处理器线程在超时后仍未停止。") @@ -188,6 +191,13 @@ class NicknameManager: else: logger.info("绰号处理器线程未在运行或已被清理。") + # def empty_queue(self, q: asyncio.Queue): + # while not q.empty(): + # # Depending on your program, you may want to + # # catch QueueEmpty + # q.get_nowait() + # q.task_done() + async def trigger_nickname_analysis( self, anchor_message: MessageRecv, @@ -201,6 +211,10 @@ class NicknameManager: if not self.is_enabled: return + if random.random() < global_config.nickname_analysis_probability: + logger.debug("跳过绰号分析:随机概率未命中。") + return + current_chat_stream = chat_stream or anchor_message.chat_stream if not current_chat_stream or not current_chat_stream.group_info: logger.debug("跳过绰号分析:非群聊或无效的聊天流。") @@ -353,7 +367,6 @@ class NicknameManager: logger.info(f"{log_prefix} LLM 找到绰号映射,准备更新数据库: {nickname_map_to_update}") for user_id_str, nickname in nickname_map_to_update.items(): - # ... (验证和数据库更新逻辑保持不变) ... if not user_id_str or not nickname: logger.warning(f"{log_prefix} 跳过无效条目: user_id='{user_id_str}', nickname='{nickname}'") continue @@ -389,7 +402,6 @@ class NicknameManager: """ 内部方法:调用 LLM 分析聊天记录和 Bot 回复,提取可靠的 用户ID-绰号 映射。 """ - # ... (此方法内部逻辑保持不变) ... if not self.llm_mapper: logger.error("LLM 映射器未初始化,无法执行分析。") return {"is_exist": False} diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 0bb78789..431d5a04 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -128,8 +128,9 @@ enable_nickname_mapping = false # 绰号映射功能总开关(默认关闭, max_nicknames_in_prompt = 10 # Prompt 中最多注入的绰号数量(防止token数量爆炸) nickname_probability_smoothing = 1 # 绰号加权随机选择的平滑因子 nickname_queue_max_size = 100 # 绰号处理队列最大容量 -nickname_process_sleep_interval = 60 # 绰号处理进程休眠间隔(秒) +nickname_process_sleep_interval = 5 # 绰号处理进程休眠间隔(秒),不建议超过5,否则大概率导致结束过程中超时 nickname_analysis_history_limit = 30 # 绰号处理可见最大上下文 +nickname_analysis_probability = 0.1 # 绰号随机概率命中,该值越大,绰号分析越频繁 [memory] build_memory_interval = 2000 # 记忆构建间隔 单位秒 间隔越低,麦麦学习越多,但是冗余信息也会增多 From c5ea710af239f832f99a395028355d78071d9e05 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 13 May 2025 13:11:49 +0800 Subject: [PATCH 09/10] =?UTF-8?q?ruff=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/group_nickname/nickname_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index 378755e1..3e056244 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -3,8 +3,8 @@ import threading import random import time import json -import random import re +from random import random from typing import Dict, Optional, List, Any from pymongo.errors import OperationFailure, DuplicateKeyError from src.common.logger_manager import get_logger @@ -211,7 +211,7 @@ class NicknameManager: if not self.is_enabled: return - if random.random() < global_config.nickname_analysis_probability: + if random() < global_config.nickname_analysis_probability: logger.debug("跳过绰号分析:随机概率未命中。") return From 7f2fe6742a23763343fb8f9ad5ae52c17b7258a3 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 13 May 2025 13:13:52 +0800 Subject: [PATCH 10/10] ruff! --- src/plugins/group_nickname/nickname_manager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/group_nickname/nickname_manager.py b/src/plugins/group_nickname/nickname_manager.py index 3e056244..68210572 100644 --- a/src/plugins/group_nickname/nickname_manager.py +++ b/src/plugins/group_nickname/nickname_manager.py @@ -4,7 +4,6 @@ import random import time import json import re -from random import random from typing import Dict, Optional, List, Any from pymongo.errors import OperationFailure, DuplicateKeyError from src.common.logger_manager import get_logger @@ -211,7 +210,7 @@ class NicknameManager: if not self.is_enabled: return - if random() < global_config.nickname_analysis_probability: + if random.random() < global_config.nickname_analysis_probability: logger.debug("跳过绰号分析:随机概率未命中。") return