EPCN-fla/dsh-observational-memory ↗★ 0

dsh-observational-memory

通过后台观察者提炼长会话记忆与反思的压缩优化插件 适合超长对话任务,防止会话压缩导致关键决策和上下文丢失。

包名
dsh-observational-memory
兼容性
待验证
Harness 依赖范围
>=0.1.5-rc.2
Cordis 依赖范围
^4.0.1
版本
0.1.4
许可证
MIT
最近更新
2026年9月20日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:EPCN-fla/dsh-observational-memory

使用

设置卡片

打开 设置 → 插件 → 插件配置,最底部的 Observational Memory 卡片,点击展开后编辑,保存即时生效(无需重启)。卡片支持中/英双语,跟随 DSH 的语言设置。

  • 阈值区:「压缩阈值模式」决定只显示哪个阈值参数——calibrated 显示「主动压缩阈值」,ratio 显示「压缩阈值比例」;只有显示的参数有效,隐藏的参数无论设成多少都不生效。
  • 模型(可选)区:「提供商 → 模型 ID → 推理强度」三级下拉,选项来自 DSH 已添加的模型列表;前者未选择时后者的下拉框为空。全部留空则记忆 worker 跟随会话当前模型。
  • 每个字段可「重置为默认」;保存即时生效,校验不通过时保存按钮不可用并提示原因。

记忆选项卡

对话上方的视图环在「对话」「轨迹」右侧新增记忆选项卡,对应 pi 版的 /om:status 与 /om:view 命令,内容经插件注册的 Typert Remote 端点(observationalMemory/status|view|run|logs)由宿主实时生成:

  • 状态:记忆清单(已记录/已清理/活跃/可见 观察数与反思数、漂移统计)、各 worker 的进度条(距下次观察/反思/压缩的 token 进度,含 ratio 模式标注)、在途任务与最近的 worker 错误。
  • 记忆内容:/om:view 的内容,可在「当前可见」(最近一次压缩后代理实际可见的记忆)与「完整记录」(账本全量)之间切换;复制按钮把当前内容写入剪贴板。
  • 调试日志:debugLog 开启时显示该会话 NDJSON 调试事件的尾部(默认 200 行)。

工具栏的立即运行按钮手动触发一次完整整合(观察 → 反思 → 清理),绕过被动开关与 token 阈值(空积压仍然不产生模型调用);已有任务在途时不会重复触发。这是被动模式下保留的主动入口,主动模式下同样可用。

选项卡在打开时拉取一次,之后用「刷新」按钮更新;不会轮询。

recall 工具

代理可调用 recall(id)(12 位小写十六进制记忆 id)恢复某条观察/反思背后的原始会话证据(带时间戳的原文)。它是精确定位工具,不是搜索工具:模型在压缩后的记忆行里看到 id,需要确证时再调用。

回退按钮

每条用户消息(含 steering 消息)下方、「复制」左侧新增回退按钮:点击后在该消息之前的最近已完成轮次边界处分叉出一个新会话(fork),打开新会话,并把该消息的原文放回其输入框——可以修改后重新发送。整个过程非破坏性:原会话历史原样保留在自己的分支上。

新分支在首次触及记忆时继承原会话截至分叉点的记忆(观察、反思、清理记录与可见记忆),回退后无需从零积累;仅覆盖被放弃分支(分叉点之后事件)的记录不随分叉转移。父分支账本为空时会沿分叉链向上找到最近可用的账本,因此连续回退也能继承。被动模式不影响继承。

DSH 只能按轮次边界切分会话,因此按钮在以下情况保持禁用(悬停有提示):首轮消息(之前没有可回退的边界)、纯附件或含附件的消息(草稿无法还原附件)、无文本消息。卸载本插件后,用户消息渲染恢复原样。

配置

配置位于 DSH 用户设置文档的独立命名空间 observational-memory(默认 $DSH_HOME/settings.yaml),与 DSH 本体配置完全隔离。两种改法:

  1. 界面:见上文「设置卡片」。
  2. 手改文件:编辑 $DSH_HOME/settings.yaml 的 observational-memory: 段。

配置项

