🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

判断记忆 Isyyyue/dsh-ai-memory

DeepSeek Harness
Isyyyue10 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 插件:可审计的长期判断记忆、确定性取代、未完成问题、用户确认的人格演化与知识图谱。…

32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Isyyyue/dsh-ai-memory
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · chat
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 20 条)
  • 读取本地文件
    src/index.js:277
    try { return !statSync(citation).isFile() } catch { return true }
  • 发起网络请求
    lib/client.js:1792
    fetch(includeRetired ? `${SNAPSHOT_PATH}?retired=1` : SNAPSHOT_PATH, { headers: { accept: 'application/json' } })
  • 发起网络请求
    lib/client.js:1892
    fetch(`${NODE_PATH}?id=${encodeURIComponent(selected)}`, { headers: { accept: 'application/json' } })
  • 写入本地文件
    src/store.js:152
    mkdirSync(dirname(lockPath), { recursive: true })
  • 写入本地文件
    src/store.js:161
    writeFileSync(tmpPath, owner)
  • 删除本地文件
    src/store.js:164
    try { unlinkSync(tmpPath) } catch { }
  • 读取本地文件
    src/store.js:192
    holder = JSON.parse(readFileSync(lockPath, 'utf8'))
  • 读取本地文件
    src/store.js:216
    age = now() - statSync(lockPath).mtimeMs
  • 删除本地文件
    src/store.js:237
    unlinkSync(lockPath)
  • 读取本地文件
    src/store.js:264
    const holder = JSON.parse(readFileSync(lockPath, 'utf8'))
  • 删除本地文件
    src/store.js:270
    unlinkSync(lockPath)
  • 读取本地文件
    src/store.js:350
    if (!existsSync(filePath)) return { events: [], problems: [], exists: false, mtimeMs: undefined }
  • 读取本地文件
    src/store.js:351
    const text = readFileSync(filePath, 'utf8')
  • 读取本地文件
    src/store.js:353
    return { events, problems, exists: true, mtimeMs: statSync(filePath).mtimeMs }
  • 写入本地文件
    src/store.js:371
    mkdirSync(dirname(filePath), { recursive: true })
  • 写入本地文件
    src/store.js:390
    appendFileSync(filePath, separator + serializeLedger(events), 'utf8')
  • 写入本地文件
    src/store.js:419
    mkdirSync(dirname(filePath), { recursive: true })
  • 写入本地文件
    src/store.js:426
    writeFileSync(tmp, content, 'utf8')
  • 删除本地文件
    src/store.js:433
    try { unlinkSync(tmp) } catch { }
  • 删除本地文件
    src/store.js:440
    try { unlinkSync(tmp) } catch { }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(121 字)↓

给 DSH 里的 AI 一层自己的判断记忆:判断节点 + 确定性取代(supersede)+ 双时态账本 + 双链,规则与人格分开治理,图谱作可解释性界面——为 AI 智能体提供持久判断记忆与自我演化人格(双时态账本、确定性取代、知识图谱)。

README

由 DeepSeek 最新模型翻译生成
dsh-ai-memory 这是一个运行在 DeepSeek Harness(DSH)中的插件,为 AI 提供可审计的长期判断记忆、未完成问题和用户确认的人格演化机制。它不是独立聊天应用,是否在无人输入时自动启动思考由 DSH 宿主调度。 判断关系图谱:节点颜色区分种类——蓝是判断,青是想法,橙是规矩;连线颜色区分关系——绿是互补,红是矛盾,黄是依据,带箭头的蓝线是取代(示意数据,非真实记忆) 一句话:它记录的不是聊天记录,而是 AI 自己形成的判断、没想完的问题、给自己定的规矩,以及这些内容如何随时间被推翻或保留。 目标不是让 AI 显得记得更多,而是让它能追溯自己为什么改主意,并为宿主提供在无人输入时继续思考所需的问题、注意力和周期记录机制。 这个插件记录的不是完整聊天记录,也不是一组由用户写死的角色设定。它记录 AI 在互动中形成的判断、规则、想法、记忆来源和人格特征。它把这些内容保存为一个可追溯的 JSONL 账本,再从账本中计算当前状态、演化历史和关系图谱。 插件的目标是让 AI 保持连续性和主体性:它可以记住自己曾经经历和相信什么,知道后来为什么改变,并在保持核心身份的同时提出表达方式和人格特征候选。候选只有在用户确认后才会成为稳定人格。 DSH 的会话日志仍然是会话事实的唯一来源。本插件是派生的长期记忆缓存,不会向会话日志追加事件。
展开完整文档(README 剩余 1 节)
dsh-ai-memory

