diff --git a/backend/ai-core/cmd/main.go b/backend/ai-core/cmd/main.go index 2e22022..a99b487 100644 --- a/backend/ai-core/cmd/main.go +++ b/backend/ai-core/cmd/main.go @@ -1109,21 +1109,21 @@ func handleChat( // 平台静默观察模式:只记录消息、提取记忆、触发后台思考,不生成回复。 if req.Mode == "group_ambient" { - // 群聊环境消息 — 审查是否值得回应 - message := req.Message - ctxBuilder.CacheMessage(req.SessionID, model.RoleUser, message) - if thinker != nil { - thinker.RecordUserMessage(req.SessionID) - } - // 在消息前加审查指令,让 LLM 自己判断是否插话。 - // 关键规则: - // 1. 绝大多数群聊消息不需要你回复。只有话题直接涉及你、有人@你、或你真有特别相关的信息时才开口。 - // 2. 如果有人说"别说话""闭嘴""先别说""别让ta说"之类让你安静的话,必须立刻闭嘴,后续几条消息都不要回复。 - // 3. 不想说话时不要发消息。不要为了刷存在感而发言。 - // 4. 每轮最多说 1-2 句话,不要长篇大论。 - req.Message = "【群聊审查模式】以下是群聊里的一条消息。绝大多数群聊消息你不需要回复。只有以下情况才开口:(1)有人直接@你或叫你名字 (2)话题与你高度相关 (3)你有重要信息补充。如果有人让你闭嘴/别说话,必须严格遵守。每次回复最多1-2句话。如果你被唤醒了但觉得不该说话,在消息开头写 【不发送】——这条消息就不会被发出去,只在你心里想过。\n\n" + message - req.Mode = "text" + // 群聊环境消息 — 审查是否值得回应 + message := req.Message + ctxBuilder.CacheMessage(req.SessionID, model.RoleUser, message) + if thinker != nil { + thinker.RecordUserMessage(req.SessionID) } + // 管理员消息 vs 普通群友消息使用不同的审查提示。 + // 管理员在群里说话(不@bot)也走 group_ambient,但不应限制其使用工具的权限。 + if req.IsAdmin { + req.Message = "【群聊审查模式-管理员】以下是群聊里的一条消息,发送者是开拓者本人(管理员)。\n你可以正常回应他的指令和请求,包括使用各种工具。但如果他只是闲聊或对别人说话,你可以保持安静。\n每次回复最多1-2句话。如果你觉得不该说话,在消息开头写 【不发送】。\n\n" + message + } else { + req.Message = "【群聊审查模式】以下是群聊里的一条消息。绝大多数群聊消息你不需要回复。只有以下情况才开口:(1)有人直接@你或叫你名字 (2)话题与你高度相关 (3)你有重要信息补充。如果有人让你闭嘴/别说话,必须严格遵守。每次回复最多1-2句话。如果你被唤醒了但觉得不该说话,在消息开头写 【不发送】——这条消息就不会被发出去,只在你心里想过。\n\n" + message + } + req.Mode = "text" + } if req.Mode == "platform_silent" { if thinker != nil { thinker.RecordUserMessage(req.SessionID)