dsh-limit-break:跨会话记忆与抗封锁网络抓取

前言

在 DeepSeek Harness(DSH)里跑智能体,常见两类摩擦:会话一结束,上一轮确认过的事实就归零;网络侧则经常出现「这个主机不可达」,而同一出口 IP 上换个别名或协议又能通。社区插件按「一切皆插件」挂载到 profile,目录由独立站点维护,与 DeepSeek / 幻方无官方从属关系。下面介绍维护者 Ma354 的 dsh-limit-break(分类:记忆):用本地 JSON 事实库做跨会话记忆,并用四级抓取阶梯应对按 TLS 主机名区分的封锁。

这是什么

dsh-limit-break 面向 DeepSeek Harness,提供四个无 npm 依赖的小工具,设计为无 import 时副作用、失败时返回错误对象而非抛异常,避免拖垮宿主。包版本 1.5.0,许可证 MIT,运行时要求 Node >= 22.6;resilient_fetch 的阶梯第 2–4 级依赖系统 curl 在 PATH 上。

工具 作用
memory_recall 对 JSON 事实库做排序检索;省略 query 可列出全部
memory_save 写入或覆盖一条事实
resilient_fetch 按四级阶梯抓取,并报告是哪一级成功
memory_stats 查看存储位置、条数、体积

目录页:skillhub.cn/plugins/Ma354/dsh-limit-break。源码与说明:github.com/Ma354/dsh-limit-break。

跨会话记忆

事实库路径为 $DSH_HOME/memory/facts.json,纯 JSON,任意能读文件的程序都可共用。写入采用临时文件再 rename,结构如下:

{ "schema_version": 1,
  "facts": [ { "id": "", "topic": "", "statement": "", "value": "", "unit": "",
               "details": "", "source": "", "timestamp": "", "tags": [] } ] }

memory_save 接受字段:{ id, statement, value?, unit?, details?, tags?, source? }。README 记载:两个全新智能体、零上下文、同一组五个问题时,有库 5/5 答对,无库则五次均回答「没有这些信息」且未胡编。

memory_recall 不做向量嵌入,仅在 id / topic / tags / statement / details 上做停用词过滤、粗词干与 IDF 加权的关键词重叠排序;1.5.0 在仓库自带 20 题基准上 hit@1 从 0.75 提到 0.95,MRR 从 0.867 提到 0.975(同 20 条事实)。与事实无共同词义的改述仍可能检索不到。可用 tools/recall-bench.mjs 对当前库复现指标。

resilient_fetch:四级阶梯

动机来自实测:同一网络、同一边缘 IP,相隔约 75 秒,api.wikimedia.org 可 200,而 en.wikipedia.org 连接被重置,封锁与 TLS 主机名相关而非单纯地址。阶梯顺序为:

  1. 普通 fetch
  2. IPv6(curl)
  3. IPv4(curl)
  4. 同服务「兄弟」主机名且证书仍可校验(示例:*/wiki/Title → api.wikimedia.org 对应 API)

不会关闭证书校验,不会经可冒充源站的代理;README 明确这不属于可接受的变通。无 curl 时阶梯退化为第 1 级,并在报告中说明。单次响应最多读 2 MiB,返回正文最多 20 000 字符,更大内容会截断。

隐私方面:记忆工具只读写本机文件;resilient_fetch 仅发起你请求的 URL,数据不出本机。

安装与启用

CLI 安装(命令来自 README 原文):

dsh plugin --profile <profile> add dsh-limit-break

安装后重启该 profile。桌面端可在 Settings → Plugins 安装,由应用内插件管理器接管 desktop profile。

包声明 dsh.bundle 并自带 cordis.patch.yml,dsh plugin add 会自动挂载。若手工编辑,在 profiles/<profile>/cordis.patch.yml 增加:

- insert:
    - id: limit-break
      name: dsh-limit-break

仅 insert 而未把包列入 profile 依赖时,条目会被静默忽略。

停用与卸载:

  • 热停用:在 cordis.patch.yml 对应项设 disabled: true,Cordis 约一秒内重组。
  • 冷移除:dsh plugin remove dsh-limit-break 后重启。
  • 上述操作不会删除 $DSH_HOME/memory/ 下的事实库。

典型用法(概念)

  1. 会话开始或需要上下文时,调用 memory_recall,传入自然语言 query 拉取相关事实;需要全量清单时省略 query。
  2. 确认或学到稳定信息时,用 memory_save 以 id 为主键写入或覆盖。
  3. 外网 URL 在默认 fetch 失败时,用 resilient_fetch 并查看返回里「哪一级成功」。
  4. 排查存储时用 memory_stats 确认路径与规模。

具体参数以挂载后工具 schema 为准;事实字段与存储路径以 README 为准。

适用场景与注意

适合:需要在多轮、多会话间保留可编辑、可审计的本地事实;在主机名级网络异常下仍要拉取公开 HTTP(S) 内容,且接受关键词检索而非语义向量。

务必知晓:

  • 插件以当前 dsh 进程权限运行,安装前请自行审阅 源码 与 MIT 许可证。
  • 工具列表在会话创建时固化;插件挂载前已开的会话看不到新工具,需新开会话(插件侧无法修复)。
  • 单写者:并发写 facts.json 可能丢更新,设计意图为一机一 agent。
  • 抓取阶梯不解决 IP 级封锁、TLS 中间人或终止连接的代理。

结尾

dsh-limit-break 把「会话归零」和「主机不可达」两类常见限制做成四个可测量、可本地验证的工具:磁盘事实库 + 有基准的 memory_recall,以及不牺牲证书校验的 resilient_fetch。进一步了解可访问目录页 skillhub.cn/plugins/Ma354/dsh-limit-break 与 GitHub 仓库 github.com/Ma354/dsh-limit-break。

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

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

小夜