记忆回廊:在 DSH 中按分类归档会话原文

前言

DeepSeek Harness(DSH)会在对话占用上下文达到阈值时压缩旧对话,被压缩的原文会被丢弃,无法再查回。如果只是想保留关键片段,可以手动摘抄,但完整会话的上下文一旦被压缩就再也找不回来。

记忆回廊插件在 DSH 压缩之前,先把会话按轮次归档到当前工作区的 memory-palace/ 目录,按类别分成多个文件,供后续会话按需检索。它不会改写或截断原文,只负责把一轮轮对话落盘,成为工作区本地的一份长期记忆。

核心功能

把会话原文按「一轮对话」为单位,分类归档到当前工作区的 memory-palace/ 目录。目的是在 DSH 自动压缩之前,先把较早的完整原文落到磁盘,压缩后还能查回原话。

归档前会检查两个条件:
- 压力门:上下文占用 ≥ triggerPressure(默认 60%)× 窗口
- 批量门:可归档轮数 ≥ minBatchTurns(默认 10),或者可归档文本量 ≥ 无需归档量 × batchByteFraction(默认 50%)

只有两个条件都满足时,插件才会注入归档提示。

归档时,模型逐轮决定每轮属于哪个类别,用 segments 提交:[{category, fromTurn, toTurn}, …]。同一类别可以拆成多段,最后合并成一个文件;每个 turn 只能归一类,区间不许重叠。

归档后,插件会按年月组织文件,每个类别在当月的目录下生成一个文件(超 maxFileBytes 才分卷)。同一类别的所有轮次进同目录下的一个文件,不同类别 = 不同文件。

安装与启用

在 DSH 插件目录下执行:

dsh plugin add github:dafantong01/dsh-memory-palace

安装后,在会话页的「记忆回廊」页签里打开开关。页签会显示当前会话的归档状态和配置项,包括开关、记忆命名、触发阈值、检查频率、单文件上限等。

配置项

插件在全局和会话级都支持配置,会话配置优先级高于全局默认。

项 默认 说明
enabled true 全局总闸
triggerPressure 0.6 压力门:历史估算 ÷ 窗口
retainFraction 0.12 无需归档比例,占窗口比例(0.02–0.5,建议 < 16%)
batchByteFraction 0.5 批量门兜底:可归档量达到无需归档量的该比例即放行
minBatchTurns 10 批量门:可归档轮数
checkEveryTurns 5 每几轮检查一次
maxFileBytes 5000000 单文件上限(十进制 MB,5,000,000 = 5.0 MB),超出按轮分卷
selfNameSlug assistant 文件名前缀(与「记忆命名」无关)
rootDirName memory-palace 根目录名
includeReasoning true 归档是否收录思考原文
compactAfterArchive false 归档后是否触发压缩(默认关)
enableSteer true 是否注入归档提醒
injectNotice true 是否注入提示
recallStrength low 回忆强度:off / low / medium / high / forced
searchTurnLimit 12 palace_search 按轮聚合时默认返回多少轮(1–30 整数)

工具

插件提供了几个工具,用于归档、查看和检索记忆。

palace_archive

归档轮次。未命名会话会拒绝。用 segments 逐段给类别:[{category, fromTurn, toTurn}, …];并用 summaries=[{category, text}, …] 给每个类别写一段只概述该类别本次轮次的话(逐段追加到当月 _summary.md)。单类别时可用 summary 代替。可传 selfName 作文件名前缀。

palace_turns

列出轮次清单:turn 号 + 发言者 + 开头 70 字,用于归档前确认每轮内容。turn 是日志事件序号(含系统指令/插件 steer/纯工具轮),不要用「第几条消息」换算。

palace_summary

读月度摘要。不指定 month 时列出最近几个月(摘要末尾预览 + 归档文件数);month=YYYY-MM 返回该月摘要全文;category 只看该月某类段落;append + fromTurn/toTurn 可给还没归档的近况补写一段摘要。

