前言¶
在 DeepSeek Harness(DSH)里跑智能体,每轮请求都会带上一大块「常驻上下文」:各插件注册的系统提示词段、技能目录条目、工具 schema 等。其中系统提示词和技能目录往往很长,却多数轮次用不上,却照样占字符、占成本。常见做法是整段删掉或手工裁剪配置,容易误伤必须每轮遵守的协议,也不方便按需查原文。
下面介绍社区插件 dsh-context-curator(目录名 zhangyahao/dsh-context-curator,Harness 内 id 为 context-curator)。它不改工具 schema,也不动别人的配置文件,只在 Harness 提供的扩展点上把超长段折叠成一行索引,原文留在插件内存里;模型或你在需要细节时用工具按名字取回。
这是什么¶
Context Curator(上下文策展) 由维护者 zhangyahao 发布,在 SkillHub 社区目录中归类为记忆。一句话定位:把每轮模型请求里冗长但偶尔才用得上的提示词段(以及新会话里的技能目录描述)压成一行索引,全文按需加载。
插件版本在仓库 package.json 中为 0.1.0,许可证 MIT。社区目录页:https://www.skillhub.cn/plugins/zhangyahao/dsh-context-curator;源码与说明:https://github.com/zhangyahao/dsh-context-curator。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文仅基于上述仓库 README 与 package 信息。
Harness 常驻上下文里它动哪一块¶
README 将常驻上下文概括为三部分:
.dsh里各插件注册的系统提示词段(协作协议、记忆指南、叙述规则等)——通常是字符大头;- 技能目录(
<available_skills>,每条约 500 字符量级); - 工具 schema——本插件不处理,工具定义必须一直在,否则模型无法调用。
本插件针对第 1、2 项:超过阈值(或可配置策略)的段,在装配结果里把 text 换成类似下面的一行索引,原文存入插件内存:
⟨ctx⟩ agent-teams|4821 字符已折叠|AgentTeams captain protocol …|需要时 context_load("agent-teams")
需要协议细节时,调用 context_load("agent-teams") 取回全文,再按原文执行。
核心机制(扩展点)¶
机制均通过 Harness 自有扩展点实现,README 未描述对第三方配置的改写:
system-prompt/assemble(global waterfall):在装配好的assembly.sections上,对超阈值段的text换成索引行,原文进插件内存;返回什么,模型就看到什么。agent/pre-step(global waterfall):对@deepseek-ai/dsh-tool-skill注入的、source.kind === 'skill-catalog'的消息,把描述压成首句;source.entries原样保留(技能侧去重依赖 entries 摘要)。- 回调外层
try/catch:assembly 链路抛错会导致整会话发不出请求,失败时原样放行。
技能目录生效时机(README 已实测说明):新会话首轮由 dsh-tool-skill 发布目录后,本插件在最外层改写,模型看到的是压缩版(实测首句形如「本会话可用技能 N 个」);已打开的旧会话里目录已作为历史消息落盘、不再重发,插件改不动——若要让老会话立刻变短,只能新开会话。context_ledger 的 stats 里 catalogs 为 0 时属正常。
装插件或升级后,新注册的提示词段会在下一次请求自动参与折叠(enabled: true 时无需额外登记);折叠按每轮装配时的字符数实时计算。可选 foldNewSections: true:新出现的段即使不到 minChars 也直接折叠(老段仍按阈值);风险是极短的状态段也可能被折,行为异常时可加入 protect。
工具与配置¶
| 工具 | 作用 |
|---|---|
context_ledger |
逐段列出字符数、是否已折叠、建议折叠项(只读)。先看代价再开开关。 |
context_load |
按段名取回全文;折叠行里 ⟨ctx⟩ 后即为段名。 |
context_config |
读/改开关与阈值,立即生效并持久化到 DSH 数据目录的 data/context-curator.json(即 $DSH_HOME/data/context-curator.json)。 |
装好后默认 enabled: false:只记账、不改文本。卸载可用 plugin_manager 的 remove_bundle,或用 set_plugin 关闭。
安装与启用¶
这是一个 bundle 插件,安装方式与 README 中其他本地 bundle 一致(不要用未在文档中出现的 dsh plugin add github:… 一类命令代替):
- 将仓库克隆或拷贝到本地任意目录(不要放进 profile 的
node_modules); - 在 Harness 里通过
plugin_manager的install_bundle,target 填该目录的绝对路径; - 安装后重启 Harness(插件没有热重载)。
经过上面的步骤,建议按 README 的使用顺序操作:
- 保持默认
enabled: false,先观察不改文; - 让模型或你自己执行
context_ledger,看清哪几段最贵; - 把不能折的段写入
protect(例如规定工具调用格式、不看就会违规的段); - 在
context_config里设enabled: true,下一次请求生效; - 若某能力行为退化,先
context_load该段核对原文,再决定是否protect。
装完或升级后想确认「多花了多少、有没有被折掉」,再跑一次 context_ledger:新出现过的段会标 [新],并单独列出本次运行新出现的段名。
已知边界与适用注意¶
- 折叠后模型看不到该段正文,仅见索引与首句;若段内是每步变化的动态信息,索引首句会更新,正文不会自动出现——需要时须
context_load。 - 原文在插件内存:Harness 重启或插件重载后,折叠前的原文需等下一次装配重新记录;此前
context_load可能取不到。折叠本身仍按实时 assembly 生成。 - 不减少工具 schema 占用;技能目录压缩只对新会话生效(见上)。
context_ledger的stats里「最近一次装配节省」只统计系统提示词段;技能目录节省记在catalogSavedNow。
插件以当前 DSH 进程的权限运行;安装前请自行查看 GitHub 源码与 MIT 许可证,确认符合你的环境与合规要求。
结尾¶
dsh-context-curator 适合已经在 Harness 里堆了多段系统提示词、技能目录又偏长的开发者:先 context_ledger 看清成本,用 protect 保住硬规则,再打开折叠,用 context_load 在需要时取回全文,在不大改生态配置的前提下压低每轮常驻上下文体积。