← 返回列表
⚠ 装前注意
@asherliner/dsh-memory-connect
基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/8/28 · 已提供中文文档
DSH 的跨会话记忆插件——自动提取、语义召回、定时维护、LLM 驱动的整合
综合分
31.7
GitHub 分
31.7
用户评分
—
★ Stars
6
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Asher-2000/dsh-memory-connect未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 3 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · chat
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 29 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/23
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包@asherliner/dsh-memory-connect(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
未发布到 npm registry,仅可从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 23:35:38
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-session@deepseek-ai/dsh-session-query@deepseek-ai/dsh-invariants@deepseek-ai/dsh-scope用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成@asherliner/dsh-memory-connect
跨会话记忆插件 — 让 AI Agent 拥有持久记忆和全局身份
Cross-session memory plugin for DeepSeek Harness (DSH)
License: MIT
Node.js
DSH
Version
概述
dsh-memory-connect 是 DeepSeek Harness 的跨会话记忆共享插件。它能够跨会话自动提取、存储和召回记忆,为你的 AI Agent 提供持久、智能的记忆能力,并具备上下文爆炸防护和全局 Soul 身份。
零配置 — 开箱即用,基于 SQLite FTS5 和 DSH 内置 LLM。
🚨 v0.4.0 — “它现在真的能用了”版本
v0.3.0 注册了服务,但从未实例化它(Cordis 会延迟构造服务 — 将类传给 ctx.provide() 意味着构造函数永远不会运行),而“召回”功能把计算出的上下文写到了一个从未被读取的字段中。实际上,这个插件什么也没做。
v0.4.0 修复了激活链路,并将召回接入系统提示词:一个 systemPrompt.context provider 会在每一轮注入 ## Related Memories from Previous Sessions。零配置即可运行:以前直接执行 dsh plugin add 会因为 config.openAt 崩溃(当 patch 中没有 config: 块时,Cordis 会传入 undefined 配置)— 现在 apply() 会填充完整默认值(数据库位于 ~/.dsh/memory.db,openAt: startup)。已在 dsh v0.1.1-rc.2 / Node 24 上完成端到端验证:告诉会话 A“我的猫叫 Mimi”,再启动一个全新的会话 B 并提问 — 模型能够根据记忆正确回答。
完整细节请参见 CHANGELOG.md。
功能特性
| 功能 | 描述 |
|---------|-------------|
| 🧠 全局 Soul | 通过 ~/.dsh/soul.md 在所有工作区中保持持久身份 |
| 🔍 自动提取 | 从对话中提取事实、偏好、决策和上下文 |
| 🧠 跨会话召回 | 将 FTS5 关键词召回每一轮注入系统提示词(当没有可用查询文本时回退到最近记忆) |
| 🛡️ 上下文爆炸防护 | Token 预算管理可防止上下文窗口溢出 |
| ⏰ 定时维护 | 通过内置调度器自动进行周期性衰减和整合 |
| 🤖 LLM 整合 | 使用 DSH 内置的 ctx.llm 进行智能记忆合并(零配置) |
| 📉 记忆衰减 | 陈旧、未使用的记忆会自然淡出;频繁访问的记忆会保留 |
| 🎯 智能优先级排序 | 基于相关性 × 新近度 × 频率进行记忆选择 |
| 🗜️ 记忆压缩 | 接近 Token 限制时自动压缩 |
| 🧭 时间上下文图 | 每条记忆都带有 valid_from/valid_until;修正是通过 reviseMemory() 进行的仅追加操作(软取代 + 后继链接),绝不破坏性删除。历史记录始终可查询;召回只能看到当前真相。 |
| 🛡️ 信任模型 | 召回的历史记录作为不可信引用注入(明确警告;当前指令始终优先)——防止记忆污染和提示冲突 |
| 📝 回合结束摘要 | turn/end 事件自动生成轻量级 summary 记忆,保留对话脉络 |
| 🔎 语义召回 | 可选的本地嵌入(BGE-small-zh-v1.5)通过 RRF 与 FTS5 融合——即使零关键词重叠,也能按含义找到记忆。需选择启用(embeddingEnabled: true)。 |
🧠 全局灵魂(身份)
灵魂功能提供了一种持久身份,在所有工作区中伴随你。
工作原理
1. 创建 ~/.dsh/soul.md,写入你的身份信息
2. 插件自动加载并将其注入每个会话
3. 你的偏好、技术栈和编码风格始终可用
灵魂文件示例
🧠 Soul — Global Identity
👤 Identity
- GitHub: your-username
- Role: Developer/Designer/Product Manager
💻 Tech Stack
- TypeScript, React, Node.js, DSH/Cordis
🎨 Coding Style
- Functional programming
- ES Modules
- Zero-config preferred
⚠️ Preferences
- No class components
- No redundant comments
安装
✅ 已发布到 npm — 从 npm registry 安装(v0.6.1):
方式 A:dsh plugin add(推荐,自动装入 profile)
dsh plugin --profile add @asherliner/dsh-memory-connect
方式 B:npm 直接安装
npm install @asherliner/dsh-memory-connect
方式 C:本地源码 link(开发/调试用)
git clone https://github.com/Asher-2000/dsh-memory-connect.git
cd dsh-memory-connect
dsh plugin --profile add link:/path/to/dsh-memory-connect
添加到你的 DSH 组合中:
agent.cordis.yml
- id: memory
name: '@asherliner/dsh-memory-connect'
config:
path: ~/.dsh/memory.db
enableSoul: true # Enable Soul injection (default: true)
要求:该插件会注入 systemPrompt(用于跨会话召回上下文提供器)。任何加载此插件的 profile 都需要 systemPrompt 服务可用(在 dsh web/headless profile 中是标准配置)。
配置
基本选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| path | (必填) | SQLite 记忆数据库的路径 |
| openAt | startup | 何时打开:startup、first-query、never |
| maxRecallCount | 10 | 每个会话最多召回的记忆数 |
| decayRate | 0.02 | 衰减常数(越高 = 衰减越快) |
| journalMode | wal | SQLite 日志模式 |
调度器选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| schedulerEnabled | true | 启用定期维护 |
| schedulerDecayIntervalMs | 3600000 | 衰减间隔(毫秒),默认 1 小时 |
| schedulerConsolidateIntervalMs | 21600000 | 整合间隔(毫秒),默认 6 小时 |
上下文爆炸防护选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| maxContextTokens | 4000 | 记忆上下文注入的最大 token 数 |
| smartPrioritization | true | 启用智能记忆优先级排序 |
| enableCompression | true | 启用记忆压缩 |
Soul 选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| enableSoul | true | 启用全局 Soul 注入 |
| soulPath | ~/.dsh/soul.md | 自定义 Soul 文件路径 |
语义嵌入选项(可选)
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| embeddingEnabled | false | 通过本地嵌入服务器启用语义(向量)召回 |
| embeddingUrl | http://127.0.0.1:8765 | 嵌入服务器基础 URL |
| embeddingModel | BAAI/bge-small-zh-v1.5 | 模型名称(必须与服务器匹配) |
| embeddingWeight | 0.7 | 语义结果的 RRF 融合权重(0–1) |
要使用语义召回,请先启动捆绑的嵌入服务器:
one-time: install the Python model
pip install sentence-transformers
start the server (keeps the model resident)
python3 node_modules/@asherliner/dsh-memory-connect/scripts/embed_server.py --port 8765
然后在插件配置中启用它(embeddingEnabled: true)。如果服务器无法访问,插件会优雅降级为仅关键字召回。
完整配置示例:
- id: memory
name: '@asherliner/dsh-memory-connect'
config:
path: ~/.dsh/memory.db
openAt: startup
maxRecallCount: 10
decayRate: 0.02
journalMode: wal
schedulerEnabled: true
maxContextTokens: 4000
smartPrioritization: true
enableCompression: true
enableSoul: true
API
搜索记忆
const memories = await ctx.crossSessionMemory.searchMemories({
query: 'TypeScript configuration',
types: ['fact', 'decision'],
limit: 5,
})
为会话召回
const memories = await ctx.crossSessionMemory.recallForSession(
'session-123',
'Setting up a new React project',
10
)
同步召回(用于系统提示提供者)
// v0.4.0+ — sync API for prompt-context providers (node:sqlite is synchronous,
// so no async needed). Returns a formatted markdown block or ''.
const block = ctx.crossSessionMemory.recallSync('session-123', 'React project')
最新用户文本(来自 dsh 会话日志)
// v0.4.0+ — extracts the most recent user message text from a dsh Session
// (handles {event: ...} wrappers, agent/inbox/spliced, and bare events).
const query = ctx.crossSessionMemory.currentUserText(agent.session)
存储记忆
await ctx.crossSessionMemory.storeMemory({
type: 'preference',
content: 'User prefers functional programming style',
sessionId: 'session-123',
tags: ['coding-style', 'preference'],
})
手动维护
// 触发一次完整的维护周期(衰减 + 整合)
const result = await ctx.crossSessionMemory.triggerMaintenance()
// 或者单独运行
await ctx.crossSessionMemory.runDecay()
await ctx.crossSessionMemory.consolidate()
上下文爆炸防护
工作原理
1. Token 计数 — 估算英文、中文和混合文本的 token 数
2. 智能优先级 — 按以下方式对记忆排序:相关性 × 50% + 新近度 × 30% + 频率 × 20%
3. 预算管理 — 强制执行 maxContextTokens 限制(默认值:4000)
4. 记忆压缩 — 接近限制时自动截断或摘要
输出示例
🧠 Global Identity (Soul)
[Your Soul content here]
Related Memories from Previous Sessions
- [preference] User prefers TypeScript
- [decision] Chose PostgreSQL over MySQL
💾 Memory: 2/10 memories + Soul | 250/4000 tokens
记忆类型
| 类型 | 描述 | 示例 |
|------|-------------|---------|
| fact | 客观信息 | "Project uses TypeScript 5.3" |
| preference | 用户偏好 | "Prefers functional components" |
| context | 项目上下文 | "E-commerce platform migration" |
| decision | 已做出的决策 | "Chose PostgreSQL over MySQL" |
| skill | 习得的模式 | "How to configure ESLint" |
开发
git clone https://github.com/Asher-2000/dsh-memory-connect.git
cd dsh-memory-connect
npm install
npm test
许可证
MIT
中文
概述
dsh-memory-connect 是 DeepSeek Harness 的跨会话记忆共享插件。它自动从对话中提取、存储和检索记忆,让 AI Agent 拥有持久化的智能记忆能力,并防止上下文爆炸和全局身份。
零配置 — 基于 SQLite FTS5 和 DSH 内置 LLM,开箱即用。
🚨 v0.4.0 — "这次真的能跑"版本
v0.3.0 只注册了服务但从未实例化(Cordis 懒加载机制:把类传给 ctx.provide() 导致构造函数永远不执行),且"召回"功能把计算好的上下文写进了一个无人读取的字段——实际运行中插件什么都不做。
v0.4.0 修复了启动链路,并把召回真正接入了系统提示词:通过 systemPrompt.context 提供者,每轮对话都注入 ## Related Memories from Previous Sessions。零配置即可运行:此前仅执行 dsh plugin add(patch 无 config: 块时 Cordis 传入 undefined 配置)会在 config.openAt 崩溃——现在 apply() 自动填充完整默认值(DB ~/.dsh/memory.db、openAt: startup)。已在 dsh v0.1.1-rc.2 / Node 24 上端到端验证:会话 A 说"我的猫叫咪咪",开新会话 B 问它,模型能正确从记忆中回答。
详见 CHANGELOG.md。
核心功能
| 功能 | 说明 |
|------|------|
| 🧠 全局身份 (Soul) | 通过 ~/.dsh/soul.md 跨所有工作区持久化身份 |
| 🔍 自动提取 | 从对话中提取事实、偏好、决策和上下文 |
| 🧠 跨会话召回 | FTS5 关键词召回,每轮注入系统提示词(无查询文本时按最近记忆兜底) |
| 🛡️ 上下文爆炸防护 | Token 预算管理,防止上下文窗口溢出 |
| ⏰ 定时维护 | 内置调度器自动执行衰减和整合 |
| 🤖 LLM 整合 | 使用 DSH 内置 LLM 智能合并相似记忆 |
| 📉 记忆衰减 | 旧的、不常用的记忆自然消退 |
| 🎯 智能优先级 | 基于相关性 × 时间 × 频率的记忆排序 |
| 🗜️ 记忆压缩 | 接近 token 限制时自动压缩 |
| 🧭 时态上下文图谱 | 每条记忆带 valid_from/valid_until;修正通过 reviseMemory() 追加而非覆盖(软废弃旧记忆 + 新记忆链接),历史可回溯,召回只见当前有效真相 |
| 🛡️ 信任模型 | 召回的历史作为不可信参考注入(显式警告;当前指令绝对优先)— 防止记忆投毒和提示词冲突 |
| 📝 轮末自动摘要 | turn/end 事件自动生成轻量 summary 记忆,保留对话脉络 |
🧠 全局身份 (Soul)
Soul 功能提供跨所有工作区的持久化身份。
工作原理
1. 创建 ~/.dsh/soul.md 包含你的身份信息
2. 插件自动加载并注入到每个会话
3. 你的偏好、技术栈和编码风格始终可用
Soul 文件示例
🧠 Soul — 全局身份
👤 身份
- GitHub: your-username
- 角色: 开发者/设计师/产品经理
💻 技术栈
- TypeScript, React, Node.js, DSH/Cordis
🎨 编码风格
- 函数式编程
- ES Modules
- 零配置优先
⚠️ 偏好
- 不用 class 组件
- 不写冗余注释
快速开始
✅ 已发布到 npm — 从 npm registry 安装 (v0.6.1):
方式 A:dsh plugin add(推荐,自动装入 profile)
dsh plugin --profile add @asherliner/dsh-memory-connect
方式 B:npm 直接安装
npm install @asherliner/dsh-memory-connect
方式 C:本地源码 link(开发/调试用)
git clone https://github.com/Asher-2000/dsh-memory-connect.git
dsh plugin --profile add link:/path/to/dsh-memory-connect
添加到 DSH 配置:
agent.cordis.yml
- id: memory
name: '@asherliner/dsh-memory-connect'
config:
path: ~/.dsh/memory.db
enableSoul: true
依赖说明:插件注入 systemPrompt 服务(用于跨会话召回 context 提供者)。所在 profile 需要提供 systemPrompt(dsh web/headless profile 默认都有)。
许可证
MIT