From fe48b8cc71512c224712401062653a0b5dda4302 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Wed, 3 Dec 2025 13:33:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(prompt):=20=E6=B7=BB=E5=8A=A0=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E4=BA=92=E5=8A=A8=E5=87=86=E5=88=99=E5=9D=97=E4=BB=A5?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E7=94=A8=E6=88=B7=E4=BA=A4=E4=BA=92=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/message_handler.py | 4 +-- .../kokoro_flow_chatter/prompt/builder.py | 30 +++++++++++++++++++ .../kokoro_flow_chatter/prompt/prompts.py | 6 ++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/chat/message_receive/message_handler.py b/src/chat/message_receive/message_handler.py index 46c86bcee..85ebdbf17 100644 --- a/src/chat/message_receive/message_handler.py +++ b/src/chat/message_receive/message_handler.py @@ -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 diff --git a/src/plugins/built_in/kokoro_flow_chatter/prompt/builder.py b/src/plugins/built_in/kokoro_flow_chatter/prompt/builder.py index 6a7bb4fd1..ce0e10480 100644 --- a/src/plugins/built_in/kokoro_flow_chatter/prompt/builder.py +++ b/src/plugins/built_in/kokoro_flow_chatter/prompt/builder.py @@ -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 "(根据自然对话风格回复即可)", diff --git a/src/plugins/built_in/kokoro_flow_chatter/prompt/prompts.py b/src/plugins/built_in/kokoro_flow_chatter/prompt/prompts.py index 9f5956415..6ac97718c 100644 --- a/src/plugins/built_in/kokoro_flow_chatter/prompt/prompts.py +++ b/src/plugins/built_in/kokoro_flow_chatter/prompt/prompts.py @@ -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}