feat(prompt): 添加背景故事与安全准则
本次提交在人设配置中引入了“背景故事”和“安全准则”两个新字段,旨在增强 Bot 的角色深度和互动安全性。 - **背景故事 (`background_story`)**: 允许用户定义详细的世界观或角色背景。这部分内容将作为背景知识注入 Prompt,指导模型在不直接复述的情况下理解和运用,从而塑造更丰富的角色。 - **安全准则 (`safety_guidelines`)**: 用户可以明确定义 Bot 必须遵守的行为红线。这些准则会被整合进系统指令,为模型处理不当或敏感请求提供清晰的、可配置的指导方针,提升了交互的安全性。
This commit is contained in:
@@ -123,6 +123,7 @@ def init_prompt():
|
|||||||
- {reply_target_block} ,你需要生成一段紧密相关且能推动对话的回复。
|
- {reply_target_block} ,你需要生成一段紧密相关且能推动对话的回复。
|
||||||
|
|
||||||
## 规则
|
## 规则
|
||||||
|
{safety_guidelines_block}
|
||||||
在回应之前,首先分析消息的针对性:
|
在回应之前,首先分析消息的针对性:
|
||||||
1. **直接针对你**:@你、回复你、明确询问你 → 必须回应
|
1. **直接针对你**:@你、回复你、明确询问你 → 必须回应
|
||||||
2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与
|
2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与
|
||||||
@@ -942,6 +943,16 @@ class DefaultReplyer:
|
|||||||
|
|
||||||
identity_block = await get_individuality().get_personality_block()
|
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 = ""
|
schedule_block = ""
|
||||||
if global_config.planning_system.schedule_enable:
|
if global_config.planning_system.schedule_enable:
|
||||||
from src.schedule.schedule_manager import schedule_manager
|
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 sender and target:
|
||||||
if is_group_chat:
|
if is_group_chat:
|
||||||
if sender:
|
if sender:
|
||||||
@@ -1005,6 +1027,7 @@ class DefaultReplyer:
|
|||||||
identity_block=identity_block,
|
identity_block=identity_block,
|
||||||
schedule_block=schedule_block,
|
schedule_block=schedule_block,
|
||||||
moderation_prompt_block=moderation_prompt_block,
|
moderation_prompt_block=moderation_prompt_block,
|
||||||
|
safety_guidelines_block=safety_guidelines_block,
|
||||||
reply_target_block=reply_target_block,
|
reply_target_block=reply_target_block,
|
||||||
mood_prompt=mood_prompt,
|
mood_prompt=mood_prompt,
|
||||||
action_descriptions=action_descriptions,
|
action_descriptions=action_descriptions,
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ class PersonalityConfig(ValidatedConfigBase):
|
|||||||
personality_core: str = Field(..., description="核心人格")
|
personality_core: str = Field(..., description="核心人格")
|
||||||
personality_side: str = Field(..., description="人格侧写")
|
personality_side: str = Field(..., description="人格侧写")
|
||||||
identity: str = Field(default="", 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="表达风格")
|
reply_style: str = Field(default="", description="表达风格")
|
||||||
prompt_mode: Literal["s4u", "normal"] = Field(default="s4u", description="Prompt模式")
|
prompt_mode: Literal["s4u", "normal"] = Field(default="s4u", description="Prompt模式")
|
||||||
compress_personality: bool = Field(default=True, description="是否压缩人格")
|
compress_personality: bool = Field(default=True, description="是否压缩人格")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[inner]
|
[inner]
|
||||||
version = "6.8.4"
|
version = "6.8.5"
|
||||||
|
|
||||||
#----以下是给开发人员阅读的,如果你只是部署了MoFox-Bot,不需要阅读----
|
#----以下是给开发人员阅读的,如果你只是部署了MoFox-Bot,不需要阅读----
|
||||||
#如果你想要修改配置文件,请递增version的值
|
#如果你想要修改配置文件,请递增version的值
|
||||||
@@ -64,9 +64,21 @@ personality_side = "用一句话或几句话描述人格的侧面特质"
|
|||||||
# 可以描述外貌,性别,身高,职业,属性等等描述
|
# 可以描述外貌,性别,身高,职业,属性等等描述
|
||||||
identity = "年龄为19岁,是女孩子,身高为160cm,有黑色的短发"
|
identity = "年龄为19岁,是女孩子,身高为160cm,有黑色的短发"
|
||||||
|
|
||||||
|
# 此处用于填写详细的世界观、背景故事、复杂人际关系等。
|
||||||
|
# 这部分内容将作为Bot的“背景知识”,Bot被指导不应在对话中主动或频繁地复述这些设定。
|
||||||
|
background_story = ""
|
||||||
|
|
||||||
# 描述MoFox-Bot说话的表达风格,表达习惯,如要修改,可以酌情新增内容
|
# 描述MoFox-Bot说话的表达风格,表达习惯,如要修改,可以酌情新增内容
|
||||||
reply_style = "回复可以简短一些。可以参考贴吧,知乎和微博的回复风格,回复不要浮夸,不要用夸张修辞,平淡一些。"
|
reply_style = "回复可以简短一些。可以参考贴吧,知乎和微博的回复风格,回复不要浮夸,不要用夸张修辞,平淡一些。"
|
||||||
|
|
||||||
|
# 安全与互动底线 (Bot在任何情况下都必须遵守的原则)
|
||||||
|
# 你可以在这里定义Bot的行为红线,例如如何回应不恰当的问题。
|
||||||
|
safety_guidelines = [
|
||||||
|
"拒绝任何包含骚扰、冒犯、暴力、色情或危险内容的请求。",
|
||||||
|
"在拒绝时,请使用符合你人设的、坚定的语气。",
|
||||||
|
"不要执行任何可能被用于恶意目的的指令。"
|
||||||
|
]
|
||||||
|
|
||||||
#回复的Prompt模式选择:s4u为原有s4u样式,normal为0.9之前的模式
|
#回复的Prompt模式选择:s4u为原有s4u样式,normal为0.9之前的模式
|
||||||
prompt_mode = "s4u" # 可选择 "s4u" 或 "normal"
|
prompt_mode = "s4u" # 可选择 "s4u" 或 "normal"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user