dsh 记忆体(Memory Body · Layered Memory Architecture)—— 多体挂载 + 自动总结 + FTS 检索 #2468
szx-a
started this conversation in
Show Your Plugins!
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
dsh 记忆体(Memory Body)体验版
这是 Memory Body 提案 的可运行实现,核心闭环已跑通,发出来求反馈。
一句话:给 agent 一个跨会话、可挂载、可检索的长期记忆。
核心能力
/mount/unmount决定当前会话能检索哪些体user(用户钦定文档)/model(模型总结的经验)/summarize提炼会话经验;/forget只标记失效、历史可追溯和已有记忆插件的不同(我们的取舍)
1. 挂载,而不是全量注入
很多记忆方案是把所有记忆一股脑塞进上下文。这里相反:记忆体永远持久在磁盘,只有「挂载」的体才对当前会话可见。模型只加载挂载体的
id + 描述,需要时才检索。2. 双权威,而不是混在一起
严格区分两类记忆:
user—— 用户钦定的文档,模型只读引用、不擅自改写model—— 模型自动总结的经验,可编辑、可被新经验推翻3. 降权不删除,而不是覆盖
推翻旧记忆不是物理删除,而是追加
superseded标记,保留出处链(哪条被哪条推翻)。4. GUI + 纯文本双编辑,而不是黑盒
既有图形界面(设置页 tab),存储又是可读的 JSONL 纯文本,人能直接打开改。
5. 事件溯源,索引可重建
JSONL 是唯一权威,SQLite FTS 只是可丢弃的读模型,每次检索前从 JSONL 重建。
开发中踩过的坑
pending (waiting for service: remote.memoryBody)$mount出来的服务」写进inject,apply 前死等inject只写外部依赖,$mount后用ctx.get()读 ,这个错误的本质是插件把“由自己挂载出来的服务”错误地声明成了“启动前必须由别人提供的依赖”:memory-body 插件本身在 apply() 中通过 ctx.remote.$mount(memoryBodyRemote) 才会创建 remote.memoryBody,但如果同时把它写进 inject,Cordis 就会在插件执行 apply() 之前一直等待 remote.memoryBody 出现,而该服务又只能等插件启动后才会出现,于是形成循环等待,插件最终停留在 pending (waiting for service: remote.memoryBody)。正确做法是 inject 只保留 slots 和 remote,先执行 $mount,再用 ctx.get('remote.memoryBody') 读取刚挂载出来的服务。SQLitewarning 判断服务是否真加载waiting for memoryStoreMODULE_NOT_FOUND把 memory-store row 带崩版本状态
0.1.0-rc.50.1.0-rc.6git pull同步 rc.6 → 重新构建 → 改peerDependencies已知限制(诚实)
源码
https://github.com/szx-a/ds
请教与讨论
完整文档
安装步骤、目录结构、完整用法与设计细节,具体见仓库 README:
https://github.com/szx-a/ds#readme
All reactions