配置默认含义
observeAfterTokens10000观察器触发所需的增量源文本 token 数(估算)
reflectAfterTokens20000反思器触发所需的增量源文本 token 数
observerChunkMaxTokens推导单次观察器调用序列化的源文本上限;留空按记忆模型上下文窗口的 20% 推导(下限 256,未知窗口回落 60000)
compactAfterTokens0主动压缩阈值(会话空闲且上下文达到该值时触发);仅 calibrated 模式生效,0 关闭,交给 DSH 原生策略
compactAfterTokensModecalibrated阈值解释方式:calibrated 用固定值;ratio 按会话模型上下文窗口 × 比例推导。设置卡片只显示当前模式生效的那个参数,另一个无论设成多少都无效
compactAfterTokensRatio0.68仅 ratio 模式生效的窗口比例,取 (0, 1) 开区间;窗口或比例无效时触发器保持关闭(不回退到 compactAfterTokens)
observationsPoolMaxTokens20000压缩全量折叠的观察池预算
observationsPoolTargetTokens上限的一半清理器维护的活跃观察池目标
agentMaxTurns16后台 worker 单次运行的工具调用轮数上限
model会话模型记忆 worker 的模型覆盖:{ provider, id, reasoningEffort? };设置卡片中从 DSH 已添加的模型列表按 提供商 → 模型 → 推理强度 逐级下拉选择
modelFallbackAfterFailures0记忆 worker 连续失败这么多次后,挂起模型覆盖并回退到会话模型;0 表示永不回退。仅在配置了 model 覆盖时生效;override 路径成功、修改配置或会话重载后重新计数
showWorkerNotificationstrue在主机日志记录 worker 进度(警告与错误始终记录)
passivefalse被动模式:关闭全部主动后台触发(记忆选项卡的「立即运行」、手动/DSH 压缩与 recall 不受影响)
debugLogfalse在存储目录下写每个会话的 NDJSON 调试事件
storageDir$DSH_HOME/observational-memory账本存储根目录

配置存储格式

observational-memory 命名空间的用户层文档示例:

observational-memory:
  observeAfterTokens: 10000
  reflectAfterTokens: 20000
  compactAfterTokensMode: ratio
  compactAfterTokensRatio: 0.6
  model:
    provider: my-provider
    id: my-model
    reasoningEffort: high
  debugLog: false

部署方也可以通过插件的 cordis 行 config: 预置组合层配置(作为用户层的 base)。

配置项

配置默认含义
observeAfterTokens10000观察器触发所需的增量源文本 token 数(估算)
reflectAfterTokens20000反思器触发所需的增量源文本 token 数
observerChunkMaxTokens推导单次观察器调用序列化的源文本上限;留空按记忆模型上下文窗口的 20% 推导(下限 256,未知窗口回落 60000)
compactAfterTokens0主动压缩阈值(会话空闲且上下文达到该值时触发);仅 calibrated 模式生效,0 关闭,交给 DSH 原生策略
compactAfterTokensModecalibrated阈值解释方式:calibrated 用固定值;ratio 按会话模型上下文窗口 × 比例推导。设置卡片只显示当前模式生效的那个参数,另一个无论设成多少都无效
compactAfterTokensRatio0.68仅 ratio 模式生效的窗口比例,取 (0, 1) 开区间;窗口或比例无效时触发器保持关闭(不回退到 compactAfterTokens)
observationsPoolMaxTokens20000压缩全量折叠的观察池预算
observationsPoolTargetTokens上限的一半清理器维护的活跃观察池目标
agentMaxTurns16后台 worker 单次运行的工具调用轮数上限
model会话模型记忆 worker 的模型覆盖:{ provider, id, reasoningEffort? };设置卡片中从 DSH 已添加的模型列表按 提供商 → 模型 → 推理强度 逐级下拉选择
modelFallbackAfterFailures0记忆 worker 连续失败这么多次后,挂起模型覆盖并回退到会话模型;0 表示永不回退。仅在配置了 model 覆盖时生效;override 路径成功、修改配置或会话重载后重新计数
showWorkerNotificationstrue在主机日志记录 worker 进度(警告与错误始终记录)
passivefalse被动模式:关闭全部主动后台触发(记忆选项卡的「立即运行」、手动/DSH 压缩与 recall 不受影响)
debugLogfalse在存储目录下写每个会话的 NDJSON 调试事件
storageDir$DSH_HOME/observational-memory账本存储根目录

配置存储格式

observational-memory 命名空间的用户层文档示例:

observational-memory:
  observeAfterTokens: 10000
  reflectAfterTokens: 20000
  compactAfterTokensMode: ratio
  compactAfterTokensRatio: 0.6
  model:
    provider: my-provider
    id: my-model
    reasoningEffort: high
  debugLog: false

部署方也可以通过插件的 cordis 行 config: 预置组合层配置(作为用户层的 base)。