这是一个运行在 DeepSeek Harness(DSH)中的插件,为 AI 提供可审计的长期判断记忆、未完成问题和用户确认的人格演化机制。它不是独立聊天应用,是否在无人输入时自动启动思考由 DSH 宿主调度。

判断关系图谱:节点颜色区分种类——蓝是判断,青是想法,橙是规矩;连线颜色区分关系——绿是互补,红是矛盾,黄是依据,带箭头的蓝线是取代(示意数据,非真实记忆)

一句话:它记录的不是聊天记录,而是 AI 自己形成的判断、没想完的问题、给自己定的规矩,以及这些内容如何随时间被推翻或保留。

目标不是让 AI 显得记得更多,而是让它能追溯自己为什么改主意,并为宿主提供在无人输入时继续思考所需的问题、注意力和周期记录机制。

这个插件记录的不是完整聊天记录,也不是一组由用户写死的角色设定。它记录 AI 在互动中形成的判断、规则、想法、记忆来源和人格特征。它把这些内容保存为一个可追溯的 JSONL 账本,再从账本中计算当前状态、演化历史和关系图谱。

插件的目标是让 AI 保持连续性和主体性:它可以记住自己曾经经历和相信什么,知道后来为什么改变,并在保持核心身份的同时提出表达方式和人格特征候选。候选只有在用户确认后才会成为稳定人格。

DSH 的会话日志仍然是会话事实的唯一来源。本插件是派生的长期记忆缓存,不会向会话日志追加事件。

它和「向量记忆」有什么不同

大多数 AI 记忆方案用向量相似度判断「这条新信息是不是在推翻旧的」。本插件完全不计算相似度、不调用 LLM,取代判定只认结构化的 (subject, relation, scope) 键——可测试、可复现、零延迟,而且不会悄悄判错。

为什么相似度在原理上做不到,见下一节的实测数据。

代价是:换一种说法写同一件事,它不会自动合并。这是刻意的取舍——宁可让 AI 自己用 memory_connect 显式连上,也不要它猜。

先说一个反直觉的结论:相似度分不出「矛盾」和「复述」

大多数 AI 记忆方案用向量相似度判断「这条新信息是不是在推翻旧的」。这条路在原理上走不通。

MemStrata(arXiv 2606.26511)在 98 个人工标注的配对上测量过:

| 指标 | 结果 |
| 余弦相似度区分「矛盾」与「复述」的 AUROC | 0.59(接近随机猜) |
| 矛盾配对的平均相似度 | 0.812 |
| 复述配对的平均相似度 | 0.800 |

矛盾不但不比复述更容易分开,它平均还比复述更像原事实。 原因很直接:把 8000 改成 8080 只动了两个字符,是极小的编辑;而真正的同义改写往往要动更多字。

所以这个插件完全不计算相似度、不调用 LLM 做判定。取代关系只建立在明确的结构化键上:

(服务, 端口, 8000) → (服务, 端口, 8080)
同一 (subject, relation) 键,object 不同 → 新的取代旧的

好处是可测试、可复现、零依赖、零延迟——而且它不会悄悄判错。细节见下方 确定性取代。

它解决什么问题

