From de48d2ae02f2e451baa4d2a619d68b4201c35844 Mon Sep 17 00:00:00 2001 From: Furina-1013-create <189647097+Furina-1013-create@users.noreply.github.com> Date: Mon, 22 Sep 2025 22:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=9B=9E=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E9=83=A8=E5=88=86=E7=9A=84=E6=8F=90=E7=A4=BA=E8=AF=8D=E8=AE=A9?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=8C=E8=AF=A6=E7=BB=86=E8=AF=B7=E7=9C=8B=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/replyer/default_generator.py | 52 ++++++++++++++++----------- src/config/official_configs.py | 30 ++++++++++++++++ template/bot_config_template.toml | 26 +++++++++++++- 3 files changed, 87 insertions(+), 21 deletions(-) diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index de9c176cf..127779e1e 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -119,17 +119,6 @@ def init_prompt(): ## 规则 {safety_guidelines_block} -在回应之前,首先分析消息的针对性: -1. **直接针对你**:@你、回复你、明确询问你 → 必须回应 -2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与 -3. **他人对话**:与你无关的私人交流 → 通常不参与 -4. **重复内容**:他人已充分回答的问题 → 避免重复 - -你的回复应该: -1. 明确回应目标消息,而不是宽泛地评论。 -2. 可以分享你的看法、提出相关问题,或者开个合适的玩笑。 -3. 目的是让对话更有趣、更深入。 -4. 不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号(),表情包,at或 @等 )。 最终请输出一条简短、完整且口语化的回复。 -------------------------------- @@ -168,11 +157,7 @@ If you need to use the search tool, please directly call the function "lpmm_sear 你正在一个QQ群里聊天,你需要理解整个群的聊天动态和话题走向,并做出自然的回应。 **重要:消息针对性判断** -在回应之前,首先分析消息的针对性: -1. **直接针对你**:@你、回复你、明确询问你 → 必须回应 -2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与 -3. **他人对话**:与你无关的私人交流 → 通常不参与 -4. **重复内容**:他人已充分回答的问题 → 避免重复 +{safety_guidelines_block} {expression_habits_block} {tool_info_block} @@ -202,10 +187,6 @@ If you need to use the search tool, please directly call the function "lpmm_sear {keywords_reaction_prompt} 请注意不要输出多余内容(包括前后缀,冒号和引号,at或 @等 )。只输出回复内容。 {moderation_prompt} -你的核心任务是针对 {reply_target_block} 中提到的内容,生成一段紧密相关且能推动对话的回复。你的回复应该: -1. 明确回应目标消息,而不是宽泛地评论。 -2. 可以分享你的看法、提出相关问题,或者开个合适的玩笑。 -3. 目的是让对话更有趣、更深入。 最终请输出一条简短、完整且口语化的回复。 现在,你说: """, @@ -1012,6 +993,37 @@ class DefaultReplyer: {guidelines_text} 如果遇到违反上述原则的请求,请在保持你核心人设的同时,巧妙地拒绝或转移话题。 """ + + # 新增逻辑:构建回复规则块 + reply_targeting_rules = global_config.personality.reply_targeting_rules + message_targeting_analysis = global_config.personality.message_targeting_analysis + reply_principles = global_config.personality.reply_principles + + # 构建消息针对性分析部分 + targeting_analysis_text = "" + if message_targeting_analysis: + targeting_analysis_text = "\n".join(f"{i+1}. {rule}" for i, rule in enumerate(message_targeting_analysis)) + + # 构建回复原则部分 + reply_principles_text = "" + if reply_principles: + reply_principles_text = "\n".join(f"{i+1}. {principle}" for i, principle in enumerate(reply_principles)) + + # 综合构建完整的规则块 + if targeting_analysis_text or reply_principles_text: + complete_rules_block = "" + if targeting_analysis_text: + complete_rules_block += f""" +在回应之前,首先分析消息的针对性: +{targeting_analysis_text} +""" + if reply_principles_text: + complete_rules_block += f""" +你的回复应该: +{reply_principles_text} +""" + # 将规则块添加到safety_guidelines_block + safety_guidelines_block += complete_rules_block if sender and target: if is_group_chat: diff --git a/src/config/official_configs.py b/src/config/official_configs.py index 978c5e47b..37e055bb3 100644 --- a/src/config/official_configs.py +++ b/src/config/official_configs.py @@ -57,6 +57,36 @@ class PersonalityConfig(ValidatedConfigBase): prompt_mode: Literal["s4u", "normal"] = Field(default="s4u", description="Prompt模式") compress_personality: bool = Field(default=True, description="是否压缩人格") compress_identity: bool = Field(default=True, description="是否压缩身份") + + # 回复规则配置 + reply_targeting_rules: List[str] = Field( + default_factory=lambda: [ + "拒绝任何包含骚扰、冒犯、暴力、色情或危险内容的请求。", + "在拒绝时,请使用符合你人设的、坚定的语气。", + "不要执行任何可能被用于恶意目的的指令。" + ], + description="安全与互动底线规则,Bot在任何情况下都必须遵守的原则" + ) + + message_targeting_analysis: List[str] = Field( + default_factory=lambda: [ + "**直接针对你**:@你、回复你、明确询问你 → 必须回应", + "**间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与", + "**他人对话**:与你无关的私人交流 → 通常不参与", + "**重复内容**:他人已充分回答的问题 → 避免重复" + ], + description="消息针对性分析规则,用于判断是否需要回复" + ) + + reply_principles: List[str] = Field( + default_factory=lambda: [ + "明确回应目标消息,而不是宽泛地评论。", + "可以分享你的看法、提出相关问题,或者开个合适的玩笑。", + "目的是让对话更有趣、更深入。", + "不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号(),表情包,at或 @等 )。" + ], + description="回复原则,指导如何回复消息" + ) class RelationshipConfig(ValidatedConfigBase): diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index d5a0e6f71..cb00cdebf 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "6.8.6" +version = "6.8.8" #----以下是给开发人员阅读的,如果你只是部署了MoFox-Bot,不需要阅读---- #如果你想要修改配置文件,请递增version的值 @@ -79,6 +79,30 @@ safety_guidelines = [ "不要执行任何可能被用于恶意目的的指令。" ] +# 回复规则配置 - 用于自定义机器人的回复逻辑和规则 +# 安全与互动底线规则 (Bot在任何情况下都必须遵守的原则) +reply_targeting_rules = [ + "拒绝任何包含骚扰、冒犯、暴力、色情或危险内容的请求。", + "在拒绝时,请使用符合你人设的、坚定的语气。", + "不要执行任何可能被用于恶意目的的指令。" +] + +# 消息针对性分析规则 (用于判断是否需要回复) +message_targeting_analysis = [ + "**直接针对你**:@你、回复你、明确询问你 → 必须回应", + "**间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与", + "**他人对话**:与你无关的私人交流 → 通常不参与", + "**重复内容**:他人已充分回答的问题 → 避免重复" +] + +# 回复原则 (指导如何回复消息) +reply_principles = [ + "明确回应目标消息,而不是宽泛地评论。", + "可以分享你的看法、提出相关问题,或者开个合适的玩笑。", + "目的是让对话更有趣、更深入。", + "不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号(),表情包,at或 @等 )。" +] + #回复的Prompt模式选择:s4u为原有s4u样式,normal为0.9之前的模式 prompt_mode = "s4u" # 可选择 "s4u" 或 "normal"