Skip to content

[Bug]: mnemon-native provider 丢弃向量相似度并按混合分截断候选,语义召回被淹没 / provider discards vector similarity and truncates candidates by hybrid score #577

Open

Description

@mk3962

提交前查重 / Duplicate check

涉及区域 / Affected area

记忆空间或 Provider / Memory Spaces or Providers

Issue 类型 / Issue type

Bug 报告 / Bug report

摘要 / Summary

dsh-mnemon-provider-mnemon-native 的 search() 把上游 candidateLimit 直接当 CLI --limit(候选被混合分截断),且丢弃 CLI 结果里的 signals.similarity、把 strict-v1 相关度阈值作用在 keyword/graph/recency 混合分上——语义最相关的记忆取不回来或被误降级/误丢。/ The provider truncates candidates by hybrid score before ranking and discards vector similarity, so strict-v1 relevance thresholds act on the hybrid score — semantically relevant memories are missed or wrongly dropped.

预期结果 / Expected outcome

recall 模式下应按向量相似度取回语义最相关的记忆,strict-v1 三个分支(≥0.6 high / 0.25–0.6 medium / <0.25 drop)应作用在归一化相关度上(与 scoreSemantics: "normalized-relevance" 的既有声明一致)。可验证结果:同一语料上语义问句 h@3 从 13/20 提升到 20/20(见下)。

详情或复现步骤 / Details or reproduction steps

  1. 准备 / Prepare:写入 20 条真实中文事实到 memory spaces(语料已全量嵌入,bge-m3)。
  2. 提问 / Query:20 条不含关键词的语义问句(问句与事实字面无重叠,仅语义对应)。
  3. 观察 / Observe:mnemon_recall(→ source strict-v1 → provider mnemon-native → CLI recall <q> --limit N)返回的 top 结果经常不含语义对应条目;部分条目被 strict-v1 判为 medium/drop。
  4. 实测对照 / Measured A/B(同一语料、同一库、同一嵌入模型):
取回方式 / Method h@1 h@3
现状:CLI 原生混合序(candidateLimit 截断 + 混合分过闸) 13/20 13/20
修复:取满候选 + --verbose + 按 signals.similarity 重排、score 归一 18/20 20/20
参考:keyword 模式 14/20 16/20
  1. 报错原文 / Observed: 无报错,纯排序/阈值语义错误——「分数语义错位」而非崩溃。

环境信息 / Environment

  • DSH 版本 / DSH version: 0.2.1-rc.5 → 0.2.2-rc.1(两代行为一致)
  • dsh-mnemon 版本或 commit / dsh-mnemon version: 0.5.37 → 0.5.41(provider dsh-mnemon-provider-mnemon-native 0.5.9 → 0.5.10,缺陷在两版均在)
  • Mnemon 版本 / Mnemon version: 内嵌 CLI(随 dsh-mnemon 分发)
  • Node.js / pnpm: Node 24.21.0(宿主内核 Electron 44.7.0)/ pnpm 11.28.5
  • 操作系统或浏览器 / OS: Windows 11 x64
  • Provider 或相关配置(已脱敏)/ Provider config: 嵌入模型 bge-m3,库已全量嵌入;strict-v1 默认阈值 low 0.25 / high 0.6

Bug 证据 / Bug evidence

调用链取证(plugins/dsh-mnemon-provider-mnemon-native/lib/index.js,0.5.10 仍在):

  • 缺陷①候选截断:search() 把上游 candidateLimit(默认 10×3=30,上限 50)直接作为 --limit 传给 mnemon recall CLI;CLI 返回前已按 keyword/graph/recency 混合分排序并截断 → 语义相关但混合分不高的条目在进 provider 前已落选。
  • 缺陷②分数语义错位:normalizeInsight() 只保留 item.score(混合分),丢弃 CLI 结果的 signals.similarity(该字段仅 --verbose 时返回);strict-v1 随后拿混合分比 lowScoreThreshold 0.25 / highScoreThreshold 0.6 —— 阈值本为归一化相关度设计。

嵌入模型(bge-m3)本身没问题:similarity 信号是好的,是取回链路把信号扔掉了。

冒烟测试 / Smoke test

  • 测试环境 / Test environment: 本机 DSH desktop profile,真实 20 条事实语料 + 20 条语义问句
  • 执行命令或操作 / Actions: A/B 对照——原序 vs 按 signals.similarity 降序重排 + score 归一为相似度;并模拟 strict-v1 闸门统计 h@1/h@3
  • 实际结果 / Observed: 修复后 h@3 = 20/20(原 13/20);keyword 模式回归 8/8 顺序一致(不受影响)
  • 对照版本或配置 / Control: 未打补丁的 provider 0.5.10 原生行为

引用代码 / Code references

  • plugins/dsh-mnemon-provider-mnemon-native/lib/index.js — search() 的 --limit 直传(缺陷①)与 normalizeInsight() 的 score 保留逻辑(缺陷②);0.5.10 未变。

补丁草案 / Patch proposal

均在 provider search() 内,不动 Go CLI:

  1. recall 模式放宽取回量:--limit min(50, max(20, requested×4))。
  2. 结果请求加 --verbose,让 signals.similarity 回到 CLI 输出。
  3. 按 signals.similarity 降序重排,insight.score 覆盖为相似度(0..1)——同时让下游 scoreSemantics: "normalized-relevance" 声明首次真正成立。
  4. 安全降级:结果中无任何 similarity(如库未嵌入)时保持 CLI 原序原分,不得清空结果。

keyword / status / list 等路径不碰(保持原序原分)。以上已在本地以补丁形式运行(幂等标记 [dsh-fix:semantic-rank]),verify 8/8 通过。

补充信息 / Additional context

  • 无最小复现仓库;语料与 verify 脚本为本地私有数据,如需要可脱敏整理后补充。
  • 本报告由 Windows 单机环境实测得出;两组数字各跑一次,未做多次平均。

Activity

  1. github-actions commented on Nov 6, 2026

    @github-actions

    基础信息已补齐,后续由维护者排查和处理。
    Required report information is present. Maintainers will review the report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions