fix(chat): 防止回复媒体内容处理失败的消息

机器人此前会将 "[图片(描述生成失败)]" 等系统提示误解为用户消息并进行回复,导致异常的对话行为。

本次修复通过两个层面解决此问题:
1. 在 `ChatBot` 中添加硬编码过滤器,作为第一道防线,直接静默处理包含失败关键词的消息。
2. 更新 Planner Prompt,明确禁止 AI 回复此类消息,作为第二道保险,确保系统行为的健壮性。
This commit is contained in:
tt-P607
2025-10-23 01:29:12 +08:00
parent c149620fd0
commit f95fe72693
2 changed files with 8 additions and 1 deletions

View File

@@ -466,6 +466,12 @@ class ChatBot:
f"[{chat_name}]{message.message_info.user_info.user_nickname}:{message.processed_plain_text}\u001b[0m"
)
# 在此添加硬编码过滤,防止回复图片处理失败的消息
failure_keywords = ["[表情包(描述生成失败)]", "[图片(描述生成失败)]"]
if any(keyword in message.processed_plain_text for keyword in failure_keywords):
logger.info(f"[硬编码过滤] 检测到媒体内容处理失败({message.processed_plain_text}),消息被静默处理。")
return
# 处理notice消息
notice_handled = await self.handle_notice_message(message)
if notice_handled:

View File

@@ -52,7 +52,8 @@ def init_prompts():
- 其他与上下文弱相关的内容最后考虑。
{mentioned_bonus}
4. 多目标:若多人同时需要回应,请在 actions 中并行生成多个 reply每个都指向各自的 target_message_id。
5. 避免:表情包/纯表情/无信息的消息;对这类消息通常不回复或选择 no_action/no_reply
5. **【核心规则】处理纯表情/符号**: 表情包纯表情符号主要用于情感辅助。对不含任何实质文本的纯表情/符号消息,应默认选择`no_action`,除非你有非常特别的理由要回应
6. **【!!!绝对禁止!!!】处理失败消息**: 绝不能回复任何指示媒体内容(图片、表情包等)处理失败的消息。如果消息中出现如“[表情包(描述生成失败)]”或“[图片(描述生成失败)]”等文字,必须将其视为系统错误提示,并立即选择`no_action`。
6. 风格:保持人设一致;避免重复你说过的话;避免冗余和口头禅。
# 思绪流规范thinking