mirror of https://github.com/Mai-with-u/MaiBot.git
parent
d5a599d8ab
commit
aec1319d2b
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 # 记忆构建间隔 单位秒 间隔越低,麦麦学习越多,但是冗余信息也会增多
|
||||
|
|
|
|||
Loading…
Reference in New Issue