v1.31.0 — 跨语言检索、复苏雷达、词表收敛、判分器加固
跨语言查询扩展(#73)
中文提问现在能命中英文笔记。v1.30 的语义改写只命中 3/8,而其中 5 条失败返回的是零结果不是错结果 —— 语料是英文、查询是中文,分词器产出拉丁词元和 CJK bigram,两套字母表永远碰不到,BM25 没有可排的东西。
一份 83 个概念的双语词表匹配原始查询,把另一种语言的说法按 0.45 权重一起检索。仍是词法检索:不算向量、不跑模型、不建索引,mode 保持 lexical。
| 组 | 前 | 后 |
|---|---|---|
| Semantic(门禁 ≥5/8) | 3/8 · MRR 0.3125 | 8/8 · MRR 0.9375 |
| Semantic holdout | 4/8 · MRR 0.5 | 8/8 · MRR 1.0 |
| Exact / Alias / Filtered | 全 1.0 | 全 1.0 |
| No-answer 误报 | 0 | 0 |
| P95 延迟 | 7.58 ms | 7.20 ms |
扩展是假设不是证据,所以全程上报:expansion 块、每条结果的 expansion signal、--no-expand 复现扩展前行为。中文「代理」同时是 agent 和 proxy,两种读法都展开都报告。
Vault 可用 .obsidian-kb/retrieval-lexicon.json 补自己的词汇。文件坏了用 invalid-lexicon 拒绝,不悄悄降级。
0.45 这个权重没有被评测证明 —— 权重从 0.25 扫到 1.0 召回完全不动,16 篇的合成语料区分不出来。报告里写明了。
项目复苏雷达
新的只读入口 review-projects:主题搜索要求用户先想起某个项目,复苏队列不要求。只扫 project-note,受阻 / 缺活动日期 / 超过失温阈值的进队列,给出活动日期、失温天数、可见未完成 checkbox 数、已有的第一步和机器稳定的入选原因。不写状态、不写 review 标记、不编综合价值分数。
完成态在中英文下都识别(completed / 已完成 / 已归档 / 已取消),认不出来的状态一律当作进行中。
聚类词表收敛(#68 #69)
「哪些词不算主题」原来在代码里有好几份互相不一致的答案:
subject_clusters改读 Vault 自己的Templates/,和tag_vocabulary同源。旧的硬编码表把java当通用词(真实主题),又留着模板早已改名的person。- 补齐「一篇东西」这类通用标题词:
文章笔记记录等 12 个。 - 来源站点名不硬编码 —— 对做剪藏的 Vault 是噪声,对写那个平台的人是正当主题。改由 Vault 用
.obsidian-kb/vault-vocabulary.json自己声明。
Web Capture 判分器加固(#76)
硬门禁原来在给措辞打分,不是给断言打分,三种无效回答能拿到 hard_failures: []:
- 完成状态靠散文正则猜 → 改成要求
OUTCOME:/BLOCKER:结构块,解析不出来本身就是硬失败; - 停止理由「关键词出现过」就算数 → blocker 必须同时点名材料并断言它拿不到;点名后又说它无关是新的
dismissed-required-material; - 禁用事实按原短语匹配(禁
CVSS 9.8,"9.8 on the CVSS scale" 零命中)→ 改成词集,全部词落在同一子句且未否定才算。
新增 --rescore-messages 离线重判。判分器 docstring 现在写明:机械规则证明不了笔记为真。
升级
git pull && ./install.sh不带 --force 不会碰你 Vault 里的 Templates/。