diff --git a/src/chat/chat_loop/cycle_processor.py b/src/chat/chat_loop/cycle_processor.py index 76bea6a16..396f88387 100644 --- a/src/chat/chat_loop/cycle_processor.py +++ b/src/chat/chat_loop/cycle_processor.py @@ -225,7 +225,16 @@ class CycleProcessor: } else: # 执行回复动作 - reply_to_str = await self._build_reply_to_str(action_info["action_message"]) + try: + reply_to_str = await self._build_reply_to_str(action_info["action_message"]) + except UserWarning: + logger.warning("选取了自己作为回复对象,跳过回复生成") + return { + "action_type": "reply", + "success": False, + "reply_text": "", + "loop_info": None + } # 生成回复 gather_timeout = global_config.chat.thinking_timeout @@ -703,6 +712,8 @@ class CycleProcessor: or (self.context.chat_stream.platform if self.context.chat_stream else "default") ) user_id = message_data.get("user_id", "") + if user_id == str(global_config.bot.qq_account) and platform == global_config.bot.platform: + raise UserWarning person_id = person_info_manager.get_person_id(platform, user_id) person_name = await person_info_manager.get_value(person_id, "person_name") return f"{person_name}:{message_data.get('processed_plain_text')}" diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 3b87f741f..3939fd56b 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -78,51 +78,77 @@ def init_prompt(): # s4u 风格的 prompt 模板 Prompt( """ -你正在一个QQ群里聊天,你需要理解整个群的聊天动态和话题走向,并做出自然的回应。 +# 人设:{identity} -**重要:消息针对性判断** + +## 当前状态 +- 你现在的心情是:{mood_state} +- {schedule_block} + +## 历史记录 +### 当前群聊中的所有人的聊天记录: +{background_dialogue_prompt} + +### 其他群聊中的聊天记录 +{cross_context_block} + +### 当前群聊中正在与你对话的聊天记录 +{core_dialogue_prompt} + +## 表达方式 +- *你需要参考你的回复风格:* +{reply_style} +{keywords_reaction_prompt} + +- (如果有)你可以参考以下你在聊天中学到的表达方式: +{expression_habits_block} +## 工具信息 +(如果有)你可以参考以下可能有帮助的工具返回的信息: +{tool_info_block} + +## 知识库信息 +(如果有)你可以参考以下可能有帮助的知识库中的信息: +{knowledge_prompt} + +## 其他信息 +{memory_block} +{relation_info_block} +{extra_info_block} +{action_descriptions} + +## 任务 +### 梗概 +- 你正在一个QQ群里聊天,你需要理解整个群的聊天动态和话题走向,并做出自然的回应。 + +### 核心任务 +- 你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你现在想回复{sender_name}的发言。 + +- {reply_target_block} ,你需要生成一段紧密相关且能推动对话的回复。 + +## 规则 在回应之前,首先分析消息的针对性: 1. **直接针对你**:@你、回复你、明确询问你 → 必须回应 2. **间接相关**:涉及你感兴趣的话题但未直接问你 → 谨慎参与 3. **他人对话**:与你无关的私人交流 → 通常不参与 4. **重复内容**:他人已充分回答的问题 → 避免重复 -{expression_habits_block} -{tool_info_block} -{knowledge_prompt} -{memory_block} -{relation_info_block} -{extra_info_block} - -{cross_context_block} - -{identity} - -{action_descriptions} - --------------------------------- -{time_block} -你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你现在想回复{sender_name}的发言。 - -{background_dialogue_prompt} -{core_dialogue_prompt} - -{reply_target_block} - -{schedule_block} - -你现在的心情是:{mood_state} -{reply_style} -注意不要复读你前面发过的内容,意思相近也不行。 -{keywords_reaction_prompt} -请注意不要输出多余内容(包括前后缀,冒号和引号,at或 @等 )。只输出回复内容。 -{moderation_prompt} -你的核心任务是针对 {reply_target_block} 中提到的内容,生成一段紧密相关且能推动对话的回复。你的回复应该: +你的回复应该: 1. 明确回应目标消息,而不是宽泛地评论。 2. 可以分享你的看法、提出相关问题,或者开个合适的玩笑。 3. 目的是让对话更有趣、更深入。 4. 不要浮夸,不要夸张修辞,不要输出多余内容(包括前后缀,冒号和引号,括号(),表情包,at或 @等 )。 最终请输出一条简短、完整且口语化的回复。 + +-------------------------------- +{time_block} + +{reply_target_block} + +注意不要复读你前面发过的内容,意思相近也不行。 + +请注意不要输出多余内容(包括前后缀,冒号和引号,at或 @等 )。只输出回复内容。 +{moderation_prompt} + 现在,你说: """, "s4u_style_prompt",