/why + /why_query 可解释性命令(含记忆敏感闸) #91
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/83-why-commands"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #83
PRD #77 的最后一片,也是 design.md「上线路线」六个阶段里最后一块没落地的。
四个 grill 决策
/why只看本 chat:不提供跨 chat 参数,也就不存在「在自己的群里查别人私聊」这条路径。/why_query的情感坐标默认取当下真实值、可选覆盖:最常见的用法是「现在这条查询为什么召不回那条记忆」,不该逼人先拍两个数字 —— 拍错会得到误导性结果,而这个命令存在的意义就是给出可信诊断。score_breakdown,score_events改成建在它之上。同一个公式只剩一份实现 —— 两份会在改权重逻辑时只改一边,调参工具就会讲一个与真实排序脱节的故事。既有 17 条召回测试零改动通过。关于敏感闸,说实话
AC 要求两个命令都按「命令在哪个 chat 发起」重过
is_event_visible。实现了,但我第一版给出的理由是错的,规格轴核实后已改直:EventModel只有 insert/select、Delta 压缩只写不删;而/why只读本 chat 快照、召回当时已用同一个纯函数滤过 —— 所以/why那条路上的两个计数在当前代码里可证不可达。这是我在 #79 犯过的同一个错(把不可达分支包装成 AC 覆盖)。get_events自己不过滤(取数与「给谁看」刻意分开,这是契约的一半);②/why_query那条真的可达 —— 它直接搜全库,且持久化版走 Qdrant 侧另一份过滤实现;③ 前向兼容(ADR-0010 的「忘记我」会让第一条立刻变可达)。变异验证抓到的两处
/why_query的敏感闸测试原本是空转的:SentLog.search_events在存储层已经过滤,命令里那道冗余闸从未执行 —— 删掉它测试全绿。补了会泄漏的存储替身(同 issue #69_LeakySearchStorage既有做法)绕过上游,闸才真正被触达。_VERDICT_WORDS的键全写错了:GateVerdict的取值是silent_level1/silent_budget,我写成了suppressed_by_*—— 任何一次沉默都会渲染成裸的内部标识,而那恰恰是这条命令存在的唯一理由。我原来那条测试是"proceed" in text or "开口" in text or ...的析取,fallback 吐出标识照样通过。已改成逐裁决断言「不含内部标识」+get_args穷举守卫,并删掉一个永不命中的死键(串了CostPool的取值)。另有一处变异是语义等价的:
current_chat_id=chat_id换成snapshot.chat_id不会挂 ——/why按本 chat 取快照,两者恒等。记录在此,避免下次误判成漏网。两轴 review 后补的
PersistentStorage.get_events原本零测试覆盖,而它手写的 participants join + mood 重建正是生产路径。新增契约测试文件(两套实现共用同一套断言),含「两列都空必须还是None、不能变成MoodTag(0,0)」这条 issue #67 的既有语义。/why现在也渲染未决意图(PRD 字段清单里它与记忆条目并列,少了它答不了「它为什么突然提起那件事」)。valence=nan/inf此前被接受,会经mood_similarity污染总分让排序失序、输出印nan;看海 valence=1此前被静默吞进查询文本(正是 docstring 自己说拒绝做的事)。两者都改成明确拒绝。arise_why_query_candidates的 docstring 与代码互斥,改的是文档(代码符合 AC)。RecallWeights的构造抽成_recall_weights(config)(漏改一处的表现恰恰是「调参工具与真实召回脱节」);storage.py手写的行→EventRecord抽成_to_event_record,mood 判定复用既有_event_mood(此前是同一条规则的第三份拷贝)。验证
1401 测试全绿。
C:/Program Files/Git/why + /why_query 可解释性命令(含记忆敏感闸)to /why + /why_query 可解释性命令(含记忆敏感闸)