From 606fe3fd2e0c74cfcb7298e6fbc32476b83071ee Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Thu, 13 Nov 2025 11:10:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(prompt):=20=E6=B7=BB=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E7=BE=A4=E8=81=8A=E6=8F=90=E9=86=92=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=86=85=E5=AD=98=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在系统提示中引入动态群聊提醒,使其具备上下文意识。现在仅在对话发生在群聊环境中时注入该提醒,从而防止在私聊中可能引起模型混淆。 这是通过向`PromptParameters`添加`group_chat_reminder_block`实现的,该模块会根据聊天类型有条件地填充。 此外,本次提交还包括修复在内存搜索过程中可能出现的`AttributeError`,确保在尝试使用内存模块之前先进行配置。 --- src/chat/replyer/default_generator.py | 38 ++++++++++++++++++--------- src/chat/utils/prompt.py | 4 +++ src/chat/utils/prompt_params.py | 3 ++- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 4a148bb4d..bb8a8f042 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -9,7 +9,7 @@ import re import time import traceback from datetime import datetime, timedelta -from typing import Any +from typing import Any, Literal from src.chat.express.expression_selector import expression_selector from src.chat.message_receive.chat_stream import ChatStream @@ -129,7 +129,7 @@ def init_prompt(): ## 规则 {safety_guidelines_block} -注意:在规划回复时,务必确定对方是不是真的在叫自己。聊天时往往有数百甚至数千个用户,请务必认清自己的身份和角色,避免误以为对方在和自己对话而贸然插入回复,导致尴尬局面。 +{group_chat_reminder_block} 你的回复应该是一条简短、完整且口语化的回复。 -------------------------------- @@ -212,7 +212,7 @@ If you need to use the search tool, please directly call the function "lpmm_sear ## 规则 {safety_guidelines_block} -注意:在规划回复时,务必确定对方是不是真的在叫自己。聊天时往往有数百甚至数千个用户,请务必认清自己的身份和角色,避免误以为对方在和自己对话而贸然插入回复,导致尴尬局面。 +{group_chat_reminder_block} 你的回复应该是一条简短、完整且口语化的回复。 -------------------------------- @@ -362,7 +362,7 @@ class DefaultReplyer: try: # 从available_actions中提取prompt_mode(由action_manager传递) # 如果没有指定,默认使用s4u模式 - prompt_mode_value: str = "s4u" + prompt_mode_value: Any = "s4u" if available_actions and "_prompt_mode" in available_actions: mode = available_actions.get("_prompt_mode", "s4u") # 确保类型安全 @@ -597,14 +597,20 @@ class DefaultReplyer: } # 使用记忆管理器的智能检索(多查询策略) - memories = await manager.search_memories( - query=target, - top_k=global_config.memory.search_top_k, - min_importance=global_config.memory.search_min_importance, - include_forgotten=False, - use_multi_query=True, - context=query_context, - ) + memories = [] + if global_config.memory: + memories = [] + if global_config.memory: + top_k = global_config.memory.search_top_k + min_importance = global_config.memory.search_min_importance + memories = await manager.search_memories( + query=target, + top_k=top_k, + min_importance=min_importance, + include_forgotten=False, + use_multi_query=True, + context=query_context, + ) if memories: logger.info(f"[记忆图] 检索到 {len(memories)} 条相关记忆") @@ -1089,7 +1095,7 @@ class DefaultReplyer: available_actions: dict[str, ActionInfo] | None = None, enable_tool: bool = True, reply_message: DatabaseMessages | None = None, - prompt_mode: str = "s4u", # 新增参数:s4u 或 normal + prompt_mode: Literal["s4u", "normal", "minimal"] = "s4u", # 新增参数:s4u 或 normal ) -> str: """ 构建回复器上下文 @@ -1532,6 +1538,11 @@ class DefaultReplyer: auth_role_prompt_block = await self._build_auth_role_prompt() + # 动态构建群聊提醒 + group_chat_reminder_block = "" + if is_group_chat: + group_chat_reminder_block = "注意:在规划回复时,务必确定对方是不是真的在叫自己。聊天时往往有数百甚至数千个用户,请务必认清自己的身份和角色,避免误以为对方在和自己对话而贸然插入回复,导致尴尬局面。" + # 使用新的统一Prompt系统 - 创建PromptParameters prompt_parameters = PromptParameters( chat_scene=chat_scene_prompt, @@ -1568,6 +1579,7 @@ class DefaultReplyer: mood_prompt=mood_prompt, auth_role_prompt_block=auth_role_prompt_block, action_descriptions=action_descriptions, + group_chat_reminder_block=group_chat_reminder_block, bot_name=global_config.bot.nickname, bot_nickname=",".join(global_config.bot.alias_names) if global_config.bot.alias_names else "", ) diff --git a/src/chat/utils/prompt.py b/src/chat/utils/prompt.py index ca234ca07..e9fedd000 100644 --- a/src/chat/utils/prompt.py +++ b/src/chat/utils/prompt.py @@ -914,6 +914,8 @@ class Prompt: or context_data.get("auth_role_prompt_block", ""), "chat_scene": self.parameters.chat_scene or "你正在一个QQ群里聊天,你需要理解整个群的聊天动态和话题走向,并做出自然的回应。", + "group_chat_reminder_block": self.parameters.group_chat_reminder_block + or context_data.get("group_chat_reminder_block", ""), } def _prepare_normal_params(self, context_data: dict[str, Any]) -> dict[str, Any]: @@ -956,6 +958,8 @@ class Prompt: or "你正在一个QQ群里聊天,你需要理解整个群的聊天动态和话题走向,并做出自然的回应。", "bot_name": self.parameters.bot_name, "bot_nickname": self.parameters.bot_nickname, + "group_chat_reminder_block": self.parameters.group_chat_reminder_block + or context_data.get("group_chat_reminder_block", ""), } def _prepare_default_params(self, context_data: dict[str, Any]) -> dict[str, Any]: diff --git a/src/chat/utils/prompt_params.py b/src/chat/utils/prompt_params.py index 47c6d46e4..9f6c60d3a 100644 --- a/src/chat/utils/prompt_params.py +++ b/src/chat/utils/prompt_params.py @@ -63,7 +63,8 @@ class PromptParameters: mood_prompt: str = "" action_descriptions: str = "" notice_block: str = "" - + group_chat_reminder_block: str = "" + # 可用动作信息 available_actions: dict[str, Any] | None = None