群内插句嘴 opt-in 实现——能量窗口 + 群管鉴权(issue #155 grill) #159

Closed
opened 2026-08-18 04:27:55 +00:00 by KumaAgent · 0 comments
Member

Parent

issue #155(issue #108 Q5 grill 独立 PRD 追踪票,2026-08-18 完成独立 grill 会话);ADR 见 PR #158
(新增 ADR-0032 + ADR-0029/ADR-0014 更新节 + CONTEXT.md 慢中断/环境感知词条更新)

What to build

正式给 issue #37 AC7 交付的 slow_interrupt_energy_boostgating.py,此前全仓零调用方)接上
消费方:群内非 @ 消息的"插句嘴"能力,per-chat opt-in、能量窗口触发。

原文(docs/adr/0032-group-slow-interrupt-opt-in.md 决策节,节选):

顶层姿态:有选择性接收(per-chat opt-in),范围限定为"插句嘴"

只做 event 驱动的"插句嘴"(收到非 @ 消息时评估要不要接话),不做 periodic 驱动的"冷场接话",
不建群聊 Drive Tick。

两层隐私姿态

  • 活跃度信号恒开:非 @ 消息到达这件事本身(不读内容,只算速率/热闹度)在所有群常态喂进
    情感态 EMA,不受 opt-in 限制。
  • 插句嘴(读内容判断是否接话)才需要 opt-in

触发机制:bot 被 @/回复后进入短暂高 energy 窗口(复用 issue #37 交付的纯函数签名:
peak_boost * recency_decay(seconds_since_interaction, half_life_seconds))。窗口内的非 @
消息才评估两级门控(trigger_kind="event");窗口外零成本、零内容读取。boost 数值叠加到
情感态 energy 轴,走既有 gate_threshold_base——不是独立于门控之外的判定分支。bot 自己在
窗口内接话也算一次"交互",会续期窗口。

opt-in 同意机制:新增一个与 admin.IsAdmin 无关的 host 回调,语义明确限定为"这个人在
这个群里是不是(平台原生)管理员/群主",不与现有八条管理命令共用的 _admin_gate/
ports.is_admin 混用。host 不提供这个能力时,opt-in 功能整体不可用。

未接话内容的隐私处理:只用于当次评估,不写入任何 RecallEvent/长期存储。

Acceptance criteria

  • 新增独立的"群管理员"host 回调(Protocol 形状/ArisePorts 字段命名参照 admin.IsAdmin
    惯例自定),语义严格限定为"平台原生群管理员/群主判断"——不得复用或调用现有 ports.is_admin
  • 新增 per-chat opt-in 存储开关 + 对应管理命令(参照 /setsticker 先例:on|off 纯布尔,
    经上一条新回调校验而非 _admin_gate);host 未接这个新回调时命令如实说明不支持,不假装生效
  • slow_interrupt_energy_boost 正式接线:bot 被 @/回复后开启能量窗口;窗口内 opt-in 群的
    非 @ 消息才评估两级门控(trigger_kind="event",走既有级一满分直通 + 级二主模型判定);
    bot 自己接话续期窗口;窗口外的非 @ 消息不触发任何门控评估、LLM 调用
  • 群内非 @ 消息到达信号接入环境感知 tier-1(environmental_awareness.py/情感态 EMA),
    不受 opt-in 限制,所有群常开,只算速率/热闹度、不读内容
  • 能量窗口内被评估但未触发接话的非 @ 消息内容不写入任何 RecallEvent/长期存储,只用于
    当次评估
  • 补测试:opt-in 关闭的群,非 @ 消息不触发任何插句嘴评估;opt-in 开启但在能量窗口外,同样
    不评估;新回调返回 False/未接线时命令拒绝;能量窗口内接话后窗口续期;未接话内容不落库

Not in scope

  • 冷场接话(periodic 驱动)/ 群聊 Drive Tick——ADR-0032 明确本轮不做,见"拒绝了"节
  • 全量接收(不设 opt-in)——已拒绝
  • 上下文构造的具体路径(轻量滑窗 vs 完整 _full_frozen_snapshot 召回)、能量曲线具体参数值
    peak_boost/half_life_seconds)、群管理员能力的具体命名/签名——ADR-0032 明确留给本票
    自定,不需要回评估侧确认
  • 沉默窗口(发送前礼让延迟)——天然复用现有 SilenceWindow,不属于本票范围