检索归档。默认只查本会话;namespace 查别的会话、all:true 扫全部命名空间(结果标来源)、category 只查某类。keyword 支持空格分隔的多关键词(AND,引号包短语)。默认按轮聚合(每轮一条代表命中 + 该轮命中数),limitTurns 控制轮数(默认取 searchTurnLimit=12);groupByTurn=false 回原始命中行(旧 limit 语义)。片段约 220 字符,总输出上限 8K,文件读失败会跳过并注明。只搜归档正文,不搜 _summary.md(摘要里的概述性说法要用 palace_summary 读);但原文 0 命中时会自动回查摘要并标注「摘要不是轮次」,可用 includeSummary:true 强制追加。

palace_read

读归档。fromTurn/toTurn 返完整原文;path 可省略(按轮次自动找文件),也接受 search 的「文件夹/…」路径;可传 namespace。末尾附一行回链(提取 turn 引用/文件名/工具名,自动提取仅供参考)。

palace_config

查看/修改本会话配置(get 会同时返回 effective / 工作区默认 / 本会话配置)。

检索四步法

为节省 token,插件提供了四步检索法:

  1. 不知道在哪个月:palace_summary(limit=6) → 每月摘要末尾预览;找到大致年月
  2. 指定月份:palace_summary(month="2026-10") → 该月全部摘要段落(哪次归档、讲了什么)
  3. 搜索关键词:palace_search(keyword="事故教训", limit=3) → 约 1 千字符:命中位置 + 轮次 + 行号 + 文件路径
  4. 读取原文:palace_read(fromTurn=48, toTurn=48) → 该轮完整原文(思考、工具调用、返回都在)

单次读取默认上限 60,000 字符(约一本书的三分之一),硬上限也是 6 万。单轮超过 6 万字符时,返回前 6 万并提示 用 offset=N 继续,可分段读完整个大轮。

回忆强度

回忆强度有五档:

  • off 关:只归档,不读记忆;不注入任何回忆/摘要提示
  • low 低:默认行为,优先读摘要,模型觉得必要时才读原文;不递归
  • medium 中:走正常路线:年月 → 摘要 → 检索 → 原文;不递归
  • high 高:在中基础上允许模型主动递归检索,受 recallBudgetRounds/Keywords 预算约束(预算只是建议,插件不强制执行)
  • forced 强制:高 + 每条用户消息后都发一条检索指令;没有归档时插件返回「归档记忆为空」,模型必须如实回答,不得编造;检索后简短说明回忆到了什么

启动时不注入归档摘要,只在压缩后注入一次「去读哪份摘要」的指引(硬触发)。

目录结构

归档后的文件按会话隔离,存储在 <当前工作区>/memory-palace/ 目录下:

<当前工作区>/
  memory-palace/
    .namespaces.json       # 会话ID → 文件夹名 的映射
    config.json            # 新会话的默认值
    <文件夹>/              # 记忆名:英文(大小写均可)+数字/空格/下划线/连字符
      config.json          # 本会话自己的开关/参数/记忆名
      .state.json          # 本会话水位、已归档区间
      index.jsonl          # 本会话的归档索引
      <YYYY-MM>/           # 月份容器
        _summary.md        # 该月摘要:只追加,每段对应一次归档里的一个类别
        <category>/
          <前缀>-<category>-<YYYYMMDD-HHmmss>.md

文件夹名 = 页签里填的「记忆命名」,英文(大小写均可)、数字、空格、下划线、连字符,≤32 位;首尾不能有空格,中文与路径分隔符会被拒绝。没命名时用会话ID,且不产生任何记忆文件。

适用场景

适合需要在 DSH 中长期保存会话上下文、按类别检索的智能体开发场景。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

短结尾

记忆回廊把会话原文按轮次和类别归档到本地,在 DSH 压缩前保存完整上下文,支持按月份摘要、关键词检索、原文读取。如果你需要在 DSH 中长期保存和检索对话历史,这个插件可以作为工作区本地记忆的补充方案。

目录页:https://www.skillhub.cn/plugins/dafantong01/dsh-memory-palace
GitHub:https://github.com/dafantong01/dsh-memory-palace

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