这周攒的三个问题,单看都不大,凑一块儿却都指向同一件事:模型拿到的上下文,和我以为它拿到的,不是一回事。摘要越摘越杂、一句「谢谢」把正经请求噎回去、分身用第三人称称呼自己—— v0.4.9 就是把这三处掰正。

事故一:摘要越摘越杂,旧事反复回锅

起因是我发现多人会话的摘要里,老是混进些早都摘过的人和事。查下来是两个原因叠在一起:

修法也两处:时间统一折算到同一基准再比较,真正做到「只摘上次摘要之后的增量」;取材侧和拼接侧双重过滤,把系统自己写回的摘要副本和 digest 推送副本都排掉。顺手还改了增量超限时的策略——以前保留最旧、丢弃最新,导致新消息长期摘不到,现在反过来保留最新。

原则:摘要的价值在「增量」和「干净」,一旦允许回锅,杂质就会每轮放大。

顺带:摘要按日期与主题拆分

取材干净了还不够,呈现也得清楚。现在素材按日期分段喂给模型,并要求严格按日期划分摘要、同一天内互不相关的主题拆成多条独立摘要,每条以「【对话摘要】YYYY-MM-DD」开头。杜绝那种一条大杂烩跨天混事的情况。

事故二:一句「谢谢」,把正经请求噎了回去

处置层原本有个判断:消息里含「谢谢」且全文很短,就当纯致谢直接跳过、不响应。听起来合理,实际问题很大——「麻烦帮开一下 VPN 吧,谢谢」这种正经业务请求,也被当成客套话跳过了。

修法是加一道尾部礼貌语剥离:把句末的「谢谢 / 感谢 / 辛苦了 / 多谢」先剥掉,再看剩下的核心有没有实质内容。有,就按业务请求走;没有(比如「收到,谢谢」),才归客套。同时补了一批通用请求动词(请 / 能否 / 帮忙 / 开一下 / 查一下)进证据词表,覆盖原来漏掉的表达。

原则:别用「整句里有没有某个词」去猜意图,先把礼貌语这层壳剥掉,再判断内核。

事故三:AI 用第三人称称呼自己

这个最尴尬。同事问 WiFi 密码,分身引用我此前发的账号信息时写的是「密码 xxx(XX 刚才发你的)」——而那个名字正是分身所代表的主人本人。等于它用第三人称称呼了自己,对面的人会以为还有第三个人在场。

有意思的是,提示词里其实早就写了「严禁出现你本人的名字」。为什么没挡住?两个原因:

这里我特意没有去扩末端闸门的正则。那个闸门命中后是整句替换成安全模板,会把账号密码这类有用正文一起删掉,代价远大于收益。人称是行为问题,该在提示词层解决:我在近因位补了一段「自称与人称」指令,锁死映射——自称用「我」、称对方用「你」,提到自己此前发过的东西说「我刚才发你的」。

原则:写「禁止 X」之前先想清楚它同时放开了什么。这次我特意加了一句「提到真正的第三方时照常用其姓名」——只禁不禁放行,模型连「某某刚才说过」这种正常话都不敢写了。

升级注意

无破坏性变更。含运行时逻辑变更(摘要取材、意图判定、提示词),升级后需重启 Linkora 服务生效。存量会话无需清理:历史摘要副本在取材时即被排除,下一次摘要自动恢复干净范围。

完整变更见 CHANGELOG,代码在 GitHub。