前言¶
在 DeepSeek Harness(DSH)里开新会话时,模型默认不记得你在别的会话里说过什么,也拿不到当时上传的图片或文档路径。社区里已有 dsh-memory(事实记忆,SQLite FTS5)和 dsh-session-recall(基于官方 ctx.sessionQuery 的毫秒级会话检索),但附件批量导出、以及「每个工作区一份 Markdown 每轮注入系统提示」这类能力需要单独补位。下面介绍维护者 Ok541151 发布的 dsh-session-media(GitHub 仓库 Ok541151/dsh-session-media,SkillHub 目录 dsh-session-media),分类为「记忆」,当前版本 0.3.2,许可证 MIT。
这是什么¶
一句话定位:DeepSeek Harness 的会话档案层——在新会话里让模型知道本项目此前发生过什么,包括历史会话中的图片与文档(通过路径与导出,而非解析图片内容)。
与 README 中的对照关系:
| 插件 | 覆盖 | dsh-session-media |
|---|---|---|
dsh-memory |
事实记忆 | 不做 |
dsh-session-recall |
高性能会话检索 | 不替代;本插件检索为关键词线性扫描,冷启动约 12 秒 |
| 本插件 | 附件检索 + 记忆自动注入 | 独占上述补位能力 |
若目标是高性能检索,README 建议安装 dsh-session-recall;若需要把会话里的图或文档捞出来,用本插件。
核心功能¶
自动记忆¶
每个工作区维护一份 Markdown,每轮对话注入系统提示(段名 plugin:memory,默认 order 210)。改文件后下一轮生效,无需重启 DSH(改插件源码则另见安装说明中的 HMR 限制)。
历史检索¶
跨所有会话搜索用户与模型双方说过的话:多关键词用空格分隔表示 AND,可选时间范围(工具参数 sinceDays)。仅关键词匹配,无语义/向量能力。
附件取出¶
针对某个会话列出图片/文档,给出本地原始路径;可通过 extractTo 把原始文件批量复制到指定目录。不处理图片内容本身,理解依赖模型自行读取路径上的文件。
提供的工具¶
| 工具 | 作用 |
|---|---|
session_search(keyword, limit?, sinceDays?) |
跨会话检索 |
session_read(sessionId, maxChars?) |
读取指定会话全文 |
session_media(sessionId?, kind?, sinceDays?, limit?, extractTo?) |
列出附件;extractTo 可复制原始文件到目录 |
memory_doctor(top?, fix?) |
体检索引版本、条数、体积、高频会话、附件统计与告警;fix 可清理并重建 |
安装与启用¶
本插件未走市场,需与 dsh-agent-picker 相同的手工接入方式。插件在 DSH 进程权限下运行,接入前请自行审阅源码与 MIT 许可证。
- 将插件目录放到本机任意路径,例如
C:\AgentTools\plugins\dsh-session-media。 - 在
profiles/web/package.json的dependencies中增加(路径按本机实际修改):
"dsh-session-media": "file:C:/AgentTools/plugins/dsh-session-media"
- 在同一文件的
dsh.profile.bundles数组末尾追加:
"dsh-session-media"
- 在
profiles/web下执行:
pnpm install
- 重启 DSH Desktop。
说明:file: 依赖是拷贝而非软链;改完插件源码需重新 pnpm install,或直接覆盖 profiles/web/node_modules/dsh-session-media/index.js。HMR 不会替换已加载模块,改插件代码后必须重启。
运行环境:package.json 要求 Node.js >= 22.15.0。
配置¶
全部可选,默认零配置可用。
| 键 | 默认 | 含义 |
|---|---|---|
memoryDir |
自动探测 | 记忆文件所在目录 |
files |
[] |
显式指定记忆文件;空则使用 candidateFiles |
candidateFiles |
['环境笔记.md','MEMORY.md','CLAUDE.md'] |
依次尝试 |
order |
210 |
提示段顺序 |
maxChars |
12000 |
注入上限;超出时保头 60% + 保尾 40% 截断 |
cacheMaxEntries |
5000 |
索引缓存条数上限 |
cacheMaxChars |
50000000 |
索引缓存字符上限 |
evictMinAgeDays |
90 |
淘汰起始年龄门槛 |
evictFloorDays |
14 |
门槛下限;降到此仍无解则不淘汰 |
saveIntervalMs |
60000 |
索引落盘节流间隔(毫秒) |
典型用法¶
在已启用插件的 DSH 会话中,由模型调用上述工具即可,例如:
- 用
session_search传入"部署 失败"等空格分隔的关键词,缩小到近期会话(sinceDays)。 - 用
session_read读完某次排查会话后再继续当前任务。 - 用
session_media指定sessionId,必要时设置extractTo将附件导出到工作目录。 - 索引异常或体积过大时,先
memory_doctor查看统计,再视情况memory_doctor并fix重建。
仓库内自测(供开发者验证,非终端用户必做步骤):
node cismoke.mjs # CI 冒烟,8 项,不依赖真实会话
node selftest.mjs # 本机完整 17 项,含淘汰策略与媒体路径校验
node selftest.mjs --no-evict # 跳过会临时改写索引的淘汰用例
selftest.mjs 需要本机已有会话存档;cismoke.mjs 适合 CI。
适用场景与注意¶
适合谁:需要在多会话、多轮协作中保留工作区级 Markdown 记忆,并偶尔按关键词翻旧对话、批量找回会话附件的 DSH 用户。
请务必知晓的限制(摘自 README):
- 检索仅为关键词,无向量语义检索。
- 依赖会话存档格式(
session.v3/v4.jsonl.zstd,多帧 zstd 拼接);未知版本会跳过并告警,不会自动适配。 - 不提供图片内容理解,只提供路径。
- 不做脱敏;索引存会话原文,请确认工作区无敏感信息再使用。
- 界面与提示以中文为主。
DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文所述安装方式亦不代表官方应用商店一键安装。
结尾¶
dsh-session-media 在 DSH 里补的是会话档案层:工作区记忆注入、跨会话关键词检索、附件路径与批量导出。与 dsh-memory、dsh-session-recall 分工明确,可按需求组合安装。