diff --git a/changelog_config.md b/changelog_config.md index c4c56064..4f6d842d 100644 --- a/changelog_config.md +++ b/changelog_config.md @@ -1,5 +1,9 @@ # Changelog +## [0.0.7] - 2025-3-12 +### Update +- 使用`personality_probs`数组替代`personality_1/2/3_probability`人格概率,支持任意人格数量 + ## [0.0.5] - 2025-3-11 ### Added - 新增了 `alias_names` 配置项,用于指定麦麦的别名。 diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index ec1f86f2..693e1369 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -91,9 +91,14 @@ class BotConfig: PROMPT_SCHEDULE_GEN = "一个曾经学习地质,现在学习心理学和脑科学的女大学生,喜欢刷qq,贴吧,知乎和小红书" - PERSONALITY_1: float = 0.6 # 第一种人格概率 - PERSONALITY_2: float = 0.3 # 第二种人格概率 - PERSONALITY_3: float = 0.1 # 第三种人格概率 + # 人设概率默认配置(总和应为1) + PERSONALITY_PROBS: List[float] = field( + default_factory = lambda: [ + 0.6, # 第一种人格概率 + 0.3, # 第二种人格概率 + 0.1 # 第三种人格概率 + ] + ) # 人格概率分布 build_memory_interval: int = 600 # 记忆构建间隔(秒) @@ -171,16 +176,23 @@ class BotConfig: def personality(parent: dict): personality_config = parent["personality"] personality = personality_config.get("prompt_personality") - if len(personality) >= 2: - logger.debug(f"载入自定义人格:{personality}") + if config.INNER_VERSION in SpecifierSet(">=0.0.9") or len(personality) >= 2: + logger.debug(f"载入自定义人格:{personality_config.get('prompt_personality', config.PROMPT_PERSONALITY)}") config.PROMPT_PERSONALITY = personality_config.get("prompt_personality", config.PROMPT_PERSONALITY) logger.info(f"载入自定义日程prompt:{personality_config.get('prompt_schedule', config.PROMPT_SCHEDULE_GEN)}") config.PROMPT_SCHEDULE_GEN = personality_config.get("prompt_schedule", config.PROMPT_SCHEDULE_GEN) - if config.INNER_VERSION in SpecifierSet(">=0.0.2"): - config.PERSONALITY_1 = personality_config.get("personality_1_probability", config.PERSONALITY_1) - config.PERSONALITY_2 = personality_config.get("personality_2_probability", config.PERSONALITY_2) - config.PERSONALITY_3 = personality_config.get("personality_3_probability", config.PERSONALITY_3) + if config.INNER_VERSION in SpecifierSet(">=0.0.9"): + config.PERSONALITY_PROBS = personality_config.get("personality_probs", config.PERSONALITY_PROBS) + if len(config.PERSONALITY_PROBS) != len(personality): + logger.error("人格设定[prompt_personality]数量和人格概率[personality_probs]数量不相等,请检查") + raise ValueError("人格设定[prompt_personality]数量和人格概率[personality_probs]数量不相等,,请检查") + elif config.INNER_VERSION in SpecifierSet(">=0.0.2"): + config.PERSONALITY_PROBS = [ + personality_config.get("personality_1_probability", 0.6), + personality_config.get("personality_2_probability", 0.3), + personality_config.get("personality_3_probability", 0.1) + ] def emoji(parent: dict): emoji_config = parent["emoji"] diff --git a/src/plugins/chat/prompt_builder.py b/src/plugins/chat/prompt_builder.py index 1acc5fb7..e26c2c2a 100644 --- a/src/plugins/chat/prompt_builder.py +++ b/src/plugins/chat/prompt_builder.py @@ -146,10 +146,7 @@ class PromptBuilder: + "\n".join(f'- 命中关键字: {", ".join(map(repr, matched_kws))}; 回复要求: {reaction!r}' for matched_kws, reaction in triggered_keyword_prompt_arr) # 人格选择 - personality = global_config.PROMPT_PERSONALITY - probability_1 = global_config.PERSONALITY_1 - probability_2 = global_config.PERSONALITY_2 - probability_3 = global_config.PERSONALITY_3 + personality = random.choices(global_config.PROMPT_PERSONALITY, global_config.PERSONALITY_PROBS)[0] prompt_personality = f'{activate_prompt}你的网名叫{global_config.BOT_NICKNAME},你还有很多别名:{"/".join(global_config.BOT_ALIAS_NAMES)},' personality_choice = random.random() @@ -158,15 +155,15 @@ class PromptBuilder: else: prompt_in_group=f"你正在{chat_stream.platform}上和{sender_name}私聊" if personality_choice < probability_1: # 第一种人格 - prompt_personality += f'''{personality[0]}, 你正在浏览qq群,{promt_info_prompt}, + prompt_personality += f'''{personality}, 你正在浏览qq群,{promt_info_prompt}, 现在请你给出日常且口语化的回复,平淡一些,尽量简短一些。{keywords_reaction_prompt} 请注意把握群里的聊天内容,不要刻意突出自身学科背景,不要回复的太有条理,可以有个性。''' elif personality_choice < probability_1 + probability_2: # 第二种人格 - prompt_personality += f'''{personality[1]}, 你正在浏览qq群,{promt_info_prompt}, + prompt_personality += f'''{personality}, 你正在浏览qq群,{promt_info_prompt}, 现在请你给出日常且口语化的回复,请表现你自己的见解,不要一昧迎合,尽量简短一些。{keywords_reaction_prompt} 请你表达自己的见解和观点。可以有个性。''' else: # 第三种人格 - prompt_personality += f'''{personality[2]}, 你正在浏览qq群,{promt_info_prompt}, + prompt_personality += f'''{personality}, 你正在浏览qq群,{promt_info_prompt}, 现在请你给出日常且口语化的回复,请表现你自己的见解,不要一昧迎合,尽量简短一些。{keywords_reaction_prompt} 请你表达自己的见解和观点。可以有个性。''' diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 089be69b..7b292e35 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "0.0.8" +version = "0.0.9" #如果你想要修改配置文件,请在修改后将version的值进行变更 #如果新增项目,请在BotConfig类下新增相应的变量 @@ -23,9 +23,11 @@ prompt_personality = [ "是一个女大学生,你有黑色头发,你会刷小红书", # 小红书人格 "是一个女大学生,你会刷b站,对ACG文化感兴趣" # b站人格 ] -personality_1_probability = 0.6 # 第一种人格出现概率 -personality_2_probability = 0.3 # 第二种人格出现概率 -personality_3_probability = 0.1 # 第三种人格出现概率,请确保三个概率相加等于1 +personality_probs = [ + 0.6, # 第一种人格出现概率 + 0.3, # 第二种人格出现概率 + 0.1 # 第三种人格出现概率,请确保三个概率相加等于1 +] prompt_schedule = "一个曾经学习地质,现在学习心理学和脑科学的女大学生,喜欢刷qq,贴吧,知乎和小红书" [message]