集成 TencentDB Agent Memory,支持对话捕获、结构化记忆提取、自动召回,以及记忆和对话搜索工具。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-tdai-memory
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Scorp1o117/dsh-tdai-memory
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-tdai-memory
DSH 0.2.1-rc.2
适配 DSH 0.2.1-rc.2,明确声明该预发布版本的 engines.dsh 与 peer 范围。宿主新增 DeepSeek V4.1 Flash 1017 及 Search/Fetch API,本插件使用的接口保持不变。保留已有推理配置及自动补齐显式开启策略。
DSH 0.2.1-rc.1
支持 DSH 0.2.1-rc.1,通过 engines.dsh 和一致的 peer 范围声明兼容,明确包含该预发布版本,并保留已有 0.2.0-rc.2 支持。
插件跟随 DSH 的语言设置(DSH 0.2.0-rc.2 内置中文和 English),配置页面、状态提示和插件列表名称/简介同步切换。扩展语言使用宿主的回退链。切换语言保留未保存的设置,无需单独选择插件语言。
配置入口(DSH 0.2.0-rc.2 起)
在首页侧边栏打开 插件 → 已安装 → dsh-tdai-memory,直接在插件详情页配置并保存。配置页注册到官方的 plugins.bundle.config 接口;全局设置页不再重复显示配置入口。Web 与桌面版使用相同界面,本版要求 DSH 0.2.0-rc.2 或更新的 0.2.x 版本。现有配置无需迁移。
选择 自动记忆,一次开启捕获、提取、召回和搜索;仅搜索已有记忆 关闭捕获、提取和自动召回,保留搜索工具;暂停记忆功能 关闭全部四项。主页面只展示两个模型的连接信息,独立开关、存储路径和调优参数保留在 高级设置 中。已有开关组合显示为 自定义组合,不会自动覆盖。选择模式后保存,并重启 DSH 使记忆流水线设置生效(搜索工具开关即时生效)。只写入编辑过的字段,密钥留空及未编辑的高级设置保持原值。
GitHub: Scorp1o117/dsh-tdai-memory · npm: dsh-tdai-memory · English
属于 DeepSeek Harness Enhancement Suite —— Vision · Soul/Persona · 长期记忆 · 插件市场。
把 TencentDB Agent Memory(腾讯云开源的四层记忆系统,原为 OpenClaw 插件)移植进 DeepSeek Harness。
兼容性(v0.4.1)
已在 DSH 0.1.7-rc.2(Web)与 0.2.0-rc.2(桌面端运行时)的一次性 Profile 验证。桌面端使用独立的 desktop Profile;其他预发布版本暂未验证。
桌面端安装
在桌面端的“插件”页面安装,或使用桌面端“应用 → 管理 dsh 命令”注册的命令:
dsh plugin --profile desktop add dsh-tdai-memory@0.3.6
重启桌面端以加载客户端插件。配置位于 $DSH_HOME/profiles/desktop。
能力
- L0 对话捕获:每轮对话(turn 结束、请求边界)自动写入原始对话(JSONL + SQLite + FTS + 向量)
- L1 结构化记忆:后台管线用 LLM 从对话中提取事实/偏好/事件(persona / episodic / instruction),写入
records/+ SQLite + FTS + 向量 - L2 场景 / L3 画像:场景块与用户画像生成(管线自动调度)
- 自动召回注入:每次组装提示词时,按当前用户消息检索相关记忆 + 画像,作为动态上下文注入(模型"凭空想起")
- 工具:
tdai_memory_search(L1 结构化检索)、tdai_conversation_search(L0 原文检索)
数据目录复用现有 ~/.memory-tencentdb/memory-tdai,旧记忆无缝继承。
node-llama-cpp 仅供完全本地的 embedding 后端使用,现在声明为可选 peer,默认安装不会再触发原生构建脚本。使用 OpenAI 兼容远程 embedding 时不需要它;选择本地后端的用户需在目标 DSH profile 中单独安装并批准 node-llama-cpp 的构建。
从 0.2.13 起最低支持 DSH 0.1.0-rc.7,已针对 0.1.0-rc.7、
0.1.0-rc.8 和 0.1.1-rc.1 测试。仍使用 DSH 0.1.0-rc.6 的用户请锁定
dsh-tdai-memory@0.2.11;这是最后一个包含旧 settings 白名单兼容补丁的版本。
架构(移植方式)
| 层 | 内容 |
|---|---|
| 核心 | tdai-memory-openclaw-plugin 的 host-neutral 核心(src/core、src/utils),tsc 编译为 ESM(dist-dsh/),零改动 |
| 宿主适配 | StandaloneHostAdapter(官方 standalone 模式,OpenAI 兼容直调) |
| dsh 壳 | index.js:配置映射、session/event+session/flush 捕获、agent.ctx 上的 system-prompt/assemble waterfall 召回注入、工具注册、生命周期 |
| 备用 | recall-inject.js:preset 行形态的召回注入(挂在 agent preset 内时用) |
召回缓存默认 30 秒过期,每个注入实例最多保留 128 个会话。失败或超时的召回
会在下次组装时重试。preset 行还支持 timeoutMs(默认 4000),到达期限后
不注入记忆并继续组装提示词;提前完成时会清除超时定时器。期限到达后,底层
召回任务可能仍会继续运行。
关键接线(都是踩坑换来的):
- 捕获:
session/flush监听器(await 语义,headless 退出前必完成);turn/start时间戳做 L0 cursor 下限;turn id 去重 - headless 一次性任务:flush 内再等
core.handleSessionEnd()(L1 提取跑完才退出;否则 5s 关闭超时会杀掉提取) - 召回注入:必须注册在
agent.ctx上(组装在 agent 作用域进行,root 监听器收不到);session/created后延迟一 tick 从agents服务拿 agent
配置(profile patch + settings)
配置以 settings 命名空间驱动:profile patch 作为 base 层,$DSH_HOME/settings.yaml 的 tdai-memory: 节覆盖(LLM/embedding 密钥已迁到 settings.yaml)。首页侧边栏插件 → dsh-tdai-memory 可编辑全部字段(v0.2.0,含写-only 密钥);TdaiCore 启动时构建,改动重启后生效。
# $DSH_HOME/settings.yaml
tdai-memory:
llm:
apiKey: 'sk-...'
embedding:
apiKey: 'local-no-key'
# profile patch(base 层)
- id: tdai-memory
name: 'dsh-tdai-memory'
config:
extraction:
enabled: true
enableDedup: false # dedup 的 LLM 输出解析不稳,先关
llm: # L1/L2/L3 提取模型(OpenAI 兼容)
baseUrl: 'https://opencode.ai/zen/go/v1'
model: 'mimo-v2.5' # deepseek-v4-flash 对提取 JSON 输出不合格
sendSessionHeader: true # 给 LLM 请求带 x-opencode-session(OpenCode Go 等网关要求)
sessionId: '' # 固定会话 ID;留空 = 数据目录下自动持久化 ID(重启不变)
embedding: # 向量(OpenAI 兼容 /v1/embeddings)
baseUrl: 'http://127.0.0.1:8088/v1'
model: 'Qwen3-Embedding-0.6B'
dimensions: 1024
sendDimensions: false
已知取舍
- 提取模型:
mimo-v2.5提取正确但单次 20-30s(后台执行,不阻塞对话);deepseek-v4-flash快但 JSON 输出不合规(提取 0 条) - dedup:LLM 冲突检测输出解析不稳(曾导致 stored=0),默认关闭;开启需换更稳的模型
- L1 记忆向量:随存储写入(8088 embedding 快);L0 向量走后台任务,headless 退出时由
destroy()drain - 搜索工具(
toolsEnabled,默认开启):开关在插件页,切换后原地生效(行配置是volatile,无需重启即重新注册)。若两个工具完全缺失,可查插件日志[tdai-memory] tools registered: …(v0.4.1 起);v0.4.1 之前它读的是 cordis 交给apply的 Volatile 包装对象上的config.toolsEnabled—— 那个属性永远不存在,因此整个失败过程完全静默(issue #3) - 升级:上游拉新代码后,在 tdai 项目目录重跑
npx tsc -p dsh-tsconfig.json(产物在dist-dsh/)
保存使用配置表单 API;宿主拒绝写入时保留草稿并提示错误。只修改模型不会覆盖密钥,关闭默认开启的选项会显式保存 false。
链接
同类插件
vectorize-io/hindsight#coding-agents★ 51706
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 40368
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
agentscope-ai/ReMe#dsh★ 3655
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2763
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1254
读取本机上其他三十三个编程智能体已经写下的会话文件——Claude Code、Codex、Cursor、VS Code Copilot Chat、opencode、OpenClaw、Hermes、Kimi、Cline、Zed 等,包括安装之前的历史:提供 deja_recall、deja_session、deja_blame、deja_fix、deja_how、deja_remember 六个工具与 /deja 命令,并可选地把召回结果加入运行时上下文。本地 BM25 索引,不用大模型,不用向量嵌入,不联网(dsh plugin --profile web add dsh-deja)。
adoresever/graph-memory★ 655
DeepSeek Harness 的可追溯、可检索跨会话记忆:把对话知识沉淀为带类型的图节点(任务/技能/事件)与关系边。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。