增加大聪明判断,避免用户设置prompt注入数量为0的情况

将上下文数量提出配置中以让用户可以配置
统一使用小写字母
pull/914/head
Bakadax 2025-05-04 20:21:03 +08:00
parent d5a599d8ab
commit aec1319d2b
4 changed files with 31 additions and 22 deletions

View File

@ -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):

View File

@ -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(),

View File

@ -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:

View File

@ -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 # 记忆构建间隔 单位秒 间隔越低,麦麦学习越多,但是冗余信息也会增多