DSH 默认主要记住当前会话里的内容。跨会话之后,AI 很难继续使用自己以前形成的判断,也无法区分“我现在这样想”和“我以前曾经这样想过”。

这个插件围绕两个核心工作:

1. AI 自己的记忆

记忆不是用户替 AI 维护的一张资料表,而是 AI 在长期互动中逐渐形成的内部账本。它可以保存:

- 判断:AI 对项目、问题或世界形成的观点;
- 规则:AI 给自己设定的约束,例如写判断前必须先检索;
- 想法:还没有成熟到可以当作判断的观察、疑问和灵感;
- 人格特征:从互动中逐渐形成的表达习惯和角色倾向。

这些信息都会保留来源和变化历史,而不是只留下最后一个结果。

2. 从记忆中演化人格

人格不是一开始就完整写好的提示词。AI 可以从自己的记忆、判断、被纠正的经历和长期互动中提出“我是什么样的 AI”的候选理解。核心身份可以保持连续,表达习惯、词汇偏好、情绪反应和思考方式则可以随着经历变化,但稳定人格仍需要用户确认。

人格如何成长

人格演化采用“候选—反馈—确认”的流程:

观察到一种倾向 ↓ 提出人格候选(candidate) ↓ 用户确认 / 拒绝 ↓ 成为稳定特征,或被记录为已拒绝 ↓ 随着新反馈继续修订

例如,AI 可以先提出:

“我似乎可以自然地使用某些拟声词。”

在用户确认之前,这只是候选,不会直接改变稳定人格。确认之后,它才会被注入后续会话;如果以后发现表达太机械,也可以带着理由修订。这样 AI 仍然保持用户设定的身份,但能逐渐形成更丰富、更自然的词汇和语气,而不是永远机械地重复一个口头禅。确认机制是当前的安全边界,不代表人格只能由用户替它定义;真正的方向是让 AI 从自己的记忆和经历中提出越来越成熟的自我理解。

已确认的人格会作为后续交流和新记忆写作的表达参考,不要求每条记忆使用固定前缀或重复口头禅。表达可以有自己的风格,判断的依据和不确定性仍应保留;已有历史不会因为人格变化被批量改写。

反思会同时提供记忆、已确认人格和待验证候选,帮助 AI 根据已有经历探索适合自身身份的新表达。与已有特征发生冲突时,需要说明依据、等待反馈,而不是直接覆盖身份。

所有提出、确认、拒绝和修订都会写入账本,因此可以回答:

- 这个人格特征是什么时候出现的?
- 它是根据什么观察形成的?
- 为什么被确认或拒绝?
- 它后来是怎样变化的?

十一个工具

| 工具 | 用途 |
| memory_search | 检索已有记忆。写新判断前应先调用它。 |
| memory_write | 写入判断,并在三元组冲突时确定性取代旧判断。 |
| memory_connect | 在两条记忆之间建立双向关系。 |
| memory_history | 查看判断的修订和取代历史。 |
| memory_rule | 读取、修改或回滚 AI 给自己的规则。 |
| memory_persona | 提出、确认、拒绝和修订人格特征。 |
| memory_reflect | 汇总近期记忆和人格,准备一次自我反思。 |
| memory_question | 管理未闭合问题,记录注意力压力的来源。 |
| memory_cycle | 开始、结束和读取一次思考周期。 |
| memory_self | 从账本计算脆弱判断、盲区和 self 存活率。 |
| memory_stats | 检查记忆数量、孤立项和账本问题。 |

确定性取代

新判断和旧判断共享同一个 (subject, relation, scope)、但 object 不同时,插件会把它们视为同一问题的新答案:

(服务, 端口, dev, 8000) ↓ 被同一 scope 的新判断取代 (服务, 端口, dev, 8080)

旧判断会被标记为 superseded,但不会删除。新判断、取代事件和关系边都会保留在账本中,因此既能回答“现在是什么”,也能回答“以前是什么、为什么变了”。

