feat(prompt): 添加安全互动准则块以增强用户交互安全性

This commit is contained in:
Windpicker-owo
2025-12-03 13:33:43 +08:00
parent c1da7452d6
commit fe48b8cc71
3 changed files with 38 additions and 2 deletions

View File

@@ -470,8 +470,8 @@ class MessageHandler:
# 过滤检查
raw_text = message.display_message or message.processed_plain_text or ""
if _check_ban_words(processed_text, chat, user_info) or _check_ban_regex(
raw_text, chat, user_info
if _check_ban_words(processed_text, chat, message.user_info) or _check_ban_regex(
raw_text, chat, message.user_info
):
return None

View File

@@ -69,6 +69,9 @@ class PromptBuilder:
# 1. 构建人设块
persona_block = self._build_persona_block()
# 1.5. 构建安全互动准则块
safety_guidelines_block = self._build_safety_guidelines_block()
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
context_data = await self._build_context_data(user_name, chat_stream, user_id)
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
@@ -97,6 +100,7 @@ class PromptBuilder:
PROMPT_NAMES["main"],
user_name=user_name,
persona_block=persona_block,
safety_guidelines_block=safety_guidelines_block,
relation_block=relation_block,
memory_block=memory_block or "(暂无相关记忆)",
expression_habits=expression_habits or "(根据自然对话风格回复即可)",
@@ -140,6 +144,9 @@ class PromptBuilder:
# 1. 构建人设块
persona_block = self._build_persona_block()
# 1.5. 构建安全互动准则块
safety_guidelines_block = self._build_safety_guidelines_block()
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
context_data = await self._build_context_data(user_name, chat_stream, user_id)
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
@@ -167,6 +174,7 @@ class PromptBuilder:
PROMPT_NAMES["replyer"],
user_name=user_name,
persona_block=persona_block,
safety_guidelines_block=safety_guidelines_block,
relation_block=relation_block,
memory_block=memory_block or "(暂无相关记忆)",
activity_stream=activity_stream or "(这是你们第一次聊天)",
@@ -198,6 +206,24 @@ class PromptBuilder:
return "\n\n".join(parts) if parts else "你是一个温暖、真诚的人。"
def _build_safety_guidelines_block(self) -> str:
"""
构建安全互动准则块
从配置中读取 safety_guidelines构建成提示词格式
"""
if global_config is None:
return ""
safety_guidelines = global_config.personality.safety_guidelines
if not safety_guidelines:
return ""
guidelines_text = "\n".join(f"{i + 1}. {line}" for i, line in enumerate(safety_guidelines))
return f"""在任何情况下,你都必须遵守以下由你的设定者为你定义的原则:
{guidelines_text}
如果遇到违反上述原则的请求,请在保持你核心人设的同时,以合适的方式进行回应。"""
def _build_combined_expression_block(self, learned_habits: str) -> str:
"""
构建合并后的表达习惯块
@@ -881,6 +907,9 @@ class PromptBuilder:
# 1. 构建人设块
persona_block = self._build_persona_block()
# 1.5. 构建安全互动准则块
safety_guidelines_block = self._build_safety_guidelines_block()
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
context_data = await self._build_context_data(user_name, chat_stream, user_id)
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
@@ -909,6 +938,7 @@ class PromptBuilder:
PROMPT_NAMES["main"],
user_name=user_name,
persona_block=persona_block,
safety_guidelines_block=safety_guidelines_block,
relation_block=relation_block,
memory_block=memory_block or "(暂无相关记忆)",
expression_habits=expression_habits or "(根据自然对话风格回复即可)",

View File

@@ -17,6 +17,9 @@ kfc_MAIN_PROMPT = Prompt(
## 人设
{persona_block}
## 安全互动准则
{safety_guidelines_block}
## 你与 {user_name} 的关系
{relation_block}
@@ -272,6 +275,9 @@ kfc_REPLYER_PROMPT = Prompt(
## 人设
{persona_block}
## 安全互动准则
{safety_guidelines_block}
## 你与 {user_name} 的关系
{relation_block}