Jackbessaliuz/dsh-memory-semantic ↗★ 2

dsh-memory-semantic

给 meow-memory 记忆系统加一层语义检索:让"记过的"变成"想得起来的"。只读记忆库,绝不写入上游。 适合已安装 meow-memory 并希望通过向量或混合检索提升记忆召回的用户。

패키지
dsh-memory-semantic
호환성
미검증
Cordis peer 범위
^4.0.1
버전
1.1.0
라이선스
MIT
최근 업데이트
2026. 10. 18.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Jackbessaliuz/dsh-memory-semantic

配套使用须知(重要)

本插件是 meow-memory 的卫星,不是替代品。装之前请先确认这几件事。

① 它必须和 meow-memory 一起用

本插件不含任何记忆写入能力——记忆的产生、分层、整理(dream)全部由 meow-memory 负责。 单独装它,记忆库里没有东西可检索,等于空转。

② 它只读,绝不写入

meow-memorydsh-memory-semantic
角色基座:记忆的写入、分层、整理增强层:只读检索与召回
数据库/.dsh-meow/memory.db自己的 /.dsh-semantic/*
本插件对它的影响——绝不写入、绝不修改

两条硬规矩:

  • 本插件始终以只读方式打开记忆库:不建表、不写行、不改 schema。
  • 卸载本插件后,meow-memory 的一切功能与数据原样不受影响。

③ 首次使用会自动建索引

第一次调用 memory_semantic 时,插件会把现有记忆全量嵌入一遍建立向量索引(几百条的库通常几十秒内完成)。 之后新增的记忆会增量补嵌,不需要你操心。

④ Ollama 是可选依赖

  • 装了:走"向量 + BM25"融合检索,召回质量更好。
  • 没装 / 没开:自动降级为纯 BM25,功能不中断,只是语义泛化弱一些。

插件不会因为你没装 Ollama 而报错或阻塞;autoStart: true 时它会在后台尝试把 Ollama 拉起来(不阻塞本次对话)。

⑤ 数据都在你自己的工作区

向量索引、图谱、轮次库都写在 /.dsh-semantic/ 下,删除该目录即可让本插件"从零开始",不影响 meow-memory 的任何数据。

⑥ 它会多花多少 token(实测,量不大)

先说结论:meow-memory 自己的开销不会因为装了这个插件而增加——本插件只读它的库,不改它的行为。真正的增量只有下面两笔:

开销发生在哪实测(150 轮真实样本的中位长度轮次)
每轮一次抽取后台独立调用,不进你的对话上下文输入 ≈ 2,600 tokens + 输出 ≈ 240 tokens
召回注入插在当前提问之前,算进本轮上下文最多 ≈ 1,100 tokens(k=3、上限 1200 字)

按每天 100 轮估算,抽取约 26 万输入 + 2.4 万输出 tokens/天(长回复的轮次会比中位值高,实测样本最长一轮正文 3,752 字)。这个量级下,给抽取配一个便宜档模型就够——插件默认已经把抽取档位固定成温和档(low),不沿用你会话自己的档位。

两条都能单独关,互不影响:

  • 不想要自动抽取:turns.live.enabled: false → 只留三个工具,需要时你自己喊;
  • 不想要自动注入:turns.recallShadow.inject: false → 不再自动递料,但已入库的轮次照样能检索。

③ 首次使用会自动建索引

第一次调用 memory_semantic 时,插件会把现有记忆全量嵌入一遍建立向量索引(几百条的库通常几十秒内完成)。 之后新增的记忆会增量补嵌,不需要你操心。

配置

所有可调参数都集中在 profile patch 的 config: 段,无需改代码:

- id: dsh-memory-semantic
  name: 'dsh-memory-semantic'
  config:
    ollama:
      url: http://127.0.0.1:11434
      model: bge-m3
      autoStart: false        # true = 探测不到就后台拉起 Ollama
      executablePath: ''      # 绿色版/自定义安装可显式指定
      probeTimeoutMs: 800
      warmupWaitMs: 0         # 0 = 点火不等人,本轮直接走 BM25
      embedBatch: 32
    retrieval:
      rrfK: 60                # RRF 融合常数
      rrfPool: 10             # 每路候选池
      outputChars: 220        # 单条记忆返回的最大字符数
      queryInstruction: '为这个句子生成表示以用于检索相关文章:'
    graph:
      topK: 8
      edgeThreshold: 0.62     # 余弦阈值:越高社区越碎
      damping: 0.85
      prIterations: 50
      lpMaxIter: 50
    turns:
      live:                   # 轮次记忆自动写入(默认开启)
        enabled: true
        maxTokens: 4000
        concurrency: 2
        priorTurns: 3         # 抽取时带上前面几轮做上下文
        vector: true          # 是否为每一轮算向量
      recallShadow:           # 召回注入(默认关闭)
        inject: true
        k: 3
        maxChars: 1200
        minQueryChars: 6
    guard:                    # 防复读退化折叠(thinking-guard 并入,1.1.0)
      enabled: true
      dryRun: false           # 调判据时先设 true 观察一天
      minChars: 400           # 思考块短于这个长度不看
      minRepeats: 25          # 同一单元至少重复这么多次
      minShare: 0.20          # 重复部分至少占尾窗句数的 20%
      maxUnit: 30             # 算作「重复单元」的最大字符数(英文环境建议调大)
      tailChars: 4000         # 只看思考块尾部这么长
      foldToolSteps: true     # 带工具调用的步也折叠(含工具结果一起换成说明)
      rotationGuard: true     # v2 判据:短句轮换 / 英文碎片

任何非法值都会安静地退回默认值——配置写错不会让插件加载失败。