前言¶
DeepSeek Harness(DSH)支持通过插件扩展能力,其中上下文压缩(compaction / ACP)会折叠历史消息以节省空间。对于需要始终生效的系统指令或角色设定,容易被压缩掉或丢失。
dsh-session-prompt 是一个 DSH Web 插件,它将每个会话的固定提示词注册为系统提示词段。这段文本随每次请求完整发送,不进入对话历史,因此不会被压缩折叠。
是什么¶
dsh-session-prompt 是一个针对 DSH Web 的插件,由 a404670637-ch 维护。它为每个会话固定一段提示词,该提示词作为系统提示词的一部分发送,不参与对话历史压缩,从而保证始终完整传给模型。
核心功能¶
- 每个对话独立:状态按会话 id 保存,不同会话互不影响;分支/新会话默认没有提示词。
- 会话头部入口:在会话标题旁新增「提示词 / Prompt」按钮;有内容时显示一个圆点。点击打开编辑弹窗。
- 仅空闲时可编辑:模型运行中弹窗为只读,保存按钮禁用;Host 侧也会拒绝运行中的保存(
RUNNING)。 - 上限保护:默认 5,000 tokens;保存时按 token 预算校验,超出会拒绝并显示计数,不会静默写入。
- 持久化:数据保存在
$DSH_HOME/dsh-session-prompt/sessions/<sha256(sessionId)>.json,重启后保留。 - 中英文 UI:跟随 DSH 语言设置。
安装与启用¶
要求:DSH 0.2.x、Web profile、Node.js 22+。
方式 A:DSH CLI(推荐)¶
git clone https://github.com/a404670637-ch/dsh-session-prompt.git
# 注意:dsh plugin 会在 profile 目录里执行 pnpm,
# 因此请传克隆目录的绝对路径,不要用 ./dsh-session-prompt。
dsh plugin --profile web add "C:\src\dsh-session-prompt" # Windows
# dsh plugin --profile web add "$HOME/src/dsh-session-prompt" # macOS / Linux
安装完成后刷新 DSH Web 页面(Client 半是浏览器模块,需要重新加载)。
方式 B:插件管理器¶
在 DSH 的 plugin_manager 中用 install_bundle 指向克隆下来的目录,确认 dsh.bundle.patch 生效后刷新页面。
方式 C:手动 patch(开发/调试)¶
把仓库放进 profile 的依赖可解析位置,然后在 profile 的 cordis.patch.yml 中加入:
- insert:
- id: session-prompt
name: dsh-session-prompt
config:
maxTokens: 5000
sectionOrder: 9500
安装后请确认插件行是 active;Client 半需要刷新页面才会出现按钮。
配置¶
- insert:
- id: session-prompt
name: dsh-session-prompt
config:
maxTokens: 5000 # 每个对话的固定提示词 token 上限
sectionOrder: 9500 # 系统提示词段顺序
maxTokens默认5000。建议不要调到 5,000 以上:它会永久占用每次请求的头部 token。sectionOrder默认9500,位于交付物引用(9000)之后、结构化输出(9900)之前。
Token 上限与估算¶
用公开的 DeepSeek-V3 tokenizer(tokenizers 0.23.3)实测:
| 文本类型 | chars/token | ≈ 5,000 tokens 的字数 |
|---|---|---|
| 中文说明文 | 1.773 | 约 8,800 字 |
| 英文说明文 | 5.75 | 约 28,800 字 |
| 中英混排 Markdown | 2.58 | 约 12,900 字 |
代码、符号、emoji 的 token 密度更高,所以插件没有用固定字数,而是用随内容组成切换的保守估算(CJK 0.55 tok/char、ASCII 字母数字空白 0.17、ASCII 标点 0.4、其他非 ASCII 0.8 起)。当前保守上限约为:纯中文 7,300 字 / 纯英文 25,000 字 / 中英混排 12,500 字。界面实时显示估算 tokens 与字符数。
与上下文窗口的关系¶
- 提示词上限 5,000 tokens,约为 1,048,576 窗口的 0.48%。
- 它会被计入 bili(billion-context)等压缩插件的输入估算,不会绕过 80% 压缩线。
- 把
maxTokens调得很大才会明显抬高头部占用;保持 5,000 以内是安全的。 - 推荐搭配:
billion-context的compress.maxContextLimit设为80%左右,让历史在接近窗口前先折叠。
适用场景与注意¶
- 只针对 DSH Web(Client 半使用
conversation.session.header.actions与shell.overlay槽位);TUI/headless 不显示该按钮,但 Host 段仍会注入。 - 会话 id 来自 DSH;分支/新会话不会复制提示词。
- 保存时只允许空闲状态;如果模型正在运行,请等结束。
- 本插件不修改 DSH 的 compaction/native 行为,也不写 bili 的状态。
- 数据只存本地
$DSH_HOME,不发网络请求。
总结¶
dsh-session-prompt 提供了在 DSH Web 中为每个会话固定一段提示词的能力,该提示词作为系统提示词段发送,不会因上下文压缩而丢失。适合需要始终生效的系统指令或角色设定的场景。
- 目录页:https://www.skillhub.cn/plugins/a404670637-ch/dsh-session-prompt
- GitHub:https://github.com/a404670637-ch/dsh-session-prompt