前言¶
在 DeepSeek Harness(DSH)里开一场新对话,上下文不会自动带上上一场聊过的内容。上下文压缩插件解决的是「当前这场对话太长」的问题;换会话、换工作区之后,过去几天里具体说过什么,往往只能靠人工翻目录或凭记忆复述。
下面介绍社区插件 dsh-semantic-recall(维护者 zhaohualiuyuejun,分类:记忆)。它在本地只读最近 N 天(默认 7 天,可调,硬上限 365 天)的会话历史,建立语义索引,支持跨工作区检索;你用模糊描述提问时,返回的是候选原话与会话锚点,相关度不够时会给出候选菜单由 agent 反问,而不是硬编答案。需要说明的是:npm 上另有他人维护的 dsh-session-recall(字面式检索),与本插件包名 dsh-semantic-recall 无关。
这是什么¶
dsh-semantic-recall 是 DSH 插件:只读 $DSH_HOME/sessions 下的 session.v4.jsonl.zstd,在 $DSH_HOME/session-recall/ 建索引,向 agent 暴露 4 个工具,并自带 Web 设置页(不依赖有问题的 settings.update() 写入路径)。当前版本 0.2.5,许可证 MIT;GitHub 仓库见文末链接。
它不替代长期记忆插件(不参与人格注入、不自动「记住」用户),只做索引窗口内的短期原话召回;与 topic 摘要类记忆插件搭配时,记忆给线索,本插件负责把「那天原话」找回来。
核心功能¶
会话语义检索¶
检索采用向量余弦与 BM25 字面匹配,经 RRF 融合;返回以「那场对话」为单位,而不是孤立一句。支持自然语言时间锚点(今天、昨天、上周、N 天前等)。默认 session_recall 只排除调用方当前这场会话,其他刚结束或刚归档的会话仍可搜。
嵌入能力可用时走语义检索;不可用时降级为字面匹配,只能给候选。判定上采用可调阈值:默认 minScore 0.70、midScore 0.55;最高相关度低于 0.55 时不装懂,返回 fallback_menu(按天话题卡 + 最近会话)。
日摘要与话题卡¶
默认用 DSH 当前模型做每日 3~5 个话题摘要,也可在设置页指定本机 Ollama(完全不出网)。Ollama 不可用时会跳过话题卡,不影响工具可用。
多源工作区隔离(设置页)¶
可在「源工作区」中为不同用途建隔离域:每个源独立库 scopes/<源>/index/,归属该源的工作区才可建索引与检索;未建源时保持老行为,全部工作区共用一个 index/。桥接通道(QQ 等)需自行把 session_recall 加入工具白名单,且建议仅对管理员私聊放行(返回原文)。
与记忆插件的对接约定¶
返回 JSON 含 session、workspace、hits[].messageId、hits[].seq 等锚点。传 session_recall({ session: "session-..." }) 可跳过语义检索,直接拉该会话原文块(受源隔离约束)。记忆插件可把 sourceSessionId 用于下钻原文。
安装与启用¶
bundle 自带 cordis patch,不需要 Node 依赖、不需要手改 profile。装完后刷新页面,左侧「设置」里出现「会话语义检索」即成功。
方式 A(推荐给 DSH 内 AI):用 plugin_manager 执行 install_bundle,target 填 dsh-semantic-recall,装完刷新页面。
方式 B(创造模式):
action: install_bundle
target: dsh-semantic-recall
方式 C:将 clone 所得目录的绝对路径作为 install_bundle 的 target(资料原文含 git clone 步骤;若你方环境禁止 clone,可用方式 A/B 或 Release tgz)。
网络无法访问 npm registry 时,target 可换为 Release 地址(资料原文):
https://github.com/zhaohualiuyuejun/dsh-semantic-recall/releases/download/v0.2.5/dsh-semantic-recall-0.2.5.tgz
版本要求(package.json):Node >=22(依赖内置 zlib.zstdDecompressSync);DSH >=0.2.1-rc.5(插件在该版本实测通过)。
启用后 ordinary 用户只需打开 设置 → 会话语义检索:配置索引天数、工作区勾选、云端或本地嵌入、增量/全量重建等。刚聊完想立刻搜,可点「增量更新」(默认定时增量为启动后每 6 小时)。
典型用法¶
Agent 侧主要工具如下(名称与参数以 README 为准):
| 工具 | 用途 |
|---|---|
session_recall |
核心检索:query / days / role / maxSessions / includeActive / session |
session_recall_status |
索引块数、嵌入是否就绪、是否在构建等 |
session_recall_reindex |
手动重建(force=true 全量重嵌) |
session_recall_config |
读/改非密钥设置(含 minScore / midScore) |
语义检索示例(由 agent 调用):
{
"query": "前几天说的 C 盘清理那个方案",
"days": 7
}
已知会话 id 时直接下钻:
session_recall({ session: "session-fe4c6d40-889b-411c-bbf6-9329dfbc8161" })
调整阈值示例:
session_recall_config({ "minScore": 0.65 })
资料建议:minScore 不建议低于 0.60(假命中区间与真命中在实测中有重叠)。
适用场景与注意¶
适合:经常在 DSH 里开新对话、跨多个工作区协作,需要用自然语言找回几天内聊过的原话;愿意本地建索引,并可选择云端嵌入或纯本地 Ollama / 字面降级。
务必知晓:
- 只索引窗口内会话;排除的工作区不会进索引;被排除或超出窗口的内容搜不到。
- 插件以当前 DSH 进程权限运行,安装前应自行审阅源码与 MIT 许可证。
- 云端嵌入时仅发送切好的文本块到配置的 API;不出网可将 provider 设为
local或none,或点设置页「停用嵌入」(检索能力下降)。 - 索引与配置写在
$DSH_HOME/session-recall/,绝不写回 sessions 目录。 - 全量重建可能需数分钟(资料实测约 10 块/秒量级),属正常现象。
DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-semantic-recall 解决的是「换对话、跨工作区之后还能不能把原话找回来」,与上下文压缩、长期记忆插件互补:压缩保当前场次的窗口,记忆给长期线索,本插件管索引窗口内的语义召回与原文锚点。
- 目录页:https://www.skillhub.cn/plugins/zhaohualiuyuejun/dsh-semantic-recall
- GitHub:https://github.com/zhaohualiuyuejun/dsh-semantic-recall