fix(channelbridge): 成员车道「指向她」判据改为 AddressedToMe(@ 别人不再必回)
ruleLightJudge 原判据是 len(msg.Mentions) > 0 —— 只要有任意 @ 就必回, @ 的是谁不论。2026-10-14 真机病灶:群里 @3889001246、@867587435 两条 都不是 @ 她,她仍逐条回。 改为复用 owner 车道已验证的同一份判据 ownerAddressedToMe (msg.AddressedToMe || (msg.SelfID == "" && len(msg.Mentions) > 0)): - 已接线渠道(qq-obv11 填了 SelfID/MentionAll/AddressedToMe):只有 @ 她本人 / @全体 才必回,@ 别人降级为无结论 → 参与度触发/概率那一档(未触发只登记); - 未接线渠道(kook/webhook/telegram/weixin_ilink 未填 SelfID):逐字不变, 仍按旧判据必回(「没有信号」≠「没在对我说话」); - 判据全部来自结构化字段,绝不匹配正文里的 @<数字>。 口径依据 design/18 §2 触发① 的 2026-10-13 修订(消费点在 M13 只接了 owner 车道)。
This commit is contained in:
1 parent
0c2322bb92
commit
5969e700e1
2 files changed
+152
-7
No files matched your search
@@ -131,15 +131,27 @@ func hasHighValueKeyword(text string) bool {
|
||||
}
|
||||
|
||||
// ruleLightJudge 只依据廉价规则信号判断是否值得回复
|
||||
// (设计/12 §6 策略二)。优先级:直接点名、提及主人的显示
|
||||
// 名、高价值关键词;除此之外一律无结论(交给参与度引擎 /
|
||||
// (设计/12 §6 策略二)。优先级:**指向她本人**(design/18 §2 触发①)、
|
||||
// 提及主人的显示名、高价值关键词;除此之外一律无结论(交给参与度引擎 /
|
||||
// 注入的 LightJudge,没有则失败关闭为静默)。**安静时段不是
|
||||
// 这里的静默理由**(主人 2026-10-05 裁决②:安静时段由轻思考判断
|
||||
// 是否回复,不是硬性全静默)——该信号由调用方随 inQuiet 传给
|
||||
// 下游判定器。它只读取已解析的消息信号(提及/正文)——绝不
|
||||
// 推断身份(身份由 actor 元数据在会话层解析,红线)。
|
||||
//
|
||||
// 触发①的判据与 owner 车道**同一份**(ownerAddressedToMe,见 ownerlane.go,
|
||||
// 口径写死在 design/18 §2 触发① 的 2026-10-13 修订里):`@ 她本人 / @全体`
|
||||
// 才必回,**不是「有任意提及」** —— 群里 @ 别人与 @ 她长得一模一样,
|
||||
// 拿「Mentions 非空」当判据会让群员之间的互 @ 把她拽进每一段对话
|
||||
// (2026-10-14 真机病灶:`@3889001246`、`@867587435` 两条都被必回)。
|
||||
//
|
||||
// 判据的后半句(SelfID 为空时退回「有提及」)**不可省**:kook / webhook 等尚未
|
||||
// 填 SelfID 的平台 AddressedToMe 恒 false,只留前半句会把它们的群 @ 一并打死
|
||||
// (「没有信号」≠「没在对我说话」)。反过来,判据**全部来自结构化字段**,
|
||||
// 绝不匹配正文里的 "@<数字>" —— @ 她与 @ 别人在正文里长得一模一样,
|
||||
// 那正是本病灶的成因。
|
||||
func (b *Bridge) ruleLightJudge(msg adapter.UnifiedMessage) lightVerdict {
|
||||
if len(msg.Mentions) > 0 {
|
||||
if ownerAddressedToMe(msg) {
|
||||
return verdictRespond
|
||||
}
|
||||
if b.owner != nil && b.owner.DisplayName != "" &&
|
||||
@@ -201,10 +213,11 @@ func (b *Bridge) shouldRespond(ctx context.Context, msg adapter.UnifiedMessage,
|
||||
return true, "stranger private chat: normal reply"
|
||||
}
|
||||
|
||||
// 策略二/五:基于规则的轻量判定。直接 @、提及主人显示名或
|
||||
// 高价值关键词一律直接回;规则得不出结论的部分交给参与度
|
||||
// 引擎 / 轻量判定器。**安静时段只作为信号**(inQuiet)继续往下传,
|
||||
// 规则层不再因为它静默(裁决②)。
|
||||
// 策略二/五:基于规则的轻量判定。**指向她本人**(@她 / @全体)、提及主人
|
||||
// 显示名或高价值关键词一律直接回;规则得不出结论的部分交给参与度
|
||||
// 引擎 / 轻量判定器 —— 群里 @ 别人的消息因此不会必回,而是落到
|
||||
// 「参与度触发 / 概率」那一档(未触发则只登记)。**安静时段只作为信号**(inQuiet)
|
||||
// 继续往下传,规则层不再因为它静默(裁决②)。
|
||||
inQuiet := b.inQuietHours(b.now())
|
||||
if b.ruleLightJudge(msg) == verdictRespond {
|
||||
return true, "rule signal: worth responding"
|
||||
|
||||
Reference in new issue
Block a user