fix: group_ambient模式区分管理员和非管理员审查提示

管理员在群里说话不@bot时,group_ambient审查提示不应限制其工具使用权限。
现在管理员走「群聊审查模式-管理员」提示,允许正常使用工具;
普通群友仍然走严格审查,防止随意插话。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-05 13:40:43 +08:00
parent 13a2c69d5e
commit f723194a17
+14 -14
View File
@@ -1109,21 +1109,21 @@ func handleChat(
// 平台静默观察模式:只记录消息、提取记忆、触发后台思考,不生成回复。 // 平台静默观察模式:只记录消息、提取记忆、触发后台思考,不生成回复。
if req.Mode == "group_ambient" { if req.Mode == "group_ambient" {
// 群聊环境消息 — 审查是否值得回应 // 群聊环境消息 — 审查是否值得回应
message := req.Message message := req.Message
ctxBuilder.CacheMessage(req.SessionID, model.RoleUser, message) ctxBuilder.CacheMessage(req.SessionID, model.RoleUser, message)
if thinker != nil { if thinker != nil {
thinker.RecordUserMessage(req.SessionID) 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"
} }
// 管理员消息 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 req.Mode == "platform_silent" {
if thinker != nil { if thinker != nil {
thinker.RecordUserMessage(req.SessionID) thinker.RecordUserMessage(req.SessionID)