diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index 57ae6d11..8ef99f6e 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -48,8 +48,9 @@ reply 动作描述: 1.你可以选择呼叫了你的名字,但是你没有做出回应的消息进行回复 2.你可以自然的顺着正在进行的聊天内容进行回复或自然的提出一个问题 -3.不要选择回复你自己发送的消息 -4.不要单独对表情包进行回复 +3.最好一次对一个话题进行回复,免得啰嗦或者回复内容太乱。 +4.不要选择回复你自己发送的消息 +5.不要单独对表情包进行回复 {reply_action_example} no_reply diff --git a/src/chat/replyer/group_generator.py b/src/chat/replyer/group_generator.py index e8ba1f24..9d1c297e 100644 --- a/src/chat/replyer/group_generator.py +++ b/src/chat/replyer/group_generator.py @@ -635,7 +635,7 @@ class DefaultReplyer: # 获取基础personality prompt_personality = global_config.personality.personality - # 检查是否需要随机替换为状态 + # 检查是否需要随机替换为状态(personality 本体) if ( global_config.personality.states and global_config.personality.state_probability > 0 @@ -925,6 +925,17 @@ class DefaultReplyer: else: # think_level == 1 或默认 prompt_name = "replyer_prompt" + # 根据配置构建最终的 reply_style:支持 multiple_reply_style 按概率随机替换 + reply_style = global_config.personality.reply_style + multi_styles = getattr(global_config.personality, "multiple_reply_style", None) or [] + multi_prob = getattr(global_config.personality, "multiple_probability", 0.0) or 0.0 + if multi_styles and multi_prob > 0 and random.random() < multi_prob: + try: + reply_style = random.choice(list(multi_styles)) + except Exception: + # 兜底:即使 multiple_reply_style 配置异常也不影响正常回复 + reply_style = global_config.personality.reply_style + return await global_prompt_manager.format_prompt( prompt_name, expression_habits_block=expression_habits_block, @@ -940,7 +951,7 @@ class DefaultReplyer: dialogue_prompt=dialogue_prompt, time_block=time_block, reply_target_block=reply_target_block, - reply_style=global_config.personality.reply_style, + reply_style=reply_style, keywords_reaction_prompt=keywords_reaction_prompt, moderation_prompt=moderation_prompt_block, memory_retrieval=memory_retrieval, @@ -1021,6 +1032,16 @@ class DefaultReplyer: template_name = "default_expressor_prompt" + # 根据配置构建最终的 reply_style:支持 multiple_reply_style 按概率随机替换 + reply_style = global_config.personality.reply_style + multi_styles = getattr(global_config.personality, "multiple_reply_style", None) or [] + multi_prob = getattr(global_config.personality, "multiple_probability", 0.0) or 0.0 + if multi_styles and multi_prob > 0 and random.random() < multi_prob: + try: + reply_style = random.choice(list(multi_styles)) + except Exception: + reply_style = global_config.personality.reply_style + return await global_prompt_manager.format_prompt( template_name, expression_habits_block=expression_habits_block, @@ -1033,7 +1054,7 @@ class DefaultReplyer: reply_target_block=reply_target_block, raw_reply=raw_reply, reason=reason, - reply_style=global_config.personality.reply_style, + reply_style=reply_style, keywords_reaction_prompt=keywords_reaction_prompt, moderation_prompt=moderation_prompt_block, ) diff --git a/src/chat/replyer/prompt/replyer_prompt.py b/src/chat/replyer/prompt/replyer_prompt.py index 3689cf8f..6b92a3a9 100644 --- a/src/chat/replyer/prompt/replyer_prompt.py +++ b/src/chat/replyer/prompt/replyer_prompt.py @@ -20,6 +20,7 @@ def init_replyer_prompt(): 请注意把握聊天内容,不要回复的太有条理。 {reply_style} 请注意不要输出多余内容(包括不必要的前后缀,冒号,括号,表情包,at或 @等 ),只输出发言内容就好。 +最好一次对一个话题进行回复,免得啰嗦或者回复内容太乱。 现在,你说:""", "replyer_prompt_0", ) @@ -36,7 +37,8 @@ def init_replyer_prompt(): {reply_target_block}。 {planner_reasoning} {identity} -{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,把握当前的话题,然后给出日常且简短的回复,。 +{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,把握当前的话题,然后给出日常且简短的回复。 +最好一次对一个话题进行回复,免得啰嗦或者回复内容太乱。 {keywords_reaction_prompt} 请注意把握聊天内容。 {reply_style} diff --git a/src/config/official_configs.py b/src/config/official_configs.py index ccb1297a..0a2dc60b 100644 --- a/src/config/official_configs.py +++ b/src/config/official_configs.py @@ -43,7 +43,13 @@ class PersonalityConfig(ConfigBase): """人格""" reply_style: str = "" - """表达风格""" + """默认表达风格""" + + multiple_reply_style: list[str] = field(default_factory=lambda: []) + """可选的多种表达风格列表,当配置不为空时可按概率随机替换 reply_style""" + + multiple_probability: float = 0.0 + """每次构建回复时,从 multiple_reply_style 中随机替换 reply_style 的概率(0.0-1.0)""" plan_style: str = "" """说话规则,行为风格""" diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index ebd2b232..a85a241e 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "7.1.7" +version = "7.1.8" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- # 如果你想要修改配置文件,请递增version的值 @@ -27,6 +27,15 @@ personality = "是一个大二在读女大学生,现在正在上网和群友 # 描述麦麦说话的表达风格,表达习惯,如要修改,可以酌情新增内容,建议1-2行 reply_style = "请不要刻意突出自身学科背景。可以参考贴吧,知乎和微博的回复风格。" +# 多种回复风格列表,可选配置:当 non-empty 且 multiple_probability>0 时,会按概率随机从中选择一个替换 reply_style +multiple_reply_style = [ + "你的风格平淡但不失讽刺,不过分兴奋,很简短。可以参考贴吧,知乎和微博的回复风格。", + "说话偏口语化,偶尔带一点情绪,但不要太长篇,像B站评论区一样自然。", +] + +# 替换概率:每次构建回复时,以该概率从 multiple_reply_style 中随机选择一个替换 reply_style(0.0-1.0) +multiple_probability = 0.3 + # 麦麦的说话规则,行为风格: plan_style = """ 1.思考**所有**的可用的action中的**每个动作**是否符合当下条件,如果动作使用条件符合聊天内容就使用