feat(prompt): 添加安全互动准则块以增强用户交互安全性
This commit is contained in:
@@ -470,8 +470,8 @@ class MessageHandler:
|
|||||||
|
|
||||||
# 过滤检查
|
# 过滤检查
|
||||||
raw_text = message.display_message or message.processed_plain_text or ""
|
raw_text = message.display_message or message.processed_plain_text or ""
|
||||||
if _check_ban_words(processed_text, chat, user_info) or _check_ban_regex(
|
if _check_ban_words(processed_text, chat, message.user_info) or _check_ban_regex(
|
||||||
raw_text, chat, user_info
|
raw_text, chat, message.user_info
|
||||||
):
|
):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ class PromptBuilder:
|
|||||||
# 1. 构建人设块
|
# 1. 构建人设块
|
||||||
persona_block = self._build_persona_block()
|
persona_block = self._build_persona_block()
|
||||||
|
|
||||||
|
# 1.5. 构建安全互动准则块
|
||||||
|
safety_guidelines_block = self._build_safety_guidelines_block()
|
||||||
|
|
||||||
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
||||||
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
||||||
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
||||||
@@ -97,6 +100,7 @@ class PromptBuilder:
|
|||||||
PROMPT_NAMES["main"],
|
PROMPT_NAMES["main"],
|
||||||
user_name=user_name,
|
user_name=user_name,
|
||||||
persona_block=persona_block,
|
persona_block=persona_block,
|
||||||
|
safety_guidelines_block=safety_guidelines_block,
|
||||||
relation_block=relation_block,
|
relation_block=relation_block,
|
||||||
memory_block=memory_block or "(暂无相关记忆)",
|
memory_block=memory_block or "(暂无相关记忆)",
|
||||||
expression_habits=expression_habits or "(根据自然对话风格回复即可)",
|
expression_habits=expression_habits or "(根据自然对话风格回复即可)",
|
||||||
@@ -140,6 +144,9 @@ class PromptBuilder:
|
|||||||
# 1. 构建人设块
|
# 1. 构建人设块
|
||||||
persona_block = self._build_persona_block()
|
persona_block = self._build_persona_block()
|
||||||
|
|
||||||
|
# 1.5. 构建安全互动准则块
|
||||||
|
safety_guidelines_block = self._build_safety_guidelines_block()
|
||||||
|
|
||||||
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
||||||
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
||||||
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
||||||
@@ -167,6 +174,7 @@ class PromptBuilder:
|
|||||||
PROMPT_NAMES["replyer"],
|
PROMPT_NAMES["replyer"],
|
||||||
user_name=user_name,
|
user_name=user_name,
|
||||||
persona_block=persona_block,
|
persona_block=persona_block,
|
||||||
|
safety_guidelines_block=safety_guidelines_block,
|
||||||
relation_block=relation_block,
|
relation_block=relation_block,
|
||||||
memory_block=memory_block or "(暂无相关记忆)",
|
memory_block=memory_block or "(暂无相关记忆)",
|
||||||
activity_stream=activity_stream or "(这是你们第一次聊天)",
|
activity_stream=activity_stream or "(这是你们第一次聊天)",
|
||||||
@@ -198,6 +206,24 @@ class PromptBuilder:
|
|||||||
|
|
||||||
return "\n\n".join(parts) if parts else "你是一个温暖、真诚的人。"
|
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:
|
def _build_combined_expression_block(self, learned_habits: str) -> str:
|
||||||
"""
|
"""
|
||||||
构建合并后的表达习惯块
|
构建合并后的表达习惯块
|
||||||
@@ -881,6 +907,9 @@ class PromptBuilder:
|
|||||||
# 1. 构建人设块
|
# 1. 构建人设块
|
||||||
persona_block = self._build_persona_block()
|
persona_block = self._build_persona_block()
|
||||||
|
|
||||||
|
# 1.5. 构建安全互动准则块
|
||||||
|
safety_guidelines_block = self._build_safety_guidelines_block()
|
||||||
|
|
||||||
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
# 2. 使用 context_builder 获取关系、记忆、表达习惯等
|
||||||
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
context_data = await self._build_context_data(user_name, chat_stream, user_id)
|
||||||
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
relation_block = context_data.get("relation_info", f"你与 {user_name} 还不太熟悉,这是早期的交流阶段。")
|
||||||
@@ -909,6 +938,7 @@ class PromptBuilder:
|
|||||||
PROMPT_NAMES["main"],
|
PROMPT_NAMES["main"],
|
||||||
user_name=user_name,
|
user_name=user_name,
|
||||||
persona_block=persona_block,
|
persona_block=persona_block,
|
||||||
|
safety_guidelines_block=safety_guidelines_block,
|
||||||
relation_block=relation_block,
|
relation_block=relation_block,
|
||||||
memory_block=memory_block or "(暂无相关记忆)",
|
memory_block=memory_block or "(暂无相关记忆)",
|
||||||
expression_habits=expression_habits or "(根据自然对话风格回复即可)",
|
expression_habits=expression_habits or "(根据自然对话风格回复即可)",
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ kfc_MAIN_PROMPT = Prompt(
|
|||||||
## 人设
|
## 人设
|
||||||
{persona_block}
|
{persona_block}
|
||||||
|
|
||||||
|
## 安全互动准则
|
||||||
|
{safety_guidelines_block}
|
||||||
|
|
||||||
## 你与 {user_name} 的关系
|
## 你与 {user_name} 的关系
|
||||||
{relation_block}
|
{relation_block}
|
||||||
|
|
||||||
@@ -272,6 +275,9 @@ kfc_REPLYER_PROMPT = Prompt(
|
|||||||
## 人设
|
## 人设
|
||||||
{persona_block}
|
{persona_block}
|
||||||
|
|
||||||
|
## 安全互动准则
|
||||||
|
{safety_guidelines_block}
|
||||||
|
|
||||||
## 你与 {user_name} 的关系
|
## 你与 {user_name} 的关系
|
||||||
{relation_block}
|
{relation_block}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user