为什么不用相似度:见文首那一节——相似度在原理上分不出矛盾与复述。取代判定只认结构化键,不认文本像不像。

数据模型

账本默认位于:

~/.dsh/ai-memory/ledger.jsonl

它是只追加的 JSONL 文件,包含以下事件:

- node.created:建立判断、规则或想法;
- node.revised:修订文字;
- node.superseded:判断被新判断取代;
- node.withdrawn:主动撤回判断;
- edge.linked / edge.unlinked:建立或解除关系;
- rule.amended:修改规则;
- persona.proposed:提出人格候选;
- persona.accepted / persona.rejected:确认或拒绝候选;
- persona.revised:修订已确认的人格特征;
- question.opened / question.touched / question.closed / question.abandoned:管理未完成问题;
- cycle.started / cycle.ended:记录思考周期,包括 produced: 0。

当前状态、检索结果、关系图谱和统计信息都由账本重新折叠得到。删除派生数据不会丢失历史。

memory_reflect 是 AI 进行自我反思的入口。它会提供近期的自身记忆和当前人格,提示 AI 寻找稳定但尚未记录的倾向;如果发现候选,AI 可以通过 memory_persona propose 提出,并用 source_ids 指向形成该判断的具体记忆。

安装

在 DSH 环境中执行:

plugin_manager action=install_bundle target=<本目录的绝对路径>

不要手动修改 profile 中的 package.json 或 cordis.patch.yml。安装完成后重启一次 DSH,让客户端图谱面板完成启动扫描;然后刷新页面,侧边栏会出现“判断图谱”。

停用或移除插件:

plugin_manager action=set_bundle target=dsh-ai-memory enabled=false
plugin_manager action=remove_bundle target=dsh-ai-memory

这两个操作都不会删除记忆账本。

配置

默认情况下无需配置。需要自定义时,可以在 profile 的 cordis.patch.yml 中覆盖插件配置:

- id: dsh-ai-memory
name: dsh-ai-memory
config:
dir: 'D:\my-memory'
injectIndex: true
maxIndexEntries: 40
maxGraphNodes: 500
enabled: true

| 配置项 | 默认值 | 说明 |
| dir | ~/.dsh/ai-memory | 账本目录 |
| injectIndex | true | 是否在会话开始注入记忆索引 |
| maxIndexEntries | 40 | 注入的判断数量上限 |
| maxGraphNodes | 500 | 图谱快照节点上限 |
| enabled | true | 是否注册插件 |

注入内容是摘要,不是整本账本。已确认的人格会单独列出;待确认的人格候选不会进入普通会话注入,只在 memory_persona read 和 memory_reflect 中出现,避免一次偶然观察被反复强化。

首次使用、尚未写入任何记忆时,也会注入简短的写入规则,帮助 AI 开始积累。提醒不会自动保存对话;是否形成有效判断仍由调用方决定。

开发与验证

项目要求 Node.js 22 或更高版本,并且运行时不依赖外部 npm 包(node_modules 不存在是刻意的)。

测试目录怎么分

test/
├── e2e.mjs 端到端:账本生命周期 ├── unit/ 单元测试 —— npm test 跑的就是这里 ├── checks/ 清单、语法、硬约束、客户端服务状态 ├── manual/ 手动验证 —— CI 也跑,每个都防一类「正常测试看不见」的故障 ├── tools/ 一次性诊断 —— 回答「为什么这条线是绿的」这类问题 └── browser/ 本地浏览器脚手架(已 gitignore,不可移植)

分成四类而不是全塞在 test/ 根目录,是因为「该在 CI 里跑」和「只在排查时跑」是两回事。混在一起会让人分不清哪个可以删。

常用命令

npm test # 单元测试(test/unit)
npm run test:e2e # 端到端
npm run test:manifest # 清单与硬约束
npm run test:verify # 四项手动验证:物理、并发、护栏、路由
npm run test:all # 以上全部

