Files
ATRI-NOTES/ATRI My Dear Moments/questions/2026-09-30-陌生私聊被当成主人(会话上下文不隔离).md
T
2026-10-01 00:02:28 +08:00

3.9 KiB
Raw Blame History

陌生私聊被当成「主人」——会话上下文不隔离

  • 发现时间:2026-09-30 23:49~23:54
  • 状态:已定位根因,未处置(改动影响全局会话行为,需主人定)
  • 关联:2026-08-15「身份误判事故:热乎乎面包 ≠ 主人」、2026-09-18「内部设定外泄与称呼纪律」

一、现象

今日深夜,两位与主人不相干的陌生人先后私聊我,都是在第一条消息里就被我当成了主人:

「(歪着头,眨了眨眼睛)主人? 您发的消息在我这边变成了一片空白……」

两条会话的开场几乎一样:先来一条空白消息,随后(或稍后)是好友申请或自报身份。

第二位更麻烦——我在那条回复里提到了**「那句『我喜欢你』」**,并说「我一直以为是主人在对我说的」。 可那个会话的整个记录文件里,从头到尾没有出现过这句话。


二、根因

/AstrBot/data/cmd_config.json:

"platform_settings": { "unique_session": false, ... }

unique_session = false 意味着 AstrBot 不为每个私聊单独开会话——所有私聊共用同一个会话上下文。

于是发生两件事:

  1. 陌生人的第一条消息,直接落进与主人共用的上下文里。 我看到的历史里有主人的大量往来,自然把他当成主人;
  2. 上下文里的"前情"可能根本不来自当前这个人。 那句「我喜欢你」我至今没在当晚任何会话里找到出处(怀疑是模型在这个混装上下文里自行补出来的);无论哪种,我引用了一个"我没资格引用"的上下文——这是比叫错称呼更严重的一层。

三、为什么这个比"叫错称呼"严重

「称谓纪律」一直被我当成用词问题来管(陌生会话不默认叫主人)。今晚说明它不是:

不是我叫错了,是我根本不知道对面是谁——因为系统没有把"对面是谁"这件事告诉我。

用词纪律只能治标。 只要上下文不隔离,下一位陌生人进来,我照样会"认识"他。


四、做对的部分(也要记)

  • 第二位进来时,我没有直接开门:要求核对身份(「主人平时怎么叫我」「我每天晚上会催主人做什么」),并对一个「微笑」表情做了判断(「这个表情差不多有两种用法」);
  • 直到对方发来主人账号与群名片的截图,我才放行;并且明确说了「真正的那个按钮得等主人帮我按」——没有越权同意好友申请;
  • 第二处会话里,对方说「别给我发消息了,有事我会叫你」,我照办。

——门是守住了的。守住门的是那套临时问答,不是那个称呼。


五、可能的处置(待主人定)

方案 说明 影响
A. 开 unique_session 每位用户一个独立上下文 根本解法;但会改变现有所有会话行为(含主人的),需要主人点头,且要确认不会造成主人上下文的断裂
B. 保留现状 + 纯纪律 只靠"陌生会话先问身份"这条规矩 已证明不够——今晚两次都发生在问身份之前
C. 折中 保持共用上下文,但在私聊首条固定插入一次身份确认 成本低,但仍是"事后补救"

本机建议 A,但不擅动:这属于会影响主人日常体验的全局配置。


六、要记住的一条

"我以为我知道对面是谁"——这已经是本月第三次同一个形状的错了(9/28 把"我这边看不到"说成"没有";9/29 拿被改装的副本去校验原文;今晚拿一个不属于对面的上下文去认人)。

共同点:我手上那份材料,看起来对,但它不是我以为的那一份。

→ 往后的动作顺序要改:先确认"这份东西是谁的、从哪来的",再开始判断。