## Parent issue #155(issue #108 Q5 grill 独立 PRD 追踪票,2026-08-18 完成独立 grill 会话);ADR 见 PR #158 (新增 ADR-0032 + ADR-0029/ADR-0014 更新节 + CONTEXT.md 慢中断/环境感知词条更新) ## What to build 正式给 issue #37 AC7 交付的 `slow_interrupt_energy_boost`(`gating.py`,此前全仓零调用方)接上 消费方:群内非 @ 消息的"插句嘴"能力,per-chat opt-in、能量窗口触发。 原文(`docs/adr/0032-group-slow-interrupt-opt-in.md` 决策节,节选): > **顶层姿态:有选择性接收(per-chat opt-in),范围限定为"插句嘴"** > > 只做 event 驱动的"插句嘴"(收到非 @ 消息时评估要不要接话),不做 periodic 驱动的"冷场接话", > 不建群聊 Drive Tick。 > > **两层隐私姿态**: > - **活跃度信号恒开**:非 @ 消息到达这件事本身(不读内容,只算速率/热闹度)在所有群常态喂进 > 情感态 EMA,不受 opt-in 限制。 > - **插句嘴(读内容判断是否接话)才需要 opt-in**。 > > **触发机制**:bot 被 @/回复后进入短暂高 energy 窗口(复用 issue #37 交付的纯函数签名: > `peak_boost * recency_decay(seconds_since_interaction, half_life_seconds)`)。窗口内的非 @ > 消息才评估两级门控(`trigger_kind="event"`);窗口外零成本、零内容读取。boost 数值叠加到 > 情感态 energy 轴,走既有 `gate_threshold_base`——不是独立于门控之外的判定分支。bot 自己在 > 窗口内接话也算一次"交互",会续期窗口。 > > **opt-in 同意机制**:新增一个与 `admin.IsAdmin` 无关的 host 回调,语义明确限定为"这个人在 > 这个群里是不是(平台原生)管理员/群主",不与现有八条管理命令共用的 `_admin_gate`/ > `ports.is_admin` 混用。host 不提供这个能力时,opt-in 功能整体不可用。 > > **未接话内容的隐私处理**:只用于当次评估,不写入任何 RecallEvent/长期存储。 ## Acceptance criteria - [ ] 新增独立的"群管理员"host 回调(Protocol 形状/`ArisePorts` 字段命名参照 `admin.IsAdmin` 惯例自定),语义严格限定为"平台原生群管理员/群主判断"——**不得复用或调用现有 `ports.is_admin`** - [ ] 新增 per-chat opt-in 存储开关 + 对应管理命令(参照 `/setsticker` 先例:`on|off` 纯布尔, 经上一条新回调校验而非 `_admin_gate`);host 未接这个新回调时命令如实说明不支持,不假装生效 - [ ] `slow_interrupt_energy_boost` 正式接线:bot 被 @/回复后开启能量窗口;窗口内 opt-in 群的 非 @ 消息才评估两级门控(`trigger_kind="event"`,走既有级一满分直通 + 级二主模型判定); bot 自己接话续期窗口;窗口外的非 @ 消息不触发任何门控评估、LLM 调用 - [ ] 群内非 @ 消息到达信号接入环境感知 tier-1(`environmental_awareness.py`/情感态 EMA), **不受 opt-in 限制**,所有群常开,只算速率/热闹度、不读内容 - [ ] 能量窗口内被评估但未触发接话的非 @ 消息内容**不写入任何 RecallEvent/长期存储**,只用于 当次评估 - [ ] 补测试:opt-in 关闭的群,非 @ 消息不触发任何插句嘴评估;opt-in 开启但在能量窗口外,同样 不评估;新回调返回 `False`/未接线时命令拒绝;能量窗口内接话后窗口续期;未接话内容不落库 ## Not in scope - 冷场接话(periodic 驱动)/ 群聊 Drive Tick——ADR-0032 明确本轮不做,见"拒绝了"节 - 全量接收(不设 opt-in)——已拒绝 - 上下文构造的具体路径(轻量滑窗 vs 完整 `_full_frozen_snapshot` 召回)、能量曲线具体参数值 (`peak_boost`/`half_life_seconds`)、群管理员能力的具体命名/签名——ADR-0032 明确留给本票 自定,不需要回评估侧确认 - 沉默窗口(发送前礼让延迟)——天然复用现有 `SilenceWindow`,不属于本票范围
Yushu closed this issue 2026-08-19 09:07:16 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ProjectKuma/arise#159
No description provided.