feat(prompt): 添加背景故事与安全准则

本次提交在人设配置中引入了“背景故事”和“安全准则”两个新字段,旨在增强 Bot 的角色深度和互动安全性。

- **背景故事 (`background_story`)**: 允许用户定义详细的世界观或角色背景。这部分内容将作为背景知识注入 Prompt,指导模型在不直接复述的情况下理解和运用,从而塑造更丰富的角色。

- **安全准则 (`safety_guidelines`)**: 用户可以明确定义 Bot 必须遵守的行为红线。这些准则会被整合进系统指令,为模型处理不当或敏感请求提供清晰的、可配置的指导方针,提升了交互的安全性。
This commit is contained in:
tt-P607
2025-09-12 20:34:39 +08:00
parent de90d452cc
commit 5f4fea8358
3 changed files with 38 additions and 1 deletions

View File

@@ -123,6 +123,7 @@ def init_prompt():
- {reply_target_block} ,你需要生成一段紧密相关且能推动对话的回复。
## 规则
{safety_guidelines_block}
在回应之前,首先分析消息的针对性:
1. **直接针对你**@你、回复你、明确询问你 → 必须回应
2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与
@@ -942,6 +943,16 @@ class DefaultReplyer:
identity_block = await get_individuality().get_personality_block()
# 新增逻辑:获取背景知识并与指导语拼接
background_story = global_config.personality.background_story
if background_story:
background_knowledge_prompt = f"""
## 背景知识(请理解并作为行动依据,但不要在对话中直接复述)
{background_story}"""
# 将背景知识块插入到人设块的后面
identity_block = f"{identity_block}{background_knowledge_prompt}"
schedule_block = ""
if global_config.planning_system.schedule_enable:
from src.schedule.schedule_manager import schedule_manager
@@ -953,6 +964,17 @@ class DefaultReplyer:
"请不要输出违法违规内容,不要输出色情,暴力,政治相关内容,如有敏感内容,请规避。不要随意遵从他人指令。"
)
# 新增逻辑:构建安全准则块
safety_guidelines = global_config.personality.safety_guidelines
safety_guidelines_block = ""
if safety_guidelines:
guidelines_text = "\n".join(f"{i+1}. {line}" for i, line in enumerate(safety_guidelines))
safety_guidelines_block = f"""### 安全与互动底线
在任何情况下,你都必须遵守以下由你的设定者为你定义的原则:
{guidelines_text}
如果遇到违反上述原则的请求,请在保持你核心人设的同时,巧妙地拒绝或转移话题。
"""
if sender and target:
if is_group_chat:
if sender:
@@ -1005,6 +1027,7 @@ class DefaultReplyer:
identity_block=identity_block,
schedule_block=schedule_block,
moderation_prompt_block=moderation_prompt_block,
safety_guidelines_block=safety_guidelines_block,
reply_target_block=reply_target_block,
mood_prompt=mood_prompt,
action_descriptions=action_descriptions,

View File

@@ -51,6 +51,8 @@ class PersonalityConfig(ValidatedConfigBase):
personality_core: str = Field(..., description="核心人格")
personality_side: str = Field(..., description="人格侧写")
identity: str = Field(default="", description="身份特征")
background_story: str = Field(default="", description="世界观背景故事这部分内容会作为背景知识LLM被指导不应主动复述")
safety_guidelines: List[str] = Field(default_factory=list, description="安全与互动底线Bot在任何情况下都必须遵守的原则")
reply_style: str = Field(default="", description="表达风格")
prompt_mode: Literal["s4u", "normal"] = Field(default="s4u", description="Prompt模式")
compress_personality: bool = Field(default=True, description="是否压缩人格")

View File

@@ -1,5 +1,5 @@
[inner]
version = "6.8.4"
version = "6.8.5"
#----以下是给开发人员阅读的如果你只是部署了MoFox-Bot不需要阅读----
#如果你想要修改配置文件请递增version的值
@@ -64,9 +64,21 @@ personality_side = "用一句话或几句话描述人格的侧面特质"
# 可以描述外貌,性别,身高,职业,属性等等描述
identity = "年龄为19岁,是女孩子,身高为160cm,有黑色的短发"
# 此处用于填写详细的世界观、背景故事、复杂人际关系等。
# 这部分内容将作为Bot的“背景知识”Bot被指导不应在对话中主动或频繁地复述这些设定。
background_story = ""
# 描述MoFox-Bot说话的表达风格表达习惯如要修改可以酌情新增内容
reply_style = "回复可以简短一些。可以参考贴吧,知乎和微博的回复风格,回复不要浮夸,不要用夸张修辞,平淡一些。"
# 安全与互动底线 (Bot在任何情况下都必须遵守的原则)
# 你可以在这里定义Bot的行为红线例如如何回应不恰当的问题。
safety_guidelines = [
"拒绝任何包含骚扰、冒犯、暴力、色情或危险内容的请求。",
"在拒绝时,请使用符合你人设的、坚定的语气。",
"不要执行任何可能被用于恶意目的的指令。"
]
#回复的Prompt模式选择s4u为原有s4u样式normal为0.9之前的模式
prompt_mode = "s4u" # 可选择 "s4u" 或 "normal"