单独跑某一项:

node test/manual/verify-physics.mjs # 图谱力公式 vs Obsidian 实测值
node test/manual/verify-concurrency.mjs # 多进程写同一账本
node test/manual/verify-guardrails.mjs # 尝试越界,验证三条护栏
node test/manual/verify-inject-routes.mjs # 注入分段与回环/同源校验
node test/checks/inline-worker.mjs # 改过 worker 就必须跑

单元测试必须用显式 glob(test/unit/*/.test.js),不要用 Node 的默认发现方式,否则 checks/ 里的辅助服务会被当成测试进程启动。

排查工具

node test/tools/edge-colors.mjs # 每条边会被画成什么颜色
node test/tools/why-no-edges.mjs # 「是没有关系,还是有 bug」
node test/tools/kinds.mjs # 按 kind 上色是否真的生效
node test/tools/check-injection.mjs # 注入里三种 kind 是否都在

已有本地 DSH 运行时

node test/checks/host-runtime.mjs <DSH源码根目录>

复用本地 DSH 服务验证真实工具注册、调用、提示组装与 HTTP 路由;不安装依赖、不调用模型、不修改正式 profile 或记忆账本。

node test/checks/bundle-served.mjs 检查 desktop profile 实际安装的客户端是否被服务;可用 DSH_PROFILE_DIR 或 DSH_PLUGIN_ROOT 指定其他安装位置。

已知边界

- 当前每次操作都会重新扫描账本,数据量达到数万条后需要增加索引;
- 账本写入由本地可恢复锁和 atomically() 串行化;外部直接手工编辑仍应避免与写入同时发生;
- 人格候选由调用方提出,插件负责保存、确认和演化,不负责从自然语言中自动抽取全部特征;
- 图谱是导航和解释界面,节点只显示摘要,完整内容需要通过检索获取;
- 没有 DSH 浏览器环境时,只能验证代码和数据层,不能完成客户端视觉验证。

语境 scope

memory_write 可以带可选的 scope,例如 dev 或 prod。同一 subject/relation 在不同 scope 下是不同断言,可以并存;省略 scope 仍表示旧账本使用的全局语境。

memory_history 的 at 参数接受 Unix 毫秒时间戳,用来查看某一时刻这条判断的版本和取代链。

许可

MIT,详见 LICENSE。

相关文档

| 文档 | 内容 |
| CHANGELOG.md | 每个版本改了什么,以及为什么 |
| CONTRIBUTING.md | 开发流程,以及六条不能破的硬规则(每条都对应一次真实事故) |
| SECURITY.md | 怎么报告安全问题;为什么不要附真实账本 |
| CODE_OF_CONDUCT.md | 讨论规范 |
| UPGRADE-SPEC.md | 内部升级规格:已完成什么、还剩什么、哪些约束容易被无意打破 |

这个项目在意什么

三条判断,决定了上面所有的技术选择:

1. 静默失效比功能缺失更危险。 报错会被人修;不报错但结果错的东西会一直错下去。所以账本里的 problems 会被注入到提示词里,未知的 kind 会留下记录,锁的竞态有专门的测试。
2. 能测量的就不该靠感觉。 图谱"不丝滑"最后定位到排斥力是 1/d² 而不是 1/d——这需要反汇编 Obsidian 的 WASM 才能确认,但确认之后改动只有一行。
3. 不假装。 账本存判断,不存体验。会话会断,记忆只留判断。所以文档里不写"它记得你",只写它记下了什么、能查出什么。
预览分享卡片长什么样 ↓Isyyyue/dsh-ai-memory
分享 · DeepSeek Harness Hub
Isyyyue/dsh-ai-memory

DeepSeek Harness 插件:可审计的长期判断记忆、确定性取代、未完成问题、用户确认的人格演化与知识图谱。…

这是你的仓库?认领条目

